12

好的,所以我使用下面的代码片段来获取加载了 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();
}

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

<h1>You Order #<?= $orderNumber; ?></h1>


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

$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();

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

是的,我已经查看了诸如Header in PDF page using DOMPDF in PHP and dompdf page number之类的页面,但仍然没有任何进展!我想知道inline php脚本是否与我如何将 HTML 作为字符串获取有关?任何指示,想法,建议?

4

6 回答 6

16

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

在运行时

$dompdf->set_option("isPhpEnabled", true);

然后,在我的 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

如果你走这条路,别忘了重新开始Apache

于 2013-11-14T19:15:27.820 回答
13

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

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

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

$dompdf->set_option("isPhpEnabled", true);

此外,现在应该使用$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>
于 2016-08-05T11:56:22.410 回答
10

我有一个简单的代码来显示 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> 

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

于 2019-07-06T12:19:26.530 回答
3

考虑到 Dennis Ameling答案的改进版本......</p>

翻译和文本居中

不要忘记启用这样的PHP 支持$dompdf->set_option("isPhpEnabled", true); (或者,如果您使用的是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,那么使用 CSS 计数器是一种更简单的方法!

于 2020-05-26T15:15:59.113 回答
1

对我有用的代码。您可以根据 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 行中获取适当的值作为 (0,1) 范围内的值,即array(0.46,0.46,0.46).

于 2021-07-11T19:58:50.263 回答
-2

首先,您必须启用在dompdf_config.inc.php文件中执行内联 php 脚本。(define("DOMPDF_ENABLE_PHP", true);将此行更改为 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> 

确保脚本标签在正文标签内......否则它不起作用!

于 2015-04-28T08:22:00.820 回答