从 java 调用的 wkhtmltopdf 被绞死

wkhtmltopdf called from java getting hanged

我们正在使用以下代码使用 wkhtmltopdf 生成 PDF

    public class SystemUtils{   
    public String executeCommand(String... command) {
        Process process = null;
        try {
            // Using redirectErrorStream as true. Otherwise we have to read both process.getInputStream() and
            // process.getErrorStream() in order to not exhaust the stream buffer.
            process = new ProcessBuilder(command).redirectErrorStream(true).start();
            process.waitFor();

            StringBuilder outputBuilder = new StringBuilder();
            try(BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
                String line;
                while ((line = stdError.readLine()) != null) {
                    outputBuilder.append(line).append(StringConstants.CARRIAGE_RETURN);
                }
            }
            return outputBuilder.toString();
        } catch (IOException | InterruptedException e) {
            String exceptionMsg = "Error while executing command '"+command+"' : ";
            LOGGER.error(exceptionMsg, e);
            throw new AppException(exceptionMsg, e);
        } finally {
            if(process != null){
                process.destroy();
            }
        }
    }

       public static void main(String[] args){
        SystemUtils systemUtils = new SystemUtils();
        String[] array = {"wkhtmltopdf", "/home/pgullapalli/Desktop/testsimilar1.html", "/home/pgullapalli/Desktop/test.pdf"};
        systemUtils.executeCommand(array);
    }
}

这对于较小的文件来说绝对没问题。但是当我们尝试处理一个更大的文件时,它会无限期地等待而没有任何响应。我不确定出了什么问题?有人可以建议吗?

我在 return 语句之前移动了 process.waitFor() 并且它开始工作了。这可能发生在输出缓冲区已满且我们未从中读取时。在流读取后移动 process.waitFor 后,一切正常。