ios - UIGraphicsSetPDFContextURLForRect 不会在 Core Graphics PDF 上创建可点击区域

标签 ios pdf uikit pdf-generation core-graphics

我正在尝试在我的 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:@"http://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 数组
- 正确地在外部参照表中为新添加/修改的标记创建条目。
- 添加预告片 token ..
这是您可以将任何类型的注释添加到 pdf 的方法。

关于ios - UIGraphicsSetPDFContextURLForRect 不会在 Core Graphics PDF 上创建可点击区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19145505/

相关文章:

ios - 从 WKWebview 检索 HTTP 响应 header

iOS Quickblox 聊天 : getting error: Code=-999 "You need to enable stream management to use this feature

java - 将 PDFBox 坐标转换为 PDPage::convertToImage 的像素坐标

ios - UIView.animateWithDuration 快速循环动画

ios - 如何自定义 UITableView 水平方向滚动?

ios - 从多个 CGRect 获取 maxX 和 minX,maxY 和 minY

ios - 尝试在标签上设置自动约束,但在长文本上失败

c# - 从内存 ASP.Net 加载 PDF

javascript - 如何在 HTML 页面中嵌入 PDF?

ios - 处理 UIView 大小调整的最稳定方法?