wkhtmltopdf 带整页背景

问题描述 投票:0回答:9

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

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

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

wkhtmltopdf
9个回答
54
投票

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 从 stdin 到 stdout

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

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

什么没有起作用:

  • 使用
    --dpi
  • 使用
    --page-width and --page-height
  • 使用
    --zoom

14
投票

我们刚刚通过使用

--disable-smart-shrinking
选项解决了同样的问题。


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

希望这对某人有帮助...


8
投票

我使用的是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

8
投票

http://code.google.com/p/wkhtmltopdf/issues/detail?id=359 我发现更多的人“遭受”这个错误。

--dpi 300
解决方法对我不起作用,我必须将
--zoom 1.045
设置为放大一点,这使得额外的右侧和底部边框消失......


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


3
投票

您遇到的是一个错误。

转换文件时您需要设置

--dpi
选项。在您的情况下,您可能需要
--dpi 300
,但可以设置得更低。


0
投票

通过提高DPI解决了这个问题

我正在纵向模式下使用 A4 尺寸。右侧有空白。

我注意到随着 dpi 的增加,空白变得越来越薄。 在 300 dpi 下,在 chrome pdf 视图中(最大)缩放至 500% 时,空白区域不可见

在 Adobe reader 中它仍然可见。在 600 DPI 下它变得更好,在 1200 DPI 下即使在 6500% 缩放下它也变得不可见。

据我观察,这没有任何缺点,所有 dpi 都会生成相同的文件大小并以相同的速度运行(在 1 页上测试)。

实际上我的设置如下:

echo "<html style='padding=0;margin=0'><body style='background-color:black;padding=0;margin=0'></html>" | wkhtmltopdf -T 0 -B 0 -L 0 -R 0 --disable-smart-shrinking --orientation portrait --page-size A4 --dpi 1200 - happy.pdf

0
投票

如果使用未缩放的 PNG 图像(因此将是像素完美的),则默认比率,对于 A4 需要为 120ppi,因此 @ 210mm = 993 像素宽 x 1404 像素高,如果源是 72 或 300 dpi,则没有区别默认位置,993 算作 210 毫米

没有高度,没有宽度,没有拉伸,也没有收缩,只是默认放置图像作为背景未缩放。

wkhtmltopdf --enable-local-file-access -T "0mm" -L "0mm" -R "0mm" -B "0mm" test.html test.pdf

这是这样一张图像,缩小为 A 4 pdf 页 2 不同密度相同像素数

enter image description here

enter image description here

如果使用缩放,则可以使用不同的密度值,但这就是默认情况下所需的全部内容,因为 PDF 适用于整体像素值而不是 DPI。请注意,通过插入 PDF,PNG 实际上比源 JPG 更小,后者超过 372 KB。

© www.soinside.com 2019 - 2024. All rights reserved.