2

我正在使用 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

有人可以让我知道我做错了什么吗?

4

3 回答 3

4

OSX 上的 ProcessBuilder 中所述,您需要将每个参数组作为单独的字符串传递。所以不是传递“--zoom 2”,而是传递[“--zoom”,“2”]。

于 2013-06-27T18:31:15.407 回答
2

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

Runtime rt = Runtime.getRuntime();
Process p = rt.exec(
  "C:/Program Files (x86)/wkhtmltopdf/wkhtmltopdf.exe --zoom 2 " 
    + temphtmlfile.getAbsolutePath()
    + " " 
    + filePdf.getAbsolutePath()) ;
于 2013-03-13T20:27:39.337 回答
0

我对参数有同样的问题,--cookie <name> <value>我发现,使用ProcessBuilder我必须传递 3 个分隔的字符串值--cookie, <name>, <value>

你将不得不更换

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

经过

ProcessBuilder pb = new ProcessBuilder(wkhtmltopdf, "--zoom", "2", f.getAbsolutePath(), pdfFileName);

请注意,ProcessBuilder 有一个更方便的构造函数,它可以采用List<String>

于 2015-05-11T09:57:21.760 回答