2

使用 --disable-smart-shrinking 时,我遇到了 wkhtmltopdf 的字体大小问题。

我不确定这个标志是否真的放大了内容或缩小了它。然而,很明显的是,它对标题做的不是同样的事情。

当我们让我们的用户设计他们自己的表单时,无论是在标题还是正文中,一定的字体大小必须相同。我们还发现使用 --disable-smart-shrinking 非常重要,因为这会使我们的内容很好地填满整个页面。

我用以下代码制作了一个简单的 html 示例

<html>
 <head>
 </head>
 <body style='margin: 0; border: 0'>
  <h3>My H3 text</h3>
 </body>
</html>

将其保存为 test.html 并使用 disable-smart-shrinking 标志运行 wkhtmltopdf

wkhtmltopdf.exe --disable-smart-shrinking --no-outline --header-spacing 10 -T 20 --header-html test.html test.html c:\temp\disable_smart_shrinking.pdf

结果(禁用智能收缩):

禁用智能收缩 http://img138.imageshack.us/img138/5143/disablesmartshrinking.th.png

请注意,正文中的 H3 比标题中的 H3 大很多。

wkhtmltopdf.exe --enable-smart-shrinking --no-outline --header-spacing 10 -T 20 --header-html test.html test.html c:\temp\disable_smart_shrinking.pdf

结果(启用智能收缩):

启用智能收缩

H3 元素的字体大小现在在标题和正文之间保持不变

问题:我们想创建一个使用整个页面宽度的 pdf, --disable-smart-shrinking 允许我们这样做。但是我们希望将相同大小的字体应用于标题。有没有人有办法做到这一点?我们做错了什么吗?

4

1 回答 1

4

此补丁将禁用页眉/页脚的智能智能收缩:

    diff --git a/src/lib/pdfconverter.cc b/src/lib/pdfconverter.cc
    index e815758..1504a14 100644
    --- a/src/lib/pdfconverter.cc
    +++ b/src/lib/pdfconverter.cc
    @@ -482,6 +482,7 @@ void PdfConverterPrivate::endPage(PageObject & object, bool hasHeaderFooter, int

            if (!object.headers.empty()) {
                    QWebPage * header = object.headers[objectPage];
    +                updateWebSettings(header->settings(), object.settings.web);
                    painter->save();
                    painter->resetTransform();
                    double spacing = s.header.spacing * printer->height() / printer->heightMM();
    @@ -506,6 +507,7 @@ void PdfConverterPrivate::endPage(PageObject & object, bool hasHeaderFooter, int

            if (!object.footers.empty()) {
                    QWebPage * footer = object.footers[objectPage];
    +                updateWebSettings(footer->settings(), object.settings.web);
                    painter->save();
                    painter->resetTransform();
                    double spacing = s.footer.spacing * printer->height() / printer->heightMM();
     }

     /*!

应用补丁:patch -l -p1 < ../wkhtmltopdf_smart_shrinking_header_footer_disable_fix.patch

此解决方案适用于 windows/linux。要获得精确(html 中的 1mm 等于 pdf 上的 1mm)渲染,您需要使用选项“--disable-smart-shrinking --dpi 96”运行 wkhtmltopdf

在 Mac OS X 上,可以使用“--enable-smart-shrinking”和 html body“body { width: 210mm }”上的 css 样式来实现精确渲染。此解决方案仅适用于 mac os x。

于 2013-12-29T23:28:23.983 回答