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

这些都不会在我的主文件夹中生成文件。

我已经读过wkhtmltopdf它将输出到 STDERR,但我不确定如何从 Eclipse 中查看它。有人告诉我它应该在我的控制台视图中可用,但我在那里看不到任何东西。

任何帮助表示赞赏,谢谢!

编辑

接受的答案适用于wkhtmltopdf,但适用于使用 Play 的任何人!框架谁找到这个帖子,有一个Play!基于 Scala 模板生成 PDF 的模块。它工作得很好,但不要忘记media="print"在你的样式表中设置:)

4

2 回答 2

3

您不能直接执行此操作,因为您正在运行两个命令并创建了一个管道。Runtime.exec()和方法都不ProcessBuilder.command()是为此而设计的。仍然从 Java 中实现类似于此的最简单方法是将所有这些东西放入一个 shell 脚本并使用Runtime.exec().

编辑:您也可以跳过 shell 脚本并调用

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

这样可以节省您编写 shell 脚本的时间,但您可能需要稍微调整一下引号才能使其正确。

于 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 回答