UIGraphicsSetPDFContextURLForRect no crea una región en la que se puede hacer clic en un Core Graphics PDF

Estoy intentando crear una región rectangular en mi PDF que vaya a una URL. El PDF se crea en una aplicación de iOS que utiliza rutinas Core Graphics.

En una búsqueda para encontrar a alguien con un problema similar, encontré esta pregunta sobre desbordamiento de stack:

Insertar hyperlink en PDF usando Core Graphics en iOS

Si utilizo el código provisto en la respuesta de la pregunta anterior, funciona para mí. El text aparece y es un enlace que se puede hacer clic, pero si especifica un rectángulo que es mucho más grande que el text, solo se puede hacer clic en el text. Además, modifiqué el código un poco para que pudiera proporcionar una label y un URL por separado, y cuando hice esto y proporcioné una cadena vacía, no había nada en el rectángulo que se pudiera hacer clic en ninguna parte.

Sin embargo, si utilizo las rutinas UIKit para crear un PDF (básicamente UIGraphicsBeginPDFContextToFile y descendientes), entonces la llamada a UIGraphicsSetPDFContextURLForRect crea una región en el file PDF resultante que se puede hacer clic, incluso si no proporciono ningún text.

Aquí está el método que estoy usando para crear el enlace rectángulo:

+ (void)rectLink:(NSString *)urlString frame:(CGRect)frameRect cropBox:(CGRect)cropBoxRect sourceContext:(CGContextRef)context { UIGraphicsPushContext(context); #ifdef OUTPUT_TEXT_LINK_OUTLINE CGContextSetLineWidth(context, 5.0); CGContextSetStrokeColorWithColor(context, [UIColor purpleColor].CGColor); CGContextStrokeRect(context, frameRect); #endif NSURL *url = [NSURL URLWithString:urlString]; UIGraphicsSetPDFContextURLForRect(url, frameRect); UIGraphicsPopContext(); } 

(El OUTPUT_TEXT_LINK_OUTLINE define es algo que estoy usando para probar para asegurarme de que el rectángulo que estoy pasando es, de hecho, donde se supone que debe estar).

Y aquí hay una llamada que estoy haciendo al método anterior en la primera página de mi generación de PDF:

 [self rectLink:@"http://stackoverflow.com" frame:CGRectMake(474,22,28,28) cropBox:cropBoxRect sourceContext:context]; 

La variable cropBoxRect hace reference al recuadro de recorte para la página actual y el context es el valor que estoy guardando de la llamada CGPDFContextCreateWithURL al comienzo del documento.

Es mejor escribir su propio escritor para escribir tales annotations en pdf en lugar de utilizar las API de charts centrales. Como Apple no ha tomado PDFKit a cocoa-touch,
– Puede seguir el enfoque más simple de "actualización incremental" para modificar el pdf que se menciona en la reference de PDF 1.7.
– Necesita search el número de object de la página en formatting pdf y luego get / Arreglo de anotación en el que agrega su token de anotación, anexar su número de object a / Arreglo de anotación
– Haga las inputs para los tokens recién agregados / modificados en la tabla de reference de forma correcta.
– Agregar token de trailer ..
Así es como puede agregar cualquier tipo de annotations en pdf.