我尝试了很长时间使用石英 cgpdf api 解析 pdf 文件,但我的问题是 CGPDF API 无法编辑保存在 pdf 中的对象?
这意味着仅用于读取文件的api?
我尝试了很长时间使用石英 cgpdf api 解析 pdf 文件,但我的问题是 CGPDF API 无法编辑保存在 pdf 中的对象?
这意味着仅用于读取文件的api?
是的,它只是读取文件。例如,字典只是看起来像这样的东西的表示:
3 0 obj
<< /Font
<< /F0
<< /Type /Font
/BaseFont /Times-Italic
/Subtype /Type1 >>
>>
>>
endobj
可以引用它,使阅读比编辑容易得多,如果您删除某个对象,整个页面可能需要以不同的方式布局。我想为 CGPDF API 编写器不会太难,但它肯定不是微不足道的。要编写新的 pdf,您可以使用普通的图形上下文。
(很抱歉迟到了一年,但可能还有其他人)。
我希望能够编辑 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/