使用"视图"时如何获取dompdf PDF上的页码

SpY*_*3HH 9 php pdf dompdf

好的,所以我使用以下代码片段来获取加载了PHP变量的HTML"视图",$data以便我可以执行诸如tr从数据库调用中填写数据等等.

function getView ($file, $data=NULL) {
    if (!empty($data)) extract($data);
    ob_start();
    if (is_file($file)) include($file);
    return ob_get_clean();
}
Run Code Online (Sandbox Code Playgroud)

获取用于类似的东西,然后在HTML中使用$htmlPDF = getView('receipt.php', array( 'orderNumber' => $orderNumber ));Where $orderNumber来填充它的正确位置.例如:

<h1>You Order #<?= $orderNumber; ?></h1>
Run Code Online (Sandbox Code Playgroud)


好的,重点是,这就是我获取HTML的方式.然后我将它加载到我的dompdf变量:

$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
Run Code Online (Sandbox Code Playgroud)

哪一切都很棒.问题是让inline php脚本工作以获取PAge Numbers/Page Headers | Footers.我尽可能地遵循这里的指示,但我似乎无法做出正确的混合.到目前为止,没有任何错误,除了我在任何地方获得0页码!

是的,我使用PHP中的DOMPDFdompdf页码查看了PDF页面中的页眉,但仍然没有前进的进展!我想知道inline php脚本是否与我如何将HTML作为字符串有关?任何指针,想法,建议?

SpY*_*3HH 15

关于changes版本dompdf> = 1的更新.因为已从此版本中删除了dompdf_config.inc.php文件(并且不再引用),所以应在运行时设置所有dompdf选项.4. FontMetrics类现在实例化而不是静态.为了简化早期版本的dompdf中嵌入式脚本的迁移,我们通过$ fontMetrics变量提供对实例化FontMetrics类的访问.请更新您的嵌入式脚本.例如,FontMetrics :: get_font('helvetica')现在是$ fontMetrics-> getFont('helvetica').〜感谢 Dennis Ameling对更新信息的回答.0.7.0


通过查看dompdf_config.inc.php文件找到我的答案.事实证明,DOMPDF_ENABLE_PHP设置为false因此导致内联php脚本被忽略.我只是编辑dompdf_config.custom.inc.php到以下,一切都很好,并使用后面的代码view.

在dompdf/dompdf_config.custom.inc.php中

<?php
    define("DOMPDF_ENABLE_PHP", true);
Run Code Online (Sandbox Code Playgroud)

在运行时

$dompdf->set_option("isPhpEnabled", true);
Run Code Online (Sandbox Code Playgroud)

然后,在我的html文件中

<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
Run Code Online (Sandbox Code Playgroud)

如果你走这条路,别忘了重新启动 Apache


Den*_*ing 12

如果您使用的是DOMPDF> = 0.7.0,则删除了dompdf_config.inc.php文件并添加页码现在需要稍微不同的方法:

由于dompdf_config.inc.php文件已从此版本中删除(并且不再引用),因此应在运行时设置所有dompdf选项.

要使DOMPDF能够执行PHP代码,请使用:

$dompdf->set_option("isPhpEnabled", true);
Run Code Online (Sandbox Code Playgroud)

此外,现在应该使用FontMetrics $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>
Run Code Online (Sandbox Code Playgroud)


Sum*_*pta 8

我有一个简单的代码来在 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; }
Run Code Online (Sandbox Code Playgroud)

上面的代码是css代码

<div id="footer">
    <p class="page">Page </p>
  </div> 
Run Code Online (Sandbox Code Playgroud)

您可以根据需要更改文本位置


Jso*_*owa 5

对我有用的代码。您可以根据 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));
Run Code Online (Sandbox Code Playgroud)

请记住,颜色数组不包含 RGB 值。您可以从此处的 RYB 行中获取适当的值作为范围 (0,1) 中的值,即array(0.46,0.46,0.46)