首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编辑pdf的CGPDFObject

编辑pdf的CGPDFObject
EN

Stack Overflow用户
提问于 2012-04-24 17:43:05
回答 2查看 287关注 0票数 1

我尝试了很长时间用quartz cgpdf api解析一个pdf文件,但我的问题是CGPDF API不能编辑保存在pdf中的对象?

这是不是意味着api只用于读取文件?

EN

回答 2

Stack Overflow用户

发布于 2013-03-20 15:33:59

是的,它只是为了读取文件。例如,字典只是类似于下面这样的东西的表示:

代码语言:javascript
运行
复制
3 0 obj 
<< /Font
    << /F0
        << /Type /Font
            /BaseFont /Times-Italic
            /Subtype /Type1 >> 
    >>
>>
endobj

如果您删除某个对象,则整个页面可能需要不同的布局。我猜为CGPDF API编写一个编写器并不是太难,但它肯定不是微不足道的。要编写新的pdf,您可以使用普通的图形上下文。

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

票数 1
EN

Stack Overflow用户

发布于 2021-01-06 20:57:55

我很乐意能够编辑PDFContentStreams,但这是不可能的框架在PDFKit或核心图形。所有PDF类都不是可变的,也不允许您指定从备用数据源初始化它们。所有的PDFObject类都只是引用原始的PDFDocument,不允许您替换对象或更改其数据。

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

代码语言:javascript
运行
复制
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);
}

但这不允许您更改文档中的现有数据。你能做的最好的就是在你想要改变的对象上放置一个白色(或背景色)的实心矩形,然后使用核心图元重新绘制它。

正确执行此操作的唯一方法是使用支持编辑PDF对象的第三方库。我还没能找到objective-c的非商业开源PDF库。有几个C++库,为它们编写包装器并不太难。

我正要沿着这条路走下去,所以我还没有任何示例代码。PoDoFo看起来最有希望的详细pdf编辑http://podofo.sourceforge.net/ QPDF只是编辑一个pdf结构http://qpdf.sourceforge.net/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10295413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档