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

时间:2012-04-18 14:53:03

标签: objective-c ios cocoa-touch ipad pdf

所以我正在为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(用户绘制的),而无需重新创建整个文档。

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

1 个答案:

答案 0 :(得分:1)

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

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

或者您可以使用众多可用的PDF框架之一。 PSPDFKit是第一个浮现在脑海中的人。