2011-11-17 48 views
4

我有一个PDF文件,我想优化。我从外部接收文件,所以我没有办法从一开始就重新创建它。PDF优化Acrobat与Ghostscript

当我在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" 

生成的文件具有正确嵌入字体。

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:如果

我也用ghostscript的去从PDF到这样的PDF尝试给出“对象标签严重格式化”)。

我不能提供原始文件,因为它们包含机密信息,但我会尽量回答需要有关他们回答任何问题。

任何想法?提前致谢。

+0

如果Acrobat做你需要的东西,我不明白用ghostscript重新创建它的愿望。 Acrobat可以做批量转换。 –

+0

@luserdroog我需要在* nix环境中运行它。我只有Windows的Acrobat。我相信Acrobat可以用于* nix,但是我希望我不必为这项工作购买一些东西,因为这将是一个临时解决方案。如果一切都失败了,我可能最终不得不购买它。谢谢回复。 – user791194

回答

0

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

不幸的是,最近的多价的版本并不再包含的工具。 Google为Multivalent20060102.jar,该版本仍包含它们。运行压缩:

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

感谢您的回复。我会研究多价。 – user791194

+0

我下载了您引用的多值jar文件。我可以用-max选项运行它,输出文件要小得多,但我无法用GS或Acrobat查看它。 -max或-compact选项的文档说,我需要一个“紧凑感知”查看器,而Adobe读取器不是。该文档指出,多价查看器是“紧凑感知”,但当我试图用它查看文件时,我收到了一堆错误。 还有一些其他的命令行选项可供我使用。我会继续尝试。 再次感谢您的回复。 – user791194

+0

“紧凑PDF”格式是(我认为)多价值作者对PDF标准的非官方修改。除非您不需要PDF在标准PDF阅读器上可见,否则我会避免使用此选项。 –

2

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

你不说你正在使用的Ghostscript的版本,但我会建议你使用最新一个。

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

如果选择子集的字体,则仅需要的字型将包括在内。如果原始PDF包含无关信息(例如Adobe Illustrator,通常会嵌入.ai文件的完整副本),则会丢弃该信息。这可能导致一个较小的文件,或者它可能不会。

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

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

+0

感谢您回复我的问题。我赞赏解释。 我正在使用9.04。 我只是再次运行它: gs -sDEVICE = pdfwrite -sNOPAUSE -I/home/nauc01 -dBATCH -dCompatibilityLevel = 1.4 -dPDFSETTINGS =/printer -ompressFonts = true -dSubsetFonts = true -sOutputFile = output.pdf输入。 pdf input.pdf = 6182k opt_printer.pdf = 1720k 输出文件不会在Adobe Reader中显示。它给出了“对象标签格式错误”的错误,并且所有页面都是空白的。我可以在gsview中查看它,但字体不正确。 – user791194

+0

我运行了一个我从互联网上下载的PDF文件。输出文件比输入文件大,但文件可以在Adobe Reader中查看。我开始认为一些自定义的Type1字体已损坏。 我将条目添加到指向.pfb文件的Fontmap.GS文件中。这可能是一个问题吗? 再次感谢。 – user791194

+0

不,它不应该是一个问题,*除非*原始PDF文件中没有嵌入字体。就像我说的那样,文件可能会变得更大,而没有看到原始文件,我不能进一步评论。我当然可以在这里创建PDF格式的文件,在Acrobat中工作正常,所以它必须是特定于您的文件的东西。 – KenS