无法在java代码中使用wkhtmltopdf属性

时间:2013-03-12 15:34:39

标签: java process wkhtmltopdf processbuilder

我正在使用wkhtmltopdf转换器将html文件转换为pdf。它工作正常,但输出不适合pdf中的页面。使用--zoom 2修复了命令行中的问题,但在我的代码中使用相同的东西并没有做任何事情。下面是我的代码。

String wkhtmltopdf = "C:/Program Files (x86)/wkhtmltopdf/wkhtmltopdf.exe ";
String switches = " --zoom 2 ";

ProcessBuilder pb = new ProcessBuilder(wkhtmltopdf, switches, f.getAbsolutePath(), pdfFileName);

Process process = pb.start();

在命令行中,这很好用。

C:\Program Files (x86)\wkhtmltopdf>wkhtmltopdf.exe --zoom 2 C:\Users\D
esktop\eclipse-jee-indigo-SR2-win32-x86_64\eclipse\temphtml1.htm C:\Users\Desktop\temp\test.pdf
Loading pages (1/6)
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done

有人能让我知道我做错了吗?

3 个答案:

答案 0 :(得分:3)

ProcessBuilder on OSX中所述,您需要将每个参数组作为单独的字符串传递。因此,不要传递“--zoom 2”,而是传递[“--zoom”,“2”]。我自己就是这么想的。

答案 1 :(得分:2)

使用Runtime代替processBuilder修复它。我仍然不知道为什么“--zoom 2”在processBuilder中不作为参数排除。但是,下面是工作代码。

Runtime rt = Runtime.getRuntime();  进程p = rt.exec(“C:/ Program Files(x86)/wkhtmltopdf/wkhtmltopdf.exe --zoom 2”+ temphtmlfile.getAbsolutePath()+“”+ filePdf.getAbsolutePath());

答案 2 :(得分:0)

我对参数player.getCurrentTime()有同样的问题,我发现使用--cookie <name> <value>我必须传递3个独立的字符串值ProcessBuilder

您必须替换

--cookie, <name>, <value>

通过

ProcessBuilder pb = new ProcessBuilder(wkhtmltopdf, switches, f.getAbsolutePath(), pdfFileName);

请注意,ProcessBuilder有一个更方便的构造函数,可以使用ProcessBuilder pb = new ProcessBuilder(wkhtmltopdf, "--zoom", "2", f.getAbsolutePath(), pdfFileName);