我正在尝试使用 WKHTMLTOPDF 实现报表引擎,但在将内容与纸张边缘对齐时遇到了问题。
假设我将纸张尺寸设置为 A4,并将打印边距设置为零,如下所示:
wkhtmltopdf-amd64 --load-error-handling ignore --orientation Portrait --page-size A4 --margin-top 0 --margin-bottom 0 --margin-left 0 --margin-right 0
现在我想做一个内容不被纸边 chop 的报告。例如我的内容由表格和单元格组成,我不希望将一个单元格分成两页。 CSS2 有一个专门针对这个的特性,page-break-inside:avoid
,但我知道没有浏览器支持它,webkit 也不异常(exception)。
然后我想,如果我知道 WKHTMLTOPDF 中的 A4 纸实际有多长,那么我可以编写一些 Javascript 通过调整行的大小来对齐行。由于无法在 CSS 中告诉实际毫米完全填满一张 A4 纸,我别无选择,只能使用错误和试验。最后,我设法调整了 css 高度 (height: 290.245261mm
),使页面内容垂直填满一张 A4 纸。此高度是为具有绝对定位且顶部和左侧设置为零的 DIV 设置的。所有有效的填充和边距也设置为零(HTML、BODY、...)。
一切都很好,直到我意识到页面数量增加时情况的严重性。所以我在我的 HTML 中放入了 10 个整页 DIV,令我惊讶的是它打印了 11 页。在第 11 页的开头有一小排像素。
所以,这是我的问题:在使用 WKHTMLTOPDF 转换 HTML 时,有没有人想出一种使 HTML 内容与纸张边缘对齐的解决方案?我正在使用 WKHTMLTOPDF 0.11.0 rc1。
最佳答案
(虽然这是个老问题,但还是有人这么问...)
最好的解决方法是更新您的wkhtmltopdf
工具。
您描述的错误已在 version 0.12 中修复和表格行不再分为两页(如链接的变更日志中所述:
- [qt]防止表格行分页
我在多个元素中使用同一个库,这救了我,即使我当时不得不自定义编译它。
关于javascript - 使纸张对齐的 html 与 WKHTMLTOPDF 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20453298/