PDF 优化 Acrobat 与 Ghostscript

Posted

技术标签:

【中文标题】PDF 优化 Acrobat 与 Ghostscript【英文标题】:PDF Optimization Acrobat vs. Ghostscript 【发布时间】:2011-11-17 23:02:44 【问题描述】:

我有一个想要优化的 PDF 文件。我从外部来源接收文件,因此我无法从头开始重新创建它。

当我在 Acrobat 中打开文件并查询资源时,它说文件中的字体占用了 90% 以上的空间。如果我将文件另存为 postscript,然后将 postscript 文件保存为优化的 PDF,则文件会明显变小(缩小 80% 以上),并且字体仍然是嵌入的。

我正在尝试使用 ghostscript 重新创建这些结果。我尝试了 pswrite 和 pdfwrite 的各种选项排列,但是当我进行从 PDF 到 Postscript 的初始转换时,文本被转换为图像。当我转换回 PDF 时,字体参考消失了,所以我最终得到一个包含“图像”文本而不是实际字体的 PDF 文件。

该文件包含我拥有的 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 给出“对象标签格式错误”)。

我无法提供原始文件,因为它们包含机密信息,但我会尝试回答任何需要回答的问题。

有什么想法吗?提前致谢。

【问题讨论】:

如果 Acrobat 能满足您的需求,我不明白用 ghostscript 重新创建它的愿望。 Acrobat 肯定可以进行批量转换。 @luserdroog 我需要在 *nix 环境中运行它。我只有 Windows 版的 Acrobat。我相信 Acrobat 可用于 *nix,但我希望我不必为这项工作购买东西,因为这将是一个临时解决方案。如果一切都失败了,我可能最终不得不购买它。感谢您的回复。 【参考方案1】:

不要使用 pswrite。正如您所发现的,这将呈现文本。而是使用保留字体和文本的 ps2write 设备。

您没有说明您使用的是哪个版本的 Ghostscript,但我建议您使用最近的版本。

一点; Ghostscript 并没有像 Acrobat 那样“优化”PDF,而是重新创建它。原始 PDF 被完全解释为产生一系列标记页面的操作,pdfwrite(和 ps2write)然后创建一个新文件,其中只有这些操作。

如果您选择子集字体,则只会包含所需的字形。如果原始 PDF 包含无关信息(例如,Adobe Illustrator 通常会嵌入 .ai 文件的完整副本),那么这些信息将被丢弃。这可能会导致文件变小,也可能不会。

请注意,pdfwrite 目前不支持压缩的外部参照和其他一些后续功能,因此某些文件可能会变得更大。

我个人不会通过 ps2write,因为这只是增加了另一层信息处理和丢弃。我只会使用 pdfwrite 创建一个新的 PDF 文件。如果您发现这不起作用的文件(使用当前代码),那么您应该在http://bugs.ghostscript.com 提出错误报告,以便有人可以解决问题。

【讨论】:

感谢您回答我的问题。我很欣赏这个解释。我正在使用 9.04。我刚刚再次运行它: gs -sDEVICE=pdfwrite -sNOPAUSE -I/home/nauc01 -dBATCH -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer -CompressFonts=true -dSubsetFonts=true -sOutputFile=output.pdf input.pdf 输入。 pdf = 6182k opt_printer.pdf = 1720k 输出文件不会显示在 Adob​​e Reader 中。它给出“对象标签格式错误”错误,并且所有页面都是空白的。我可以在 gsview 中查看,但字体不正确。 我运行了一个从 Internet 下载的 PDF 文件。输出文件比输入文件大,但可以在 Adob​​e Reader 中查看该文件。我开始认为某些自定义 Type1 字体已损坏。我在 Fontmap.GS 文件中添加了指向 .pfb 文件的条目。这可能是一个问题吗?再次感谢。 不,这应该不是问题,除非原始 PDF 包含未嵌入的字体。就像我说的那样,文件可能会变大,而没有看到原件,我真的无法进一步评论。我当然可以在这里创建在 Acrobat 中正常工作的 PDF 文件,所以它必须是特定于您的文件的内容。 您可以使用此选项阻止 Ghostscript 嵌入原始文件中未嵌入的某些字体(此处,与始终可用的字体一起使用):-c ".setpdfwrite <</NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats /Arial]>> setdistillerparams" 【参考方案2】:

您可能想试试Multivalent Compress 工具。它有一个(实验性)选项来对嵌入字体进行子集化,这可能会使您的 PDF 更小。它还包含许多允许更好压缩的开关,有时会以质量为代价(例如,位图的 JPEG 压缩)。

很遗憾,最新版本的 Multivalent 不再包含这些工具。 Google for Multivalent20060102.jar,该版本仍然包含它们。运行压缩:

java -classpath /path/to/Multivalent20060102.jar tool.pdf.Compress [options] <pdf file>

【讨论】:

感谢您的回复。我会研究 Multivalent。 我下载了你引用的 Multivalent jar 文件。我可以使用 -max 选项运行它,并且输出文件要小得多,但我无法使用 GS 或 Acrobat 查看它。 -max 或 -compact 选项的文档说我需要一个“紧凑型”查看器,而 Adob​​e 阅读器不需要。该文档指出 Multivalent 查看器具有“紧凑意识”,但是在尝试使用它查看文件时出现一堆错误。我可以使用其他一些命令行选项。我会继续努力的。再次感谢您的回复。 “compact PDF”格式是(我认为)Multivalent 作者对 PDF 标准的非官方修改。除非您不需要在标准 PDF 阅读器上查看 PDF,否则我会避免使用此选项。

以上是关于PDF 优化 Acrobat 与 Ghostscript的主要内容,如果未能解决你的问题,请参考以下文章

Acrobat 转换pdf到png的另一种方法

LaTeX-WinEdt 编辑器和 PDF 文件的 Acrobat 11 程序关联

adobe acrobat 8 professional (附注册机)

如何利用adobe acrobat pro 制作PDF文件

如何利用adobe acrobat 9 pro 制作PDF文件

修改PDF中文字好用的软件,PDF编辑软件,adobe acrobat DC安装教程,adobe acrobat DC和 adobe acrobat pro的区别,