24

我正在尝试使用基于 QuartzDemo 的 CGPDFDocument编写一个简单的 PDF 查看器。
有一个常见的渲染:

-(void)drawInContext:(CGContextRef)context
{
    // PDF page drawing expects a Lower-Left coordinate system, 
    // so we flip the coordinate system before we start drawing.
    CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);

    // Grab the first PDF page
    CGPDFPageRef page = CGPDFDocumentGetPage(pdf, pageNumber);
    // We're about to modify the context CTM to draw the PDF page
    //  where we want it, so save the graphics state 
    // in case we want to do more drawing
    CGContextSaveGState(context);
    // CGPDFPageGetDrawingTransform provides an easy way 
    // to get the transform for a PDF page. It will scale down to fit, 
    // including any base rotations necessary to display the PDF page correctly. 
    CGAffineTransform pdfTransform = 
            CGPDFPageGetDrawingTransform(page, 
                    kCGPDFCropBox, self.bounds, 0, true);
    // And apply the transform.
    CGContextConcatCTM(context, pdfTransform);
    // Finally, we draw the page 
    // and restore the graphics state for further manipulations!
    CGContextDrawPDFPage(context, page);
    CGContextRestoreGState(context);
}

据我了解,它是唯一的绘图,因此所有结构导航或传出链接都应手动处理(例如在触摸事件中)。

有一些函数可以设置 URL使用 URL 创建元素

问题是:如何从某个 PDF 块中获取传出链接 URL?

谢谢!

类似问题:
iPhone/iPad 上的 PDF 超链接
如何访问 PDF 文档 (iPhone) 中的超链接?

同样在
iPhone SDK 开发 GGroup
macRumors 论坛
iPhone 开发 SDK 论坛
Dev Shed 论坛
iphonedevbook.com

4

1 回答 1

17

这是一个不平凡的问题,这就是为什么您找不到简单的答案。解决方案是:您必须解析 PDF 文档。好消息是,Apple 提供了一些功能可以让你做到这一点。坏消息是,它们是程序性的,伙计,这是一个令人费解的混乱。

在非常粗略的伪代码中:

  • 使用 CGPDFDocumentGetCatalog 获取 PDF 的目录
  • 在目录的“pages”元素中查找您要查找的页面(是的,它是字典,不是数组,而且是嵌套的,所以这个简单的操作并不那么简单)。
  • 现在使用 CGPDFDictionaryGetArray 来获取“Annots”对象
  • 接下来,您需要遍历注释并查找“链接”对象。

Adobe 发布了一份文档,其中列出了 PDF 规范。祝你好运!

于 2010-09-28T00:27:05.287 回答