好的,所以我使用以下代码片段来获取HTML的“视图”,并将PHP变量加载为$data
,以便我可以执行诸如从数据库填写tr
数据的操作打电话或其他什么。
function getView ($file, $data=NULL) {
if (!empty($data)) extract($data);
ob_start();
if (is_file($file)) include($file);
return ob_get_clean();
}
用于类似$htmlPDF = getView('receipt.php', array( 'orderNumber' => $orderNumber ));
之类的内容,然后在HTML中使用$orderNumber
来填充它的正确位置。例如:
<h1>You Order #<?= $orderNumber; ?></h1>
<小时/> 好的,重点是,这就是我获取HTML的方式。然后我将它加载到我的dompdf变量:
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
哪一切都很棒。问题是让inline php
脚本工作以获取PAge Numbers / Page Headers | Footers。我尽可能地遵循了here的指示,但我似乎无法做出正确的融合。到目前为止,没有任何错误,除了我在任何地方获得 0 页码!
是的,我查看了Header in PDF page using DOMPDF in PHP和dompdf page number等网页,但仍然没有前进的进展!我想知道inline php
脚本是否与我如何将HTML作为字符串有关?任何指针,想法,建议?
答案 0 :(得分:15)
关于版本为changes&gt; =0.7.0
的dompdf
更新
1。由于dompdf_config.inc.php文件已从此版本中删除(并且不再引用),因此应在运行时设置所有dompdf选项。
4。 FontMetrics类现在实例化而不是静态。为了简化早期版本的dompdf中嵌入式脚本的迁移,我们通过$ fontMetrics变量提供对实例化FontMetrics类的访问。请更新您的嵌入式脚本。例如,FontMetrics :: get_font('helvetica')现在是$ fontMetrics-&gt; getFont('helvetica')。
〜感谢Dennis Ameling的answer获取更新信息。
通过查看dompdf_config.inc.php
文件找到我的答案。事实证明,DOMPDF_ENABLE_PHP
设置为false
,从而导致内联php脚本被忽略。我只是将dompdf_config.custom.inc.php
编辑为以下内容,一切正常,并使用view
中的后续代码。
<击> 撞击>
<击><?php
define("DOMPDF_ENABLE_PHP", true);
击> <击> 撞击>
$dompdf->set_option("isPhpEnabled", true);
<body>
<script type="text/php">
if ( isset($pdf) ) {
// OLD
// $font = Font_Metrics::get_font("helvetica", "bold");
// $pdf->page_text(72, 18, "{PAGE_NUM} of {PAGE_COUNT}", $font, 6, array(255,0,0));
// v.0.7.0 and greater
$x = 72;
$y = 18;
$text = "{PAGE_NUM} of {PAGE_COUNT}";
$font = $fontMetrics->get_font("helvetica", "bold");
$size = 6;
$color = array(255,0,0);
$word_space = 0.0; // default
$char_space = 0.0; // default
$angle = 0.0; // default
$pdf->page_text($x, $y, $text, $font, $size, $color, $word_space, $char_space, $angle);
}
</script>
<div
如果你走这条路,别忘了重新开始Apache
答案 1 :(得分:10)
如果你使用DOMPDF&gt; = 0.7.0,dompdf_config.inc.php文件has been removed并添加页码现在需要稍微不同的方法:
由于dompdf_config.inc.php文件已从此版本中删除(并且不再引用),因此应在运行时设置所有dompdf选项。
要启用DOMPDF执行PHP代码,请使用:
$dompdf->set_option("isPhpEnabled", true);
另外,FontMetrics should now be called使用$fontMetrics
代替Font_Metrics
,因此@ user1231342435346354提到的代码略有变化:
<script type="text/php">
if ( isset($pdf) ) {
$pdf->page_script('
if ($PAGE_COUNT > 1) {
$font = $fontMetrics->get_font("Arial, Helvetica, sans-serif", "normal");
$size = 12;
$pageText = "Page " . $PAGE_NUM . " of " . $PAGE_COUNT;
$y = 15;
$x = 520;
$pdf->text($x, $y, $pageText, $font, $size);
}
');
}
</script>
答案 2 :(得分:2)
考虑到了Dennis Ameling的answer的改进版本…
不要忘记像这样$dompdf->set_option("isPhpEnabled", true);
启用PHP support
(或者,如果您使用的是laravel-dompdf PDF::setOptions(['isPhpEnabled' => true]);
)。
<script type="text/php">
if (isset($pdf)) {
$pdf->page_script('
$text = sprintf(_("Page %d/%d"), $PAGE_NUM, $PAGE_COUNT);
// Uncomment the following line if you use a Laravel-based i18n
//$text = __("Page :pageNum/:pageCount", ["pageNum" => $PAGE_NUM, "pageCount" => $PAGE_COUNT]);
$font = null;
$size = 9;
$color = array(0,0,0);
$word_space = 0.0; // default
$char_space = 0.0; // default
$angle = 0.0; // default
// Compute text width to center correctly
$textWidth = $fontMetrics->getTextWidth($text, $font, $size);
$x = ($pdf->get_width() - $textWidth) / 2;
$y = $pdf->get_height() - 35;
$pdf->text($x, $y, $text, $font, $size, $color, $word_space, $char_space, $angle);
'); // End of page_script
}
</script>
如果只需要$ pageNum,则using a CSS counter是一种更简单的方法!
答案 3 :(得分:0)
我有一个简单的代码,可以在dom pdf每页的页脚中显示页码
#footer { position: fixed; right: 0px; bottom: 10px; text-align: center;border-top: 1px solid black;}
#footer .page:after { content: counter(page, decimal); }
@page { margin: 20px 30px 40px 50px; }
以上代码为CSS代码
<div id="footer">
<p class="page">Page </p>
</div>
您可以根据需要更改文本位置
答案 4 :(得分:0)
对我有用的代码。您可以根据 PDF 的大小自定义应位于的位置:
$pdf->loadView('your_view', $data);
$pdf->output();
$dom_pdf = $pdf->getDomPDF();
$canvas = $dom_pdf->get_canvas();
$canvas->page_text(0, 0, "{PAGE_NUM} of {PAGE_COUNT}", null, 10, array(0, 0, 0));
请记住,颜色数组不包含 RGB 值。您可以从行 RYB here 中获取适当的值作为范围 (0,1) 中的值,即 array(0.46,0.46,0.46)
。
答案 5 :(得分:-2)
首先,您必须在dompdf_config.inc.php
文件中启用执行内联php脚本。 (将此行改为define("DOMPDF_ENABLE_PHP", true);
)
此代码在页眉的右上角设置页面指示符...
<script type="text/php">
if ( isset($pdf) ) {
$pdf->page_script('
if ($PAGE_COUNT > 1) {
$font = Font_Metrics::get_font("Arial, Helvetica, sans-serif", "normal");
$size = 12;
$pageText = Page . " " . $PAGE_NUM . " of " . $PAGE_COUNT;
$y = 15;
$x = 520;
$pdf->text($x, $y, $pageText, $font, $size);
}
');
}
</script>
确保脚本标记在body标记内...否则它不起作用!