我使用html页面使用wkhtmltopdf生成了一个PDF文件。html页面使用1像素边框的表。如果我用Acrobat或Foxit打开PDF,他们会随机错过绘制垂直边框,但如果我放大,它们就会出现。所以我猜这是某种舍入误差,因为线条太细了?
如果我打印PDF,它看起来不错。
我刚刚意识到,只有在设置背景颜色时才会发生这种情况。
我怎么才能解决这个问题?
这是一个示例PDF格式。分隔字符"a“和"b”的边框将根据缩放因子消失。我生成了这样的文件:
echo "
<html><body>
<span style="border: 1px solid black; background-color:red;">a</span>
<span style="background-color:red">b</span>
</body></html>"
| wkhtmltopdf.exe - test.pdf发布于 2011-12-08 09:54:24
您的行没有丢失,只是太小,无法在屏幕上呈现。
这是因为PDF是根据页面大小呈现的,而不是根据页面上的功能大小呈现的。页面上的所有内容都是向上或向下缩放的,以使其适合于PDF页面,因此您的行正在缩小,从而消失:1/3= 0.333 =无一行。
要解决这个问题,您有以下选项:
--page-size A4--page-width 9in --page-height 6in精确地减少页面的宽度和高度在这种情况下,备选案文3可能更可取。这不是一个非常优雅的修复,但你没有太多的选择可玩。如果您是在低级别上编写PDF,那么就可以完成一些事情,但是由于您使用的是wkhtml2pdf,所以您只能使用它允许您设置的内容。
发布于 2012-07-06 09:27:07
我的桌子边框也有类似的问题。帮助我的是在我的css中使用pt而不是px。
请参见W3C:
但一般来说,你会使用一套不同的单位显示在屏幕上,而不是印刷在纸上。
发布于 2015-11-10 23:58:10
我假设您想要细行,否则就不会将宽度设置为1 1px。
在用wkhtmltopdf制作的PDF中显示细的发际线边框的关键是使用SVG背景,如下所示:
.hairline-border {
background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100%' height='100%'><rect x='0' y='0' width='100%' height='100%' stroke='black' fill='white' stroke-opacity='1' /></svg>");
}对于发际线分隔符(如<hr>),我使用:
.hairline {
height: 0.5mm;
width: 100%;
background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100%' height='100%'><line x1='0mm' y1='0mm' x2='300mm' y2='0mm' style='stroke:black; stroke-width:0.25mm;' /></svg>");
}我是这样用它们的:
<div class="hairline-border"></div>它在Firefox和Safari/Chrome中正确呈现,wkhtmltopdf至少保持了原来的线宽。有一些讨论认为,SVG的base64转换将保证在IE上具有更好的兼容性。坦白地说,我不在乎IE是否快乐,但如果必须的话,我会看到CSS中的内联SVG。
https://stackoverflow.com/questions/8311297
复制相似问题