这个问题与 Ghostscript 无关。您使用 ProcessBuilder 运行的每个程序都会遇到问题,它将输出发送到标准输出。由于 Windows 仅缓冲有限数量的文本,当您不读取 java 程序中的输出时,被调用的进程将挂起。因此,当您转换为 pdf 只会产生少量状态消息时,您可以成功运行 gswin32c。但是,当您转换具有许多页面的文件时,该过程将挂起。解决方案是在 Java 程序中读取被调用进程的输出。
ProcessBuilder processBuilder = new ProcessBuilder(
"C:\\Program Files (x86)\\gs\\gs9.10\\bin\\gswin32c.exe", "-sDEVICE=\"pdfwrite\"",
"-dNOPAUSE", "-dBATCH", "-dSAFER", "-dQUIET", "-sOUTPUTFILE=\"" + fileName + ".pdf\"", "\""
+ fileName + ".ps\"");
processBuilder.redirectErrorStream(true); //Redirect Error Stream to Standard Inputstream so that we have to read only Standard in
Process process = processBuilder.start();
InputStream is = process.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = rd.readLine()) != null) {
System.out.println(line);
}
rd.close();
process.waitFor();