ios – UIGraphicsSetPDFContextURLForRect不会在Core Graphics PDF上创建可单击区域

我正在尝试在我的PDF上创建一个矩形区域,该区域将转到URL. PDF是使用Core Graphics例程在iOS应用程序中创建的.

在寻找有类似问题的人的搜索中,我发现了这个Stack Overflow问题:

Embed hyperlink in PDF using Core Graphics on iOS

如果我使用上述问题答案中提供的代码,它对我有用.文本显示并且是可点击的链接,但如果我指定的文本比文本大得多,则只能查看文本.另外,稍微修改了代码,以便我可以单独提供标签和URL,当我这样做并提供一个空字符串时,矩形中没有任何可点击的内容.

但是,如果我使用UIKit例程来创建PDF(基本上是UIGraphicsBeginPDFContextToFile和后代),那么对UIGraphicsSetPDFContextURLForRect的调用会在生成的PDF文件中创建一个可点击的区域,即使我没有提供任何文本.

这是我用来创建矩形链接的方法:

+ (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();
}

(OUTPUT_TEXT_LINK_OUTLINE定义是我用于测试的东西,以确保我传入的矩形实际上是应该的位置.)

这是我在PDF生成的第一页上对上述方法的调用:

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

变量cropBoxRect引用当前页面的裁剪框,context是我从文档开头的CGPDFContextCreateWithURL调用中保存的值.

最佳答案 最好编写自己的编写器来编写这样的注释到pdf而不是使用核心图形API,因为Apple还没有把PDFKit带到cocoa-touch,

– 您可以按照最简单的“增量更新”方法修改PDF参考1.7中提到的pdf.

– 你需要在pdf中搜索页面对象编号然后在其中获取/ Annots数组添加注释标记,将其对象编号追加到/ Annots数组

– 正确地在外部参照表中为新添加/修改的令牌创建条目.

– 添加预告片令牌..

 这是您可以将任何类型的注释添加到pdf中的方法.

点赞