【问题标题】:EDIT CGPDFObject of the pdf编辑pdf的CGPDFObject
【发布时间】:2012-05-04 22:36:54
【问题描述】:

我尝试用石英 cgpdf api 解析 pdf 文件很长时间,但我的问题是 CGPDF API 无法编辑保存在 pdf 中的对象?

是指只用于读取文件的api吗?

【问题讨论】:

    标签: objective-c cgpdfdocument cgpdf cgpdfcontext cgpdfdictionaryref


    【解决方案1】:

    是的,它只是读取文件。例如,字典只是一些看起来像这样的东西的表示:

    3 0 obj 
    << /Font
        << /F0
            << /Type /Font
                /BaseFont /Times-Italic
                /Subtype /Type1 >> 
        >>
    >>
    endobj
    

    可能会被引用,使阅读比编辑更容易,如果您删除某个对象,整个页面可能需要以不同的方式布局。我想为 CGPDF API 编写器不会太难,但它肯定不是微不足道的。要编写新的 pdf,您可以使用普通的图形上下文。

    (很抱歉迟到了一年,但可能还有其他人)。

    【讨论】:

      【解决方案2】:

      我希望能够编辑 PDFContentStreams,但这对于 PDFKit 或 Core Graphics 中的框架是不可能的。所有 PDF 类都不是可变的,也不允许您指定从备用数据源初始化它们。所有 PDFObject 类都只是引用原始 PDFDocument,不允许您替换对象或更改其数据。

      您可以做的最接近的事情是创建一个 CGPDFContext 并从另一个 PDF 文档中绘制一个页面,然后在其上绘制额外的 Quartz 图形。沿着;

      void drawPageToNewPDF (CFURLRef newpdfname, CGRect mediabox, CFDictionaryRef auxdata, PDFPage* pp)
      {
          CGContextRef cgpdf = CGPDFContextCreateWithURL(newpdfname, &mediabox, auxdata);
      
          CGPDFContextBeginPage(cgpdf, NULL);
          CGContextDrawPDFPage(cgpdf, [pp pageRef]);
      // draw extra graphics here
          CGPDFContextEndPage(cgpdf);
          CGPDFContextClose(cgpdf);
      }
      

      但这不允许您更改文档中的现有数据。您可以做的最好的事情是在要更改的对象上放置一个白色(或背景色)实心矩形,然后使用 Core Graphic 基元重新绘制它。

      正确执行此操作的唯一方法是使用支持编辑 PDF 对象的第 3 方库。我一直无法找到用于 Objective-c 的非商业开源 PDF 库。有一些 C++ 库编写包装器并不难。

      我正要走这条路,所以我还没有任何示例代码。 PoDoFo 看起来最有希望 详细的 pdf 编辑 http://podofo.sourceforge.net/ QPDF 仅用于编辑 PDF 结构 http://qpdf.sourceforge.net/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-21
        • 1970-01-01
        • 2016-09-09
        • 2013-01-16
        • 1970-01-01
        • 2019-06-14
        • 2018-07-20
        相关资源
        最近更新 更多