我正在使用wkhtmltopdf生成一个PDF文件,该文件将转到打印机,并且在生成的PDF中使内容填满整个页面时会遇到一些麻烦。
在CSS中我将宽度和高度设置为2480 X 3508像素(a4 300 dpi),在创建PDF时,我使用0作为边距,但最后仍然在右边和底部有一个小的白色边框。也尝试使用mm和百分比,但结果相同。
我需要有人请提供一个示例,说明如何设置HTML的样式以及在命令行中使用哪些选项,以便生成的PDF页面填满整个背景。一种方法可能是包括出血(这可能是必要的)但欢迎任何提示。目前我正在创建一个大的HTML页面(没有CSS分页符 - 可能会有帮助吗?)但如果需要,可以单独生成每个页面然后将它们全部提供给wkhtmltopdf。
答案 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;">
</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,那么请在这里发帖!
答案 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
,但可以设置得更低。