5

所以我正在为 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();

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

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

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

4

1 回答 1

1

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

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

或者,您可以使用众多可用的 PDF 框架之一。PSPDFKit 是第一个想到的。

于 2012-12-09T09:37:50.247 回答