簡體   English   中英

從Java應用程序啟動進程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM