从Java应用程序启动进程
我或多或少知道该如何做,但我认为由于缺乏经验,我被这个命令的复杂性所折磨 我正在尝试将一些原始html输入从Java应用程序启动进程,java,playframework,wkhtmltopdf,Java,Playframework,Wkhtmltopdf,我或多或少知道该如何做,但我认为由于缺乏经验,我被这个命令的复杂性所折磨 我正在尝试将一些原始html输入wkhtmltopdf。我可以通过以下命令行执行此操作: echo "<p>Hello</p>" | wkhtmltopdf - ~/somePdf.pdf 或 它们都不会在我的主文件夹中生成文件 我已经读到wkhtmltopdf将输出到STDERR,但我不确定如何从Eclipse中查看它。我被告知它应该在我的控制台视图中可用,但我在那里没有看到任何东西 感谢您的帮
wkhtmltopdf
。我可以通过以下命令行执行此操作:
echo "<p>Hello</p>" | wkhtmltopdf - ~/somePdf.pdf
或
它们都不会在我的主文件夹中生成文件
我已经读到wkhtmltopdf
将输出到STDERR,但我不确定如何从Eclipse中查看它。我被告知它应该在我的控制台视图中可用,但我在那里没有看到任何东西
感谢您的帮助,谢谢
编辑
接受的答案适用于
wkhtmltopdf
,但适用于使用该剧的任何其他人!找到这篇文章的框架,基于scala模板生成PDF。它工作得非常好,但是:)您不能直接执行此操作,因为您正在运行两个命令并创建一个管道。Runtime.exec()
和ProcessBuilder.command()
方法都不适用于此。要从Java中实现类似于此的功能,最简单的方法是将所有这些内容放入一个shell脚本中,并使用Runtime.exec()
调用该脚本
编辑:
您还可以跳过shell脚本并调用
Runtime.getRuntime().exec( new String[] { "bash", "-c", "\"echo \"<p>Hello</p>\ | wkhtmltopdf - ~/somePdf.pdf\""} );
Runtime.getRuntime().exec(新字符串[]{“bash”、“-c”、“\”echo\“你好\\\\\\\\\\\\ wkhtmltopdf-~/somePdf.pdf\”);
这样就省去了编写shell脚本的时间,但您可能需要稍微修改一下引号才能正确使用。您不能直接这样做,因为您正在运行两个命令并创建一个管道。
Runtime.exec()
和ProcessBuilder.command()
方法就是为了实现这一点而设计的。要想从Java中实现类似于此的功能,最简单的方法是将所有这些内容放入一个shell脚本中,并使用Runtime.exec()调用该脚本。
编辑:
您还可以跳过shell脚本并调用
Runtime.getRuntime().exec( new String[] { "bash", "-c", "\"echo \"<p>Hello</p>\ | wkhtmltopdf - ~/somePdf.pdf\""} );
Runtime.getRuntime().exec(新字符串[]{“bash”、“-c”、“\”echo\“你好\\\\\\\\\\\\ 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();
}
请注意,这是特定于获取打印到错误流中的内容。我希望这有助于您入门您可以尝试以下方法将错误流输出到控制台:
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();
}
请注意,这是特定于获取打印到错误流中的内容。我希望这有助于您入门这是一个很好的信息,但不幸的是对我没有太大帮助:)方法几乎立即结束并返回0。@Samo阅读其他页面,它准确地描述了您的情况。这是一个很好的信息,但不幸的是对我没有太大帮助:)方法
waitFor()
方法几乎立即结束并返回0。@Samo阅读其他页面,它准确地描述了您的情况。在数组元素之间放置逗号,并给最后一个数组元素加上一个结束引号,您将得到一个绿色的勾号。哇,语法检查:)我想知道我写这篇文章时这些内容是如何丢失的;-)在数组元素之间加逗号,给最后一个数组元素加一个结束引号,你会得到一个绿色的记号。哇,语法检查:)我想知道我写这篇文章时这些是怎么丢失的;-)