[英]Starting external process from within java application - memory consideration
[英]Starting a process from a Java application
我或多或少知道如何執行此操作,但是由於經驗不足,我覺得我對命令的復雜性感到不知所措。
我正在嘗試將一些原始html wkhtmltopdf
。 我可以從命令行執行以下操作:
echo "<p>Hello</p>" | wkhtmltopdf - ~/somePdf.pdf
效果很好,但是如何從Java應用程序執行此操作? 這是我嘗試過的幾件事:
String[] cmd = { "echo", html.body(), "|", "wkhtmltopdf", "-", "/home/sam/yourPdf.pdf" };
Runtime.getRuntime().exec(cmd);
要么
Runtime.getRuntime().exec("echo " + html.body() + " | wkhtmltopdf - /home/sam/yourPdf.pdf");
這些都不在我的主文件夾中生成文件。
我已經讀過wkhtmltopdf
將輸出到STDERR,但是我不確定如何從Eclipse查看它。 有人告訴我它應該在“控制台”視圖中可用,但在那里什么都看不到。
任何幫助表示贊賞,謝謝!
編輯
接受的答案將適用於wkhtmltopdf
,但適用於使用Play的其他任何人! 找到這篇文章的框架, 有一個Play! 基於scala模板生成PDF的模塊 。 它確實很好用,但不要忘記在樣式表中設置media="print"
:)
您不能直接執行此操作,因為您正在運行兩個命令並創建了一個管道。 為此,既不使用Runtime.exec()
也不使用ProcessBuilder.command()
方法。 從Java上實現類似目的的最簡單方法是將所有內容放入Shell腳本中,並使用Runtime.exec()
調用該腳本。
編輯:您還可以跳過外殼程序腳本並調用
Runtime.getRuntime().exec( new String[] { "bash", "-c", "\"echo \"<p>Hello</p>\ | wkhtmltopdf - ~/somePdf.pdf\""} );
這樣可以省去編寫Shell腳本的麻煩,但是您可能需要對引號進行一些改動才能使其正確。
您可以嘗試執行以下操作,將錯誤流輸出到控制台:
try{
Runtime runTime= Runtime.getRuntime();
Process process= runTime.exec("echo " + html.body() + " | wkhtmltopdf - /home/sam/yourPdf.pdf");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String line = null;
while ( (line = reader.readLine()) != null){
System.err.println(line);
}
}catch(Exception exe){
exe.printStackTrace();
}
請注意,這特定於獲取打印到錯誤流中的內容。 我希望這可以幫助您入門
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.