【问题标题】:Cant get the wkhtmltopdf attributes to work with in java code无法在 java 代码中使用 wkhtmltopdf 属性
【发布时间】:2013-03-12 15:34:38
【问题描述】:

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

谁能告诉我我做错了什么?

【问题讨论】:

  • 当我遇到类似问题时,使用disable-smart-shrinking 对我有用。您可能必须将所有margin-* 设置为0
  • 我得到 Unknown long argument --zoom 1.5 --margin-right 0 --margin-top 0 --margin-bottom 0 --margin-left 0。为什么它在命令行中起作用不在我的代码中?
  • 禁用智能收缩不起作用,缩放起作用。但不在我的代码中。我猜这与参数如何传递给 processbuilder 有关。有什么想法吗?

标签: java process wkhtmltopdf processbuilder


【解决方案1】:

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

【讨论】:

  • 感谢分享技巧,顺便说一句,将参数作为数组或作为接受答案中的长字符串传递更好?
  • 我的意见是写出一个字符串是草率的,因为它是不可变的和容易出错(而且难以辨认)。
【解决方案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()) ;

【讨论】:

    【解决方案3】:

    我对参数--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>

    【讨论】:

      猜你喜欢
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多