0

私はこれを行う方法を多かれ少なかれ知っていますが、経験不足のためにこのコマンドの複雑さに悩まされていると思います.

生の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");

これらのいずれも、ホーム フォルダーにファイルを生成しません。

STDERRに出力されることを読みましたwkhtmltopdfが、Eclipseからそれを表示する方法がわかりません。コンソール ビューで使用できるはずだと言われましたが、何も表示されません。

どんな助けでも大歓迎です、ありがとう!

編集

受け入れられた答えはwkhtmltopdf、しかし Play! この投稿を見つけたフレームワークには、Play があります。scala テンプレートに基づいて PDF を生成するモジュール。それは非常にうまく機能しますが、スタイルシートに設定することを忘れないmedia="print"でください:)

4

2 に答える 2

3

2 つのコマンドを実行しており、パイプを作成しているため、これを直接行うことはできません。Runtime.exec()メソッドもメソッドもこのために作成されていませんProcessBuilder.command()。Java からこれに似たものを実現する最も簡単な方法は、それらすべてをシェル スクリプトに入れ、そのスクリプトを .xml で呼び出すことRuntime.exec()です。

編集:シェルスクリプトをスキップして呼び出すこともできます

Runtime.getRuntime().exec( new String[] { "bash", "-c", "\"echo \"<p>Hello</p>\ | wkhtmltopdf - ~/somePdf.pdf\""} );

これにより、シェル スクリプトを作成する手間が省けますが、それを正しく行うには、引用符を少しいじる必要がある場合があります。

于 2012-06-12T16:23:57.357 に答える
1

エラーストリームをコンソールに出力するために、次のようなことを試すことができます:

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();
}

これは、エラー ストリームに出力される内容を取得する場合に固有のものであることに注意してください。これがあなたが始めるのに役立つことを願っています

于 2012-06-12T16:32:58.650 に答える