日期:2014-05-19  浏览次数:20692 次

调用系统命令出错
wkhtmltopdf 执行程序已经加入到path当中。
直接在cmd中运行wkhtmltopdf 是可以运行的。  但是java调用的时候,就报错。


public class WkHtmlToPdf {   
public void buildPdf(String htmlPath , String pdfDest){
String comm = "wkhtmltopdf " + htmlPath + " " + pdfDest ;
try {
Runtime.getRuntime().exec(comm);
} catch (IOException e) {
e.printStackTrace();
}
}

public static void main(String[] args) throws InterruptedException {
new WkHtmlToPdf().buildPdf("E:/etdsreport.html", "E:/aaa.pdf");
System.out.println("Done...");
}

}




java.io.IOException: Cannot run program "wkhtmltopdf": CreateProcess error=2, ?????μ???
at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
at java.lang.Runtime.exec(Runtime.java:593)
at java.lang.Runtime.exec(Runtime.java:431)
at java.lang.Runtime.exec(Runtime.java:328)
at com.WkHtmlToPdf.buildPdf(WkHtmlToPdf.java:10)
at com.WkHtmlToPdf.main(WkHtmlToPdf.java:18)
Caused by: java.io.IOException: CreateProcess error=2, ?????μ???
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
at java.lang.ProcessImpl.start(ProcessImpl.java:30)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
... 5 more
Done...


------最佳解决方案--------------------
同样的方式,我运行java命令都没有问题(java也是通过path指定的),如下:
Process process = Runtime.getRuntime().exec("cmd.exe /C java");
------其他解决方案--------------------
String comm = "wkhtmltopdf " + htmlPath + " " + pdfDest  ;
改为
String comm = "cmd.exe /C wkhtmltopdf " + htmlPath + " " + pdfDest;
------其他解决方案--------------------
引用:
String comm = "wkhtmltopdf " + htmlPath + " " + pdfDest  ;
改为
String comm = "cmd.exe /C wkhtmltopdf " + htmlPath + " " + pdfDest;


ErrorStream输出的是
'wkhtmltopdf' 不是内部或外部命令,也不是可运行的程序
或批处理文件。


但是 wkhtmltopdf 直接在cmd窗口运行,是可以的。