1

我正在尝试生成 pdf 输出。我已经用 pdfbox 完成了 pdf 文件,但现在大约有 15 MB。这对于计划的目的来说太大了。所以我想减小文件大小。我先用 linux 终端和 ghostscript 试了一下:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=4 -dNOPAUSE -dBATCH -r150 -sOutputFile=output.pdf input.pdf

这工作正常。但由于它是一个 java 程序并且应该在没有 shell 的情况下工作,我测试了 ghost4j:

Ghostscript gs = Ghostscript.getInstance();
String[] gsArgs = new String[7];
gsArgs[0] = "-sDEVICE=pdfwrite ";
gsArgs[1] = "-dCompatibilityLevel=1.4 ";
gsArgs[2] = "-dPDFSETTINGS=/screen ";
gsArgs[3] = "-dNOPAUSE ";
gsArgs[4] = "-dBATCH ";
gsArgs[5] = "-sOutputFile=qw3.pdf ";
gsArgs[6] = "input.pdf";
gs.initialize(gsArgs);
gs.exit();

但我没有得到任何输出文件。其中一些论点是非法的吗?

希望,有人可以帮忙。

4

2 回答 2

3

感谢@KenS,我得到了答案:

Ghostscript gs = Ghostscript.getInstance();
String[] gsArgs = new String[8];
gsArgs[1] = "-sDEVICE=pdfwrite";
gsArgs[2] = "-dCompatibilityLevel=1.4";
gsArgs[3] = "-dNOPAUSE";
gsArgs[4] = "-dBATCH";
gsArgs[5] = "-r150";
gsArgs[6] = "-sOutputFile=qw3.pdf";
gsArgs[7] = "input.pdf";
gs.initialize(gsArgs);
gs.exit();

似乎很重要,gsArgs[0] 必须为空。

感谢@KenS。

于 2017-01-27T16:04:52.880 回答
0

至少有几个论点是不正确的。CompatibilityLevel 应该是一个介于 1.0 和 1.7 之间的数字,4 太大了。使用 pdfwrite 设置分辨率不是一个聪明的主意,它通常没有效果。也有例外,例如,如果您将透明的 PDF 文件转换为低到不支持透明度的 PDF 版本。

你至少应该得到一个 0 字节的 PDF 文件,如果你不这样做,那就大错特错了。

如果你确实得到一个 0 字节的文件,那么至少操作开始了。您应该捕获反向通道输出并读取它是否有任何错误迹象。

于 2017-01-19T08:33:08.867 回答