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