您可以尝试使用 Ghostscript(但使用最新版本,例如 9.05)“修复”您的 pdftk 级联 PDF。在许多情况下,Ghostscript 将能够将许多子集字体合并为更少的字体。
该命令如下所示:
gswin32c.exe ^
-o output.pdf ^
-sDEVICE=pdfwrite ^
-dPDFSETTINGS=/prepress ^
input.pdf
检查与
pdffonts.exe output.pdf
pdffonts.exe input.pdf
每个文件中有多少个不同字体子集的实例(pdffonts.exe
在此处作为命令行工具小包的一部分提供)。
但是不要抱怨这个过程的“速度慢”——Ghostscript 确实会完全解释所有 PDF 输入文件以完成其任务,而 pdftk 文件连接是一个更简单的过程......
更新:
而不是pdftk
您可以使用 Ghostscript 来合并您的输入 PDF 文件。这可能会避免您在对 pdftk 合并文件进行后验 Ghostscript“修复”时看到的问题。请注意,这将比 'dumb' pdftk merge 慢得多。但是,结果可能会让您更满意,尤其是在字体处理和文件大小方面。
这将是一个可能的命令:
gswin32c.exe ^
-o output.pdf ^
-sDEVICE=pdfwrite ^
-dPDFSETTINGS=/prepress ^
input.pdf
您可以向 Ghostscript CLI 添加更多选项,以便对合并和优化过程进行更精细的控制。
最后,您必须在两个极端之间做出决定:
- '快速'
pdftk
产生大的输出文件,与
- 'Slow'
gswin32c.exe
(Ghostscript) 生成精益输出文件。
如果您为您的许多合并过程发布这两种方法的一些结果(执行时间和生成的文件大小),我会很感兴趣......
更新 2: 对不起,我以前的版本包含一个错字。
不是-sPDFSETTINGS=...
,但必须是-dPDFSETTINGS=...
(d代替s)。
更新 3:
由于您的源文件是由模板制作的 Excel 工作表(通常不会使用很多不同的字体),您可以尝试使用一种技巧来确保 Ghostscript 具有所有将要使用的字体的所有必需字形合并后的 PDF:
- 对于每种字体和字体(标准、斜体、粗体、粗斜体),在打印区域左上角的模板表中添加一个表格单元格。
- 使用 ASCII 字母表中的所有可打印字符和标点符号填充此表格单元格:
0123456789
、、、ABCD...XYZ
等。abc...xyz
:-_;°%&$§")({}[]
- 使单元格(和字体大小)尽可能小,以免干扰您的整体布局。使用白色来格式化单元格中的字符(使它们在最终 PDF 中不可见)。
这种方法有望确保您的每个 PDF 将使用相同的字形子集,从而避免您在使用 Ghostscript 合并文件时观察到的问题。(请注意,如果您使用 fe Arial 和 Arial-Italic,则必须创建 2 个这样的单元格:一个使用标准 Arial 字体格式化,另一个使用斜体字体。)