所以基本上我使用 wkhtmltopdf 将动态 HTML 报告转换为 PDF。
该报告具有特定的格式,我被要求使用 HTML 克隆该格式。
我面临的问题是我无法在 html 中模拟 100% 功能分页符,因此 wkhtmltopdf 可以解释它并将内容发送到另一个页面。
我试图避免页面尺寸测量方法等等。
TIA 提供任何帮助。
编辑: 到目前为止,我正在使用
<br>
模拟分页符并且它有效。不过我还需要做一些测试。
指定特定于打印介质类型的 CSS 规则。有许多属性可用于分页。我发现将
page-break-before
属性附加到类中最简单,如下所示。
在 HTML 中:
<p>Page 1, paragraph 1</p>
<p class="new-page">Page 2, paragraph 1</p>
<p>Page 2, paragraph 2</p>
在 CSS 中:
@media print {
.new-page {
page-break-before: always;
}
}
当我使用
wkhtmltopdf
时,我使用以下类:
.keep-together {
page-break-inside: avoid;
}
.break-before {
page-break-before: always;
}
.break-after {
page-break-after: always;
}
所以我可以强迫:
keep-together
类时,如有必要,会在容器之前创建分页符。@media print
不适用于我的 wkhtmltopdf
。
<div style = "display:block; clear:both; page-break-after:always;"></div>
只需将其添加到您的 html 代码中
当我使用 wkhtmltopdf 的选项 --print-media-type 时,@media print 对我来说适用于 wkhtmltopdf
遇到此问题的人,请尝试将 wkhtmltopdf 降级到版本 0.10.0 rc2,对我有用
当使用
wkhtmltopdf
作为 pandoc
的 pdf 引擎时,将选项传递给 wkhtmltopdf
的顺序很重要。
例如,这不起作用,因为
--pdf-engine-opt=toc
出现在--pdf-engine-opt=--print-media-type
之前:
pandoc --pdf-engine-opt=toc --pdf-engine-opt=--print-media-type --pdf-engine=wkhtmltopdf -o out.pdf out.md
改变它们确实有效:
pandoc --pdf-engine-opt=--print-media-type --pdf-engine-opt=toc --pdf-engine=wkhtmltopdf -o out.pdf out.md
如果你的页面内容是动态的,我觉得这个会更合适。
主要解决HTML生成PDF以及分页控制的问题。从此,生成高质量PDF不再困难。
优点: