wkhtmltopdf与整页背景

时间:2011-05-19 11:16:46

标签: wkhtmltopdf

我正在使用wkhtmltopdf生成一个PDF文件,该文件将转到打印机,并且在生成的PDF中使内容填满整个页面时会遇到一些麻烦。

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

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

7 个答案:

答案 0 :(得分:29)

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>

使用stdin中的html(注意破折号)

echo "<h1>Testing Some Html</h2>" | wkhtmltopdf -T 0 -B 0 -L 0 -R 0 - <output>

使用从stdin到stdout的html

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

echo“测试一些Html”| wkhtmltopdf -T 0 -B 0 -L 0 -R 0 - - &gt;检验.pdf

没有工作的内容:

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

答案 1 :(得分:7)

我意识到这是老而冷,但万一有人发现这个并且有相同/类似的问题,这是一个在经过一些试验和错误后对我有用的解决方法。

我创建了一个简单的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

希望这有助于某人...

答案 2 :(得分:6)

http://code.google.com/p/wkhtmltopdf/issues/detail?id=359我发现更多的人“受苦”。 --dpi 300解决方法对我不起作用,我必须设置--zoom 1.045来放大一点,使得额外的右边和底边消失...

答案 3 :(得分:5)

使用-B 0 -L 0 -R 0 -T 0选项并使用你设置A4大小的div的技巧对我来说很好。

你还记得使用身体{margin:0;填充:0;}在CSS的顶部?

我无法帮助您解决CSS分页问题,​​因为我还没有试过错误的那些,但是,您可以在页面上运行脚本来做聪明的事情。这是一个jQuery示例,说明如何根据内容的长度将内容拆分为页面大小块。如果你能够适应wkhtmltopdf,那么请在这里发帖!

http://www.script-tutorials.com/demos/79/index.html

答案 4 :(得分:5)

我们刚刚使用--disable-smart-shrinking选项解决了同样的问题。

答案 5 :(得分:4)

我正在使用版本0.12.2.1并设置:

$ids_nowych = array();   

$new = $this->Instrument->find('all', array(
         'conditions'=>array(
            'status' => '1'),
        'fields' => array('Instrument.id',[and other fields]),
         'order'=> array('added'=>'desc'),
         'limit'=>5
     ));


foreach ($new as $n){
        $ids_nowych[] = $n['Instrument']['id']; 
}


    $edited = $this->Instrument->find('all', array(
         'conditions'=>array(
            'status' => '1',
            'NOT' => array(
                'Instrument.id' => $ids_nowych
            )),
        'fields' => array('Instrument.id',[and other fields]),
         'order'=> array('modified'=>'desc'),
         'limit'=>100
     ));




 $this->set(array(
     'edytowane'=>$edited,
     'nowe'=>$new
 ));

为我工作。

当然需要通过以下方式添加0个边距:

body { padding: 0; margin 0; }
div.page-layout { height: 295.5mm; width: 209mm;}

答案 6 :(得分:1)

您遇到的是一个错误。

转换文件时,您需要设置--dpi选项。在你的情况下,你可能想要--dpi 300,但可以设置得更低。