【发布时间】:2017-04-17 08:01:03
【问题描述】:
我在 JUnit 测试中执行 ghostscript 命令,测试结束时出现错误。但是,当我在终端中执行相同的命令时,命令完成且没有错误。
Command: /usr/local/bin/gs -sOutputFile="OUTPUT_PATH" -sDEVICE=pdfwrite -sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray -dCompatibilityLevel=1.4 -dNOPAUSE -dBATCH "INPUT_PATH"
我使用 java 运行时执行命令。
Process pr = Runtime.getRuntime().exec(command);
int exitValue = pr.waitFor();
if (exitValue != 0) {
....
}
执行错误。
GPL Ghostscript 9.21: **** Could not open the file "OUTPUT_PATH" .
【问题讨论】:
-
显然不同的是环境,而不是 GS。我会冒险猜测,当您从 Java 执行命令时,当前工作目录不可写(或至少对于当前用户而言不可写)。这意味着 Ghostscript 无法打开输出文件进行写入。尝试将完整路径和输出文件指定到您确定允许 Java 写入的目录。另一种可能性是该文件已经存在并被另一个应用程序打开。只要您小心,再次写入不同的(完全合格的)位置应该可以防止这种情况发生。
-
谢谢@KenS,我在 JUnit 测试中使用了文件的完整路径。例如,我使用 eclipse 上的目标文件夹来写入文件。
Paths.get("target", "GRAYSCALE_TEST.pdf"); -
嗯,在我看来它仍然是环境的问题。请注意,我对 Java 一无所知,所以您的 Eclipse 行告诉我我害怕什么。显然 Ghostscript 正在工作(因为它在 shell 中工作)。差异必须在它周围的环境中。错误很明显; Ghostscript 无法打开该文件。有两个可能的原因,首先是使用“wb”的 C 运行时 fopen() 失败,其次您正在输出到文件以外的其他内容(例如 %stdout%")并且失败。因此它会是 更好完整地引用实际路径,所以我可以告诉。
-
引用完整的反向频道记录可能也有帮助,看到它肯定很有用。
-
感谢所有@KenS,我在Java调用中发现了问题。我在文件路径中添加了双引号,以避免出现空格问题。我找到了阅读此问题答案的解决方案:stackoverflow.com/questions/13799686/…
标签: java ghostscript