我有一个PDF文件,我想优化。我从外部来源收到文件,所以我无法从头开始重新创建它。
当我在Acrobat中打开文件并查询资源时,它表示文件中的字体占用了90%以上的空间。如果我将文件保存为postscript,然后将postscript文件保存为优化的PDF,则文件要小得多(小80%以上),并且字体仍然是嵌入的。
我正在尝试使用ghostscript重新创建这些结果。我已尝试使用pswrite和pdfwrite进行各种选项排列,但是当我从PDF到Postscript进行初始转换时,文本会转换为图像。当我转换回PDF时,字体引用已经消失,所以我最终得到一个PDF文件,其中包含'imaged'文本而不是实际字体。
该文件包含22种嵌入式自定义Type1字体。我已经将字体添加到ghostscript搜索路径,并证明ghostscript可以找到它们:
gs \
-I/home/nauc01
-sFONTPATH=/home/nauc01/fonts/Type1 \
-o 3783QP.pdf \
-sDEVICE=pdfwrite \
-g5950x8420 \
-c "200 700 moveto" \
-c "/3783QP findfont 60 scalefont setfont" \
-c "(TESTING !!!!!!) show showpage"
生成的文件正确嵌入了字体。
我也尝试过使用ghostscript从PDF到PDF:
gs \
-sDEVICE=pdfwrite \
-sNOPAUSE \
-I/home/nauc01 \
-dBATCH \
-dCompatibilityLevel=1.4 \
-dPDFSETTINGS=/printer \
-CompressFonts=true \
-dSubsetFonts=true \
-sOutputFile=output.pdf \
input.pdf
但输出通常大于输入,除了ghostscript之外我无法查看任何文件(adobe reader给出了“对象标签格式错误”)。
我无法提供原始文件,因为它们包含机密信息,但我会尝试回答任何需要回答的问题。
有什么想法吗?提前谢谢。
答案 0 :(得分:2)
不要使用pswrite。正如您所发现的,这将呈现文本。而是使用保留字体和文本的ps2write设备。
你没有说你正在使用哪个版本的Ghostscript,但我建议你使用最近的版本。
一点; Ghostscript没有像Acrobat那样“优化”PDF,而是重新创建它。原始PDF被完全解释为产生一系列标记页面的操作,pdfwrite(和ps2write)然后创建一个只有内部操作的新文件。
如果您选择子集字体,则仅包含所需的字形。如果原始PDF包含无关信息(例如,Adobe Illustrator通常会嵌入.ai文件的完整副本),那么这将被丢弃。 可能会导致文件较小,或者可能不会。
请注意,pdfwrite目前不支持压缩外部参照和其他一些后续功能,因此有些文件可能会变大。
我个人不通过ps2write,因为这只是增加了另一层的prcoessing和丢弃信息。我只想用pdfwrite创建一个新的PDF文件。如果您找到不起作用的文件(使用当前代码),那么您应该在http://bugs.ghostscript.com处引发错误报告,以便有人可以解决问题。
答案 1 :(得分:0)
您可能想尝试使用Multivalent Compress工具。它有一个(实验性)选项来嵌入可能使PDF更小的嵌入字体。它还包含许多允许更好压缩的开关,有时以牺牲质量为代价(例如,压缩位图的JPEG压缩)。
不幸的是,最新版本的Multivalent不再包含这些工具。谷歌的Multivalent20060102.jar
,该版本仍包含它们。要运行压缩:
java -classpath /path/to/Multivalent20060102.jar tool.pdf.Compress [options] <pdf file>