37

我正在使用 wkhtmltopdf 生成一个 PDF 文件,该文件将发送到打印机,并且在使内容填满生成的 PDF 中的整个页面时遇到了一些麻烦。

在 CSS 中,我将宽度和高度设置为 2480 X 3508 像素(a4 300 dpi),在创建 PDF 时,我使用 0 作为边距,但最终在右侧和底部仍然有一个小的白色边框。还尝试使用 mm 和百分比,但结果相同。

我需要有人提供一个示例,说明如何设置 HTML 样式以及在命令行中使用哪些选项,以便生成的 PDF 页面填满整个背景。一种方法可能是包括出血(无论如何这可能是必要的),但欢迎任何提示。目前我正在创建一个大的 HTML 页面(没有 CSS 分页符 - 可能有帮助?)但如果需要,可以单独生成每个页面,然后将它们全部提供给 wkhtmltopdf。

4

7 回答 7

49

wkhtmltopdf v 0.11.0 rc2

什么最终起作用:

wkhtmltopdf --margin-top 0 --margin-bottom 0 --margin-left 0 --margin-right 0 <url> <output>

缩短为

wkhtmltopdf -T 0 -B 0 -L 0 -R 0 <url> <output>

使用标准输入中的 html(注意破折号)

echo "<h1>Testing Some Html</h2>" | wkhtmltopdf -T 0 -B 0 -L 0 -R 0 - <output>

使用 html 从标准输入到标准输出

echo "测试一些 Html" | wkhtmltopdf -T 0 -B 0 -L 0 -R 0 - test.pdf

echo "测试一些 Html" | wkhtmltopdf -T 0 -B 0 -L 0 -R 0 - - > test.pdf

什么不起作用

  • 使用--dpi
  • 使用--page-width and --page-height
  • 使用--zoom
于 2014-01-10T19:23:38.567 回答
11

--disable-smart-shrinking我们刚刚通过使用该选项解决了同样的问题。

于 2017-07-13T14:09:34.457 回答
10

我意识到这是陈旧而冷酷的,但以防万一有人发现这个并遇到相同/类似的问题,这是经过一些试验和错误后对我有用的解决方法。

我创建了一个简单的filler.html:

<!DOCTYPE html>
<html>
<head>
</head>
<body style="margin: 0; padding: 0;">
<div style="height: 30mm; background-color: #F7EBD4;">
&nbsp;
</div>
</body>
</html>

使用有效的 HTML(!DOCTYPE 很重要)并且只使用内联样式。将背景颜色与主文档的颜色匹配,并使用等于或大于边距的高度。

我使用以下参数运行版本 0.12.0:

wkhtmltopdf --print-media-type --orientation portrait --page-size A4
 --encoding UTF-8 --T 10mm --B 10mm --L 0mm --R 0mm
 --header-html filler.html --footer-html filler.html - - <file.html >file.pdf

希望这可以帮助某人...

于 2014-07-21T12:49:24.137 回答
7

http://code.google.com/p/wkhtmltopdf/issues/detail?id=359我发现更多的人“遭受”这个错误。解决方法对--dpi 300我不起作用,我不得不设置--zoom 1.045放大一点,这使得额外的右边框和下边框消失......

于 2012-10-02T01:38:47.347 回答
7

我正在使用版本 0.12.2.1 并设置:

body { padding: 0; margin 0; }
div.page-layout { height: 295.5mm; width: 209mm;}

为我工作。

当然需要通过以下方式添加0边距:

wkhtmltopdf -T 0 -B 0 -L 0 -R 0
于 2015-07-24T20:20:01.037 回答
6

使用 -B 0 -L 0 -R 0 -T 0 选项并使用设置 A4 大小的 div 的技巧对我来说效果很好。

你记得使用 body {margin:0; padding:0;} 在 CSS 的顶部?

我无法帮助你处理 CSS 分页符,因为我还没有尝试过错误的那些,但是,你可以在页面上运行脚本来做一些聪明的事情。这是一个 jQuery 示例,说明如何根据内容的长度将内容分成页面大小的块。如果您可以使其适应 wkhtmltopdf 的工作,请在此处发布!

http://www.script-tutorials.com/demos/79/index.html

于 2011-05-25T13:16:09.363 回答
2

您遇到的是一个错误。

您需要--dpi在转换文件时设置该选项。在你的情况下,你可能会想要--dpi 300,但可以设置得更低。

于 2011-10-06T22:09:06.173 回答