#java #process #runtime.exec
#java #процесс #runtime.exec
Вопрос:
Я пытаюсь прочитать pdf, созданный phantomjs, из html-файла в файловой системе. Я сделал следующее.
process = Runtime.getRuntime().exec(phantomLocation scriptLocation inputFile " " destinationFileString);
process.waitFor();
Я указываю phantomLocation, расположение js-скрипта, inputHTML и destinationFileString (pdf, который будет сгенерирован и отправлен).
Я пишу следующий код сервлета для чтения сгенерированного PDF-файла и отправки в качестве ответа.
InvokePhantom phantom = new InvokePhantom(inputHTMLFileName, destinationFile);
process.create();//call the above piece of code
//Set the response headers
response.setContentType("application/pdf");
String headerKey = "Content-Disposition";
String headerValue = String.format("attachment; filename="%s"", attchmentName);
response.setHeader(headerKey, headerValue);
//For debugging
File file = new File(destinationFile);
System.out.println("destinationFile exists = " file.exists());
//Write to outputStream
fileInputStream = new FileInputStream(destinationFile);
outputStream = response.getOutputStream();
byte[] buffer = new byte[1024];
int bytesRead = -1;
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.flush();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
}
if (outputStream != null) {
outputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
Но PDF-файл, генерируемый phantomjs
, является неполным. При запуске из командной строки phantomjs
создается pdf должным образом (из того же html). Но при вызове из кода Java он не работает должным образом. Как решить проблему?
Комментарии:
1. Не могли бы вы, пожалуйста, опубликовать полную команду, которую необходимо выполнить
2. @Sanjeev скрипт phantomjs?
3. Команда, созданная
phantomLocation scriptLocation inputFile " " destinationFileString
и как вы выполняете в командной строке4. @Sanjeev D:Docsphantomjs-1.9.7-windowsphantomjs.exe D:Docsscreenshot.js C:UsersAppDataLocalTemp1404368319410330387378284269747.html C:UsersAppDataLocalTemp1404368319410.pdf При запуске из командной строки pdf выглядит нормально, но не из кода Java.
5. попробуйте прочитать поток ошибок процесса и поток вывода на предмет возможных ошибок / выходов
Ответ №1:
Похоже, проблема в том, что вы пытаетесь выполнить команду с аргументами в виде одной строки. Вам следует использовать Runtime.exec(String[] comand) что-то вроде этого:
String[] cmdArray = new String[]{phantomLocation,scriptLocation,inputFile,destinationFileString};
Process process = Runtime.getRuntime().exec(cmdArray);
process.waitFor();
Надеюсь, это поможет.
Комментарии:
1. Я получаю значение exit -1 с изменениями
2. Попробуйте прочитать поток ошибок / поток вывода процесса, чтобы получить больше информации