dompdf HTML转PDF - 无法设置页面边距

30

版本:0.6.0 beta 3

我试图以各种方式使dompdf设置页面的边距。我的页面很长,有很多文字,分成了章节......

我的CSS大致如下:

#wrapper{
    padding:8px;
}

/* other styles... */

@page{margin: 0.2in 0.5in 0.2in 0.5in;}

当 PHP 时

<?php
ob_start(); // begin collecting output
include 'makemypdf.php'; // this page output the html
$html = ob_get_clean(); // retrieve output from makemypdf.php and stop buffering


require_once("dompdf/dompdf_config.inc.php");

$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream("sample.pdf", array("Attachment" => false));

?>
但是我得到的页面没有边距!!! 只有 #wrapper 的填充被应用...而且它们仅在整个PDF的开头和结尾处应用... 我做错了什么吗?PS-似乎只应用了底部边距...但我不确定...PPS-我也尝试了这个CSS,但没有成功:body {margin-top:40px;}html {margin-top:40px;}@page {margin-top:40px;}

尝试使用<tag style="margin: 0.2in 0.5in 0.2in 0.5in;"></tag>替换为<body style="margin: 0.2in 0.5in 0.2in 0.5in;"></body> - Alsemany
谢谢你的回答!今天我经过几步之后找到了我的问题所在。我已经发布了解决方案。 - Nereo Costacurta
3个回答

54

我发现在这个版本的dompdf中,无论是body还是@page都不起作用。

问题出在主CSS文件中,我每次都添加了以下这行代码:

*{margin:0;padding:0}

我发现PDF文件的边距是基于HTML文件的边距来决定的,因此我使用全局选择器删除了那行代码,并替换为:

th,td,p,div,b ... {margin:0;padding:0}
html{margin:40px 50px}

这个方法像是“出乎意料的”,但它确保了每一页都有正确的右边距。


3
似乎在使用 * 并尝试设置页面边距时存在问题。我们需要进一步研究。您仍然可以使用 * 选择器,只需通过添加 !important 强制设置页面边距,例如 @page { margin: 40px 50px !important; } - BrianS
1
FYI,dompdf认为HTML元素和@page是相同的。在v0.6.0 beta 3中存在一个错误,您必须在@page选择器后面包含一个空格。这个问题已经在下一个版本中得到了修复。 - BrianS
不用谢。我需要修改关于@page和HTML元素的陈述。我认为它们并不相同,但会以类似的方式影响文档。我们需要决定是否希望这两个选择器代表相同的实体。 - BrianS

11

这解决了我的问题:

        @page {
            margin: 0 !important;
            padding: 0 !important;
        }

1
你可以在body标签上这样做:body { margin: 0.2cm; }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接