【问题标题】:Ghost4j produces no output fileGhost4j 不产生输出文件
【发布时间】:2017-06-03 08:26:51
【问题描述】:

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

gs -sDEVICE=pdfwrite -dCompatibilityLevel=4 -dNOPAUSE -dBATCH -r150 -sOutputFile=output.pdf 输入.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();

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

希望有人可以帮忙。

【问题讨论】:

    标签: java pdf ghostscript ghost4j


    【解决方案1】:

    感谢@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] 必须为 null 似乎很重要。

    感谢@KenS。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 谢谢@KenS。我现在稍微改了一下。但我仍然没有得到输出。甚至没有空字节文件。你有什么建议,我可以如何减小文件大小?
      • 如果您根本没有得到任何输出文件,那么 Ghostscript 没有正确启动。您仍然应该查看反向通道输出以查看它是否说明了一些有用的信息,并检查错误返回代码。不,我不知道如何用 Ghost4J 做这两个,因为我不是 JavaScript 开发人员。我的“猜测”是 Ghosts4J 无法找到 Ghostscript DLL,这可能是因为您安装了错误的位深度 Ghostscript(例如 64 对 32)。你有没有设法让 Ghost4J 正常工作?
      • 如果我删除 gsArgs[3] = "-dNOPAUSE "; 一个名为 ghostscript 的窗口会打开并显示输入文件。
      • 所以您还没有设置设备,Ghostscript 使用的是默认设备,即显示设备。哦,我明白了,您已将设备设置为 args[0]。您需要将 args[0] 设置为虚拟值,并在 args[1] 处开始实际值。这是因为这些参数必须与 C 程序中提供给 main() 的参数相同,而 C 程序中的初始参数 (arg[0]) 是正在启动的应用程序的名称。
      猜你喜欢
      • 1970-01-01
      • 2019-01-03
      • 2011-11-10
      • 1970-01-01
      • 2012-01-07
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多