0

我需要针对文件大小优化一些大型 PDF 文档,所以我尝试使用ghostscript, 调用如下:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH -sOutputFile=output-my-doc.pdf input-my-doc.pdf

我可以看到它在某些页面上运行,但是在特定页面上它崩溃了。

我更新到gs9.02 版,我也有同样的经历。将文档拆分成单独的页面后,在每个页面上运行上面的命令,我可以确认哪些页面是有问题的;事实上,即使我只是调用,错误也会发生gs input-my-doc-pageX.pdf- 这会启动一个查看器,我可以看到文本排版,直到它出现在图像中,当它崩溃时。

所以我可以确认在我的情况下,gs特定图像上的崩溃 - 最后我还可以提供一个最小的工作(或者更确切地说,非工作)示例,它演示了问题(如下)。特别是,问题似乎是 8 位 RGB 图像,以某种方式指定。

 

现在,我不知道这是否是一个错误,但因为我需要完成这件事 - 我想也许我可以ghostscript通过应用程序运行 PDF 来“作弊”,这几乎不会影响 PDF - 除了那个它会将图像重新编码为单一格式(例如 PNG);这样gs优化器也可以在不崩溃的情况下运行这些文件。

在 Linux 中使用命令行仅重新编码给定 PDF 的图像有哪些选项?

非常感谢您的任何答案,
干杯!

 

PS:测试用例基本上是帖子中的源代码PDF示例Imagemagick:为PDF flate嵌入生成原始图像数据?.

该 PDF ( hello2.pdf) 可以很好地打开,例如evince

hello2.pdf-evince-OK

...但是由于它的外部参照表已损坏,因此我对其进行了修复:

$ pdftk hello2.pdf output hello2O.pdf
$ qpdf --check hello2O.pdf 
checking hello2O.pdf
PDF Version: 1.4
File is not encrypted
File is not linearized
No errors found

修复后的文件hello2O.pdf也可以正常打开evince- 但是,当我尝试对其运行上述gs优化命令时,它会失败:

$ gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH -sOutputFile=optihello2O.pdf hello2O.pdf
GPL Ghostscript 9.02 (2011-03-30)
Copyright (C) 2010 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
Loading NimbusSanL-Regu font from /usr/share/ghostscript/9.02/Resource/Font/NimbusSanL-Regu... 2756020 1410650 1869284 568021 3 done.
Error: /undefined in --run--
Operand stack:
   --dict:6/15(L)--   false   --dict:11/19(L)--   --dict:4/4(L)--   --nostringval--   FlateDecode   --dict:4/4(L)--   0
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1910   1   3   %oparray_pop   1909   1   3   %oparray_pop   1893   1   3   %oparray_pop   --nostringval--   --nostringval--   2   1   1   --nostringval--   %for_pos_int_continue   --nostringval--   --nostringval--   --nostringval--   --nostringval--   %array_continue   --nostringval--   false   1   %stopped_push   --nostringval--   %loop_continue   --nostringval--   576   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--   %array_continue   --nostringval--   --nostringval--
Dictionary stack:
   --dict:1160/1684(ro)(G)--   --dict:1/20(G)--   --dict:82/200(L)--   --dict:82/200(L)--   --dict:108/127(ro)(G)--   --dict:295/300(ro)(G)--   --dict:23/30(L)--   --dict:6/8(L)--   --dict:25/40(L)--   --dict:7/17(L)--
Current allocation mode is local
GPL Ghostscript 9.02: Unrecoverable error, exit code 1
4

1 回答 1

2

首先,如果您发现 Ghostscript 错误,请通过http://bugs.ghostscript.com向我们报告

其次,我建议您更新当前发布的 9.05 版本,该版本可能已修复此错误。

于 2012-06-08T15:22:54.660 回答