6

您好我正在使用 DOMPDF 生成 PDF 文件,我想知道如何获取页码。

我在 DOMPDF 的常见问题页面中提到了以下内容。并且没有成功。注意:我也打开了内联 PHP 以及它在常见问题解答中提到的

以下是我的代码

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


ob_start();
//be sure this file exists, and works outside of web context etc.)


$dompdf = new DOMPDF();


$html="     <script type='text/php'>";
        if ( isset($pdf) ) { 
            $font = Font_Metrics::get_font("yourfont", "normal");
            $size = 9;
            $y = $pdf->get_height() - 24;
            $x = $pdf->get_width() - 15 - Font_Metrics::get_text_width("1/1", $font, $size);
            $pdf->page_text($x, $y, "{PAGE_NUM}/{PAGE_COUNT}", $font, $size);
        } 
$html.="        </script>";

$html .="
        aaaaa<br/>aaaaaa<br/>aaaaaa<br/>aaaaa<br/>aaaaaa<br/>aaaaaa<br/>aaaa<br/>aaaaa<br/>aaaaaa<br/>aaaaa<br/>
        aaaaa<br/>aaaaaaa<br/>aaaaaa<br/>
aaaaa<br/>aaaaaa<br/>
        aaaaaaa<br/>aaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>
        aaaaaaa<br/>aaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>
        aaaaaaaa<br/>aaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>
        aaaaaaaa<br/>aaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>
        aaaaaaaa<br/>aaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>
        aaaaaaaaa<br/>aaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>
        aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>aaaaaaaaaaaaaaaaa<br/>
        </body></html>"; 


$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream("sample.pdf");


 ?>

有人可以指出我这个问题吗?我在哪里做错了

4

3 回答 3

10

您正在将内联脚本作为 PHP 页面的一部分运行,而不是将其传递给 dompdf。您的代码可以编写如下(截断到相关部分):

...
$html="
<html>
  <body>
    <script type='text/php'>
      if ( isset($pdf) ) { 
        $font = Font_Metrics::get_font('helvetica', 'normal');
        $size = 9;
        $y = $pdf->get_height() - 24;
        $x = $pdf->get_width() - 15 - Font_Metrics::get_text_width('1/1', $font, $size);
        $pdf->page_text($x, $y, '{PAGE_NUM}/{PAGE_COUNT}', $font, $size);
      } 
    </script>
";
...

请注意,内联脚本当前必须出现在 BODY 元素内。否则在文档处理过程中将被忽略。

还有其他方法可以实现您想要的

于 2012-11-01T19:33:20.920 回答
0

如果您使用“1/1”来获取 $x,那么当您有超过 10 页时,这将不起作用。

一个可能的解决方案确实意味着编辑“cpdf_adapter.cls.php”,因此 _add_page_text() 函数在 str_replace() 之后使用以下内容...关于第 790 行:

if ($x < 0) $x = (($this->_width + $x) - $this->get_text_width($text, $font, $size));
if ($y < 0) $y = (($this->_height + $y) - $this->get_font_height($font, $size));

这个想法是你可以传入负 x/y 坐标,它们将从右/下边缘工作。

然后在发送到 DOMPDF 的 HTML 中,我使用了:

<script type="text/php">
   $pdf->page_text(-30, -32, "{PAGE_NUM} of {PAGE_COUNT}", Font_Metrics::get_font("serif"), 10, array(0,0,0));
</script>

或者,如果您想以 px 为单位指定 x/y:

<script type="text/php">
   $pdf->page_text(((-30 * 72) / DOMPDF_DPI), ((-32 * 72) / DOMPDF_DPI), "{PAGE_NUM} of {PAGE_COUNT}", Font_Metrics::get_font("serif"), 10, array(0,0,0));
</script>
于 2012-11-14T11:58:21.667 回答
0

对我有用的代码。您可以根据 PDF 的大小自定义应位于的位置:

$pdf->load_html($html);
$pdf->render();
$dompdf = $pdf->getDomPDF();
$color = array(0, 0, 0);
$font = null;
$size = 10;

$canvas = $dompdf->get_canvas();
$canvas->page_text(0, 0, "{PAGE_NUM} of {PAGE_COUNT}", $font, $size, $color);

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

于 2021-07-11T22:45:48.203 回答