PDF优化Acrobat与Ghostscript

PDF优化Acrobat与Ghostscript,pdf,ghostscript,postscript,Pdf,Ghostscript,Postscript,我有一个PDF文件,我想优化。我从外部源接收文件,因此我无法从头开始重新创建它 当我在Acrobat中打开文件并查询资源时,文件中的字体占据了90%以上的空间。如果我将该文件保存为postscript,然后将postscript文件保存为优化的PDF,则该文件会大大缩小(缩小80%以上),并且字体仍嵌入其中 我正在尝试用ghostscript重新创建这些结果。我用pswrite和pdfwrite尝试了不同的选项排列,但是当我从PDF到Postscript进行初始转换时,文本会转换为图像。当我转换

我有一个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给出了“对象标签格式错误”)

我不能提供原始文件,因为它们包含机密信息,但我将尝试回答任何需要回答的有关它们的问题

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

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

不幸的是,Multivalent的最新版本不再包含这些工具。谷歌搜索
Multivalent20060102.jar
,该版本仍然包括它们。要运行压缩,请执行以下操作:

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

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

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

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

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

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


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

如果Acrobat满足了您的需要,我不理解使用ghostscript重新创建它的愿望。当然Acrobat可以进行批处理转换。@luserdroog我需要在*nix环境中运行它。我只有适用于windows的Acrobat。我相信Acrobat适用于*nix,但我希望我不必为这份工作购买一些东西,因为这将是一个临时解决方案。如果其他一切都失败了,我可能最终不得不购买它。谢谢你的回复。谢谢你的回复。我将研究Multivalent。我下载了您引用的Multivalent jar文件。我可以使用-max选项运行它,输出文件明显更小,但我无法使用GS或Acrobat查看它。-max或-compact选项的文档说明我需要一个“compact感知”查看器,而Adobe reader则不需要。doc声明Multivalent查看器是“compact-aware”的,但是当我试图用它来查看文件时,会出现一系列错误。我还可以使用其他一些命令行选项。我会继续努力的。再次感谢您的回复。“紧凑PDF”格式是(我认为)多价作者对PDF标准的非正式修改。除非您不需要在标准PDF阅读器上查看PDF,否则我将避免使用此选项。感谢您回答我的问题。我感谢你的解释。我用的是9.04。我只是用:gs-sDEVICE=pdfwrite-sNOPAUSE-I/home/nauc01-dBATCH-dCompatibilityLevel=1.4-dPDFSETTINGS=/printer-CompressFonts=true-dSubsetFonts=true-sOutputFile=output.pdf input.pdf=6182k opt_printer.pdf=1720k再次运行了它。输出文件将不会显示在Adobe Reader中。它给出了“对象标签格式错误”错误,并且所有页面都是空白的。我可以在gsview中查看,但字体不正确。我运行了从internet下载的PDF文件。输出文件比输入文件大,但可以在Adobe Reader中查看该文件。我开始认为一些自定义的Type1字体已经损坏。我在Fontmap.GS文件中添加了指向.pfb文件的条目。这可能是个问题吗?再次感谢。不,这不应该是一个问题,除非原始PDF有未嵌入的字体。就像我说的,如果没有看到原始文件,文件可能会变得更大,我真的无法进一步评论。我当然可以在这里创建PDF文件,这些文件在Acrobat中运行良好,因此它必须是特定于您的文件的。您可以使用此选项(此处与始终可用的字体一起使用)防止Ghostscript嵌入未嵌入原始文件中的某些字体):
-c.setpd