【问题标题】:Annotate PDF within iPhone SDK在 iPhone SDK 中注释 PDF
【发布时间】:2011-01-19 18:12:29
【问题描述】:

我已经设法在我的应用程序中实现了一个非常基本的 PDF 查看器,但想知道是否可以向 PDF 添加注释。我查看了 SDK 文档,但没有找到任何东西。我真的有两个问题:

  1. 可以这样做吗?
  2. 最好的方法是什么?
  3. 是否有我可以包含的框架或库来帮助解决这个问题?

谢谢。

【问题讨论】:

  • 嗨,杰克,你做注释了吗?

标签: iphone pdf annotate


【解决方案1】:

我正在研究这些东西并创建了一个 GitHub 项目。请查看here

【讨论】:

  • 但是您的项目不会将注释保存到 pdf 。我检查了源代码,它正在归档独立于实际 pdf 文件的所有注释信息。因此,如果我将 pdf 文件传递​​给另一台机器,则 pdf 将被传输而不会进行任何更改。
  • 正在开发中。请稍后查看:)
  • @lazyprogram,请更新它的库,因为我收到 dylib 错误,并且从 xcode 7 运行时应用程序在设备上崩溃。
  • 嗨,我使用了你的项目,它运行良好。但现在我需要像一个 Skitch 应用程序一样用手移动文本视图或绘制的图像。如何实施?你能提供任何开始吗?
【解决方案2】:

您可以通过阅读 PDF 页面,将其绘制到新的 PDF 图形上下文中,然后在该图形上下文中绘制额外内容来进行注释。这是一些将位置 (100.0,100.0) 处的单词“示例注释”添加到现有 PDF 的代码。 getPDFFileName 方法返回原始 PD 的路径。 getTempPDFFileName 返回新 PDF 的路径,即原始 PDF 加上注释的路径。

要改变注释,只需添加更多绘图代码来代替 drawInRect:withFont: 方法。有关如何执行此操作的更多信息,请参阅 iOS 绘图和打印指南。

- (void) exampleAnnotation;
{
    NSURL* url = [NSURL fileURLWithPath:[self getPDFFileName]];

    CGPDFDocumentRef document = CGPDFDocumentCreateWithURL ((CFURLRef) url);// 2
    size_t count = CGPDFDocumentGetNumberOfPages (document);// 3

    if (count == 0)
    {
        NSLog(@"PDF needs at least one page");
        return;
    }

    CGRect paperSize = CGRectMake(0.0,0.0,595.28,841.89);

    UIGraphicsBeginPDFContextToFile([self getTempPDFFileName], paperSize, nil);

    UIGraphicsBeginPDFPageWithInfo(paperSize, nil);

    CGContextRef currentContext = UIGraphicsGetCurrentContext();

    // flip context so page is right way up
    CGContextTranslateCTM(currentContext, 0, paperSize.size.height);
    CGContextScaleCTM(currentContext, 1.0, -1.0); 

    CGPDFPageRef page = CGPDFDocumentGetPage (document, 1); // grab page 1 of the PDF 

    CGContextDrawPDFPage (currentContext, page); // draw page 1 into graphics context

     // flip context so annotations are right way up
    CGContextScaleCTM(currentContext, 1.0, -1.0);
    CGContextTranslateCTM(currentContext, 0, -paperSize.size.height);

    [@"Example annotation" drawInRect:CGRectMake(100.0, 100.0, 200.0, 40.0) withFont:[UIFont systemFontOfSize:18.0]];

    UIGraphicsEndPDFContext();

    CGPDFDocumentRelease (document);
}

【讨论】:

  • 这是一个巨大的帮助。一旦我对此有了更深入的了解,我将创建一个 github 项目与社区分享。
  • 你做了一个 GitHub 项目@Jack 吗?
  • @Metthew 我尝试了您的示例,但无法打开文档。我收到“权限被拒绝”错误。
  • @Juzzz:可能是因为您尝试修改的 pdf 受密码保护
  • @Obliquely 您的代码将在 pdf 页面中添加文本注释,但它是否可以被 adobe 或 MAC 的预览等其他应用程序修改?因为您只是在 pdf 页面上绘制注释,而不是在 /Annots pdf 字典中为该注释创建任何条目。
【解决方案3】:

我认为PDFAnnotation 或 PDFKit 没有从桌面移植到 iPhone.... 可能是 file a radar 的一个很好的借口。不过,Haru 可能会在此期间帮助您。

【讨论】:

  • 目前,Haru 仅可在以下平台上运行:1. Cygwin + GCC (Microsoft Windows) 2. Cygwin + MinGW (Microsoft Windows) 3. MSYS + MinGW (Microsoft Windows) 3. Microsoft VC++ (Microsoft Windows) 4. Borland C++ (Microsoft Windows) 5. GCC (Linux, FreeBSD, NetBSD, Solaris...)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 2013-06-25
  • 2023-03-13
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多