4

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

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

在 iOS 上使用 Core Graphics 在 PDF 中嵌入超链接

如果我使用上述问题的答案中提供的代码,它对我有用。文本显示并且是一个可点击的链接,但如果我指定一个比文本大得多的矩形,则只有文本是可点击的。此外,稍微修改了代码,以便我可以分别提供标签和 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:@"http://stackoverflow.com" frame:CGRectMake(474,22,28,28) cropBox:cropBoxRect sourceContext:context];

变量cropBoxRect 指的是当前页面的裁剪框,上下文是我从文档开头的CGPDFContextCreateWithURL 调用中保存的值。

4

1 回答 1

2

最好编写自己的编写器来将此类注释写入 pdf,而不是使用核心图形 API,因为 Apple 尚未将 PDFKit 用于可可触摸,
- 您可以按照最简单的“增量更新”方法来修改 pdf 中提到的PDF 参考 1.7。
- 您需要在 pdf 中搜索页面对象编号,然后在其中获取 /Annots 数组添加您的注释标记,将其对象编号附加到 /Annots 数组
- 在外部参照表中正确创建新添加/修改的标记的条目。
- 添加预告片令牌。
这是您可以将任何类型的注释添加到 pdf 中的方法。

于 2015-05-13T12:18:26.763 回答