Ale*_*leV 7 pdf excel ghostscript embedded-fonts pdftk
有没有办法从pdf文件中删除多次嵌入的字体?
这是我的情景:
1)程序生成几个单页pdf报告(查询数据库,将信息放在Excel模板上并以pdf格式导出格式化信息)
2)pdftk将单页pdf合并到一个文件中.
一切正常,但结果pdf的大小非常大:事实上,我注意到字体嵌入了多次(与页面的数量一样多的时间:所有页面都是从同一个excel模板开始生成的,字体嵌入在单个pdf文件中,pdftk只是粘贴pdf).有没有办法只记录每个嵌入字体的一个副本?
我尝试在从excel-> pdf导出时将字体嵌入到第一页中:文件的大小显着减小,但似乎其他页面无法访问嵌入字体.
谢谢,亚历山德罗
您可以尝试使用Ghostscript来“修复”由pdftk连接的PDF(但请使用最新版本,例如9.05)。在许多情况下,Ghostscript将能够将许多子集的字体合并为更少的字体。
该命令将如下所示:
gswin32c.exe ^
-o output.pdf ^
-sDEVICE=pdfwrite ^
-dPDFSETTINGS=/prepress ^
input.pdf
Run Code Online (Sandbox Code Playgroud)
检查与
pdffonts.exe output.pdf
pdffonts.exe input.pdf
Run Code Online (Sandbox Code Playgroud)
每个文件中有多少个各种字体子集的实例(pdffonts.exe可在此处作为命令行工具的一小包的一部分获得)。
但是不要抱怨这个过程的``慢速''-Ghostscript确实会完全解释所有PDF输入文件以完成其任务,而pdftk文件的连接则是一个简单得多的过程...
更新:
相反,pdftk您可以使用Ghostscript合并输入的PDF文件。这可能可以避免pdftk合并文件的后验Ghostscript“修复”问题。注意,这将比'dumb'pdftk merge慢得多。但是,结果可能会更好,特别是在字体处理和文件大小方面。
这可能是命令:
gswin32c.exe ^
-o output.pdf ^
-sDEVICE=pdfwrite ^
-dPDFSETTINGS=/prepress ^
input.pdf
Run Code Online (Sandbox Code Playgroud)
您可以向Ghostscript CLI添加更多选项,以对合并和优化过程进行更精细的控制。
最后,您必须在两个极端之间做出选择:
pdftk生成大型输出文件,而gswin32c.exe(Ghostscript)生成精益输出文件。如果您要为许多合并过程的两种方法发布一些结果(执行时间和生成的文件大小),我将很感兴趣...
更新2: 对不起,我的先前版本包含一个错字。
不是,-sPDFSETTINGS=...但必须是-dPDFSETTINGS=...(d代替s)。
更新3:
由于您的源文件是由模板制作的Excel工作表(通常不使用很多不同的字体),因此您可以尝试使用技巧来确保Ghostscript具有所有需要使用的字体的所有必需的字形。合并后的PDF:
0123456789,ABCD...XYZ,abc...xyz,:-_;°%&$§")({}[]等。该方法有望确保您的每个PDF都使用相同的字形子集,这样可以避免在将文件与Ghostscript合并时观察到的问题。(请注意,如果您使用fe Arial和Arial-Italic,则必须创建2个此类单元格:一个用标准Arial字体格式化,另一个用斜体格式化。)