在特定页面的现有 PDF 文档上绘制内容

luk*_*ris 5 pdf cocoa-touch objective-c ipad ios

所以我正在为 iPad 实现一种特定类型的 PDF 编辑器,供个人使用。我已经实现了PDF查看器,现在我陷入了编辑部分。这是交易:我在 UIView 中显示文档的每一页,然后创建另一个视图,其中的页面大小完全相同。然后我让用户在视图上绘制

现在,假设我想在绘制的 PDF 文件的确切页面中打印该 UIVIiew。我知道有一种方法可以做到这一点,但是对于更大的文档需要太长时间。我是这样做的(为了更好的理解简化了代码):

UIGraphicsBeginPDFContextToFile(file, pageSize, nil);

for (size_t currentPage = 1; currentPage <= pageCount; currentPage++) {

    UIGraphicsBeginPDFPageWithInfo(pageSize, nil);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    //translates context, copies doc page to the new pdf, translates back
    CGContextTranslateCTM(ctx, 0, pageSize.size.height);
    CGContextScaleCTM(ctx, 1.0, -1.0); 
    CGPDFPageRef page = CGPDFDocumentGetPage (document, currentPage);
    CGContextDrawPDFPage (ctx, page);
    CGContextScaleCTM(ctx, 1.0, -1.0);
    CGContextTranslateCTM(ctx, 0, -pageSize.size.height);
    //custom drawing goes here
    if(currentPage == desiredPage) [imageFromView drawInRect:pageSize];
}
UIGraphicsEndPDFContext();
Run Code Online (Sandbox Code Playgroud)

这里的问题是此过程会重新创建整个 PDF,对于较大的文档,这可能需要几分钟才能完成。

我需要一个解决方案,可以在 PDF 文档的页面中打印 UIView(用户绘制的),而无需重新创建整个文档。

非常感谢任何链接、提示和其他有用信息。提前致谢

Coc*_*ics 1

在 iOS 上只有 CGPDF,并且它不支持可变性,而 Mac 的 PDFDocument 则部分支持可变性。

您必须编写自己的解决方案来获取未修改页面的 PDF 流,并将它们与您正在创建的新页面的 PDF 流相结合。我开始了一个 DTPDFDocument 包装器的开源项目,该项目以 Mac 上的包装器为模型,但到目前为止,我在移动或修改页面方面没有做任何工作: https: //github.com/Cocoanetics/DTPDF

或者您可以使用众多可用的 PDF 框架之一。我首先想到的是 PSPDFKit。