【问题标题】:Draw content on existing PDF Document in specific Page在特定页面中的现有 PDF 文档上绘制内容
【发布时间】:2012-04-30 00:31:44
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我不确定我得到了你想要的东西。是关于在屏幕上渲染绘图还是创建一个新的/更改的 PDF 文档,包含来自屏幕的绘图?
  • 我想创建一个修改过的 PDF 文档(或修改现有的),但又不想复制其中的每一页
  • 你解决了吗?您能否将其拆分为多个文档(每页 1 个),允许用户一次编辑一个页面,然后在最后将它们重新组合回来?
  • 嗨朋友,我设法从特定页面中提取 UIImage,而不是更改该图像,然后再次渲染整个文档。如果你愿意,我可以更新我的问题,以便它有代码

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


【解决方案1】:

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

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

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

【讨论】:

  • 我不太喜欢 PDF 文件格式,也不想卷入围绕它的疯狂。但是您确实回答了我的问题,非常感谢您!只是为了记录,我最终每次都写了整个文件(尽管在较大的文件上花了一段时间)
猜你喜欢
  • 2012-08-22
  • 1970-01-01
  • 2022-08-23
  • 1970-01-01
  • 2021-12-21
  • 2015-10-18
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多