为什么将PDF页面与CGContextDrawPDFPage组合会创建非常大的输出文件?

时间:2010-06-23 06:16:02

标签: cocoa macos pdf core-graphics

我遇到了这个尝试将一个简单的Automator脚本放在一起组合几个单页PDF文件。我有88个文件要合并,每个只有大约300KB,所以我预计最终产品大约30MB;使用Combine PDFs Automator操作生成的PDF文件为300 + MB。

Automator操作使用带有Foundation绑定的Python脚本来创建带有CoreGraphics PDF API的新PDF文档。似乎没有什么不合适的地方。基本上,它正在这样做(简化,但这些是高点):

writeContext = CGPDFContextCreateWithURL(outURL, None, None)
for url in inURLs:
    doc = CGPDFDocumentCreateWithURL(url)
    page = CGPDFDocumentGetPage(doc, 1)
    mediaBox = CGPDFPageGetBoxRect(page, kCGPDFMediaBox)
    CGContextBeginPage(writeContext, mediaBox)
    CGContextDrawPDFPage(writeContext, page)
    CGContextEndPage(writeContext)
CGPDFContextClose(writeContext)

我无法想象CGContextDrawPDFPage在绘制到PDF上下文时会做什么,但会复制该页面的PDF数据(带有一些装饰)。

即使“合并”一个PDF,输出也是2.8MB,而300KB原始单页PDF。

生成的PDF看起来与原始页面完全相同:文本可在同一位置选择,图形看起来相同,页面大小完全相同。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

输入PDF是否包含相同的字体集或不同的集?也许如果原件不包含嵌入字体,但输出确实如此,这可能会导致一些增长。