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

标签 cocoa macos pdf core-graphics

我在尝试编写一个简单的 Automator 脚本来组合多个单页 PDF 文件时遇到了这个问题。我有 88 个文件需要组合,每个文件大小正好为 300KB,所以我预计最终产品约为 30MB;使用“合并 PDF 自动器”操作生成的 PDF 文件大小为 300+MB。

经过一番研究,Automator 操作使用带有 Foundation 绑定(bind)的 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,而原始一页 PDF 为 300KB。

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

有什么想法吗?

最佳答案

输入的 PDF 包含相同的字体集还是不同的字体集?也许如果原始版本不包含嵌入字体,但输出包含嵌入字体,这可能会导致部分增长。

关于cocoa - 为什么将 PDF 页面与 CGContextDrawPDFPage 组合会创建非常大的输出文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3099312/

相关文章:

objective-c - NSButton 没有响应

C++ 项目在glewinit()之后崩溃

macos - 如何在状态栏应用程序中定位 NSPopover (macOS)

macos - 在 ViewController viewDidLoad 之前执行 NSApplicationDelegate 代码

python - 使用python将多页pdf文件拆分为多个pdf文件?

objective-c - 仅在 Cocoa 中允许全屏

objective-c - 如何在 Mac (Cocoa) 应用程序中实现夜间模式?

cocoa - 在 Cocoa 中,如何设置数据包的 TTL?

c# - iTextSharp GetFieldPositions 到 SetSimpleColumn

javascript - 自动下载的优雅解决方案