dompdf page_script() 变量

问题描述 投票:1回答:1

我正试图生成一个具有多组页码的PDF文件,而且还有未编号的页面。我将无法预先知道每组页面有多长,因为它们是动态生成的。例如,PDF可能总共包含10页,其中第1-4页的页脚为 "Page X of 4",第5页未编号,第6-8页为 "Page X of 3",第9-10页未编号。

现在,我使用page_script()和text()函数实现了页面编号。从本质上讲,我认为我需要的是一种能够在生成PDF时从文档中传递变量到page_script()函数的方法。这将使我能够添加一些类似于 <?php $page_count = false; ?><?php $page_count_reset = true; ?> 的不同位置,并在page_script()函数中进行相应操作。据我所知,这似乎是不可能的。

我可以在文档中设置globals。<?php $GLOBALS['page_count'] = false; ?> 并从page_script()中读取它们,但是这些都是一次性处理的。所以无论我在文档中把最后一个$GLOBALS['page_count']设置为什么,在整个page_script()函数中$GLOBALS['page_count']就是什么。

我希望这能说明一些问题。我的下一步是生成多个PDF文件,并将它们连接在一起,但这是我不想做的事情,除非我必须这样做。有人有什么想法吗?

dompdf
1个回答
4
投票

你的方向是对的。事实上,差不多了。你需要做的是在全局变量中跟踪你的部分。下面的代码段可以放在你的HTML中,以便与dompdf 0.6.1一起使用。

1)在正文中首先设置一些全局变量。

$GLOBALS['start_pages'] = array( );
$GLOBALS['current_start_page'] = null;
$GLOBALS['show_page_numbers'] = false;

2) 在每一节的开始处填入 start_pages 全局性的。

$GLOBALS['current_start_page'] = $pdf->get_page_number();
$GLOBALS['start_pages'][$pdf->get_page_number()] = array(
  'show_page_numbers' => true,
  'page_count' => 1
);

3)在每一节的最后,记录下页数。

$GLOBALS['start_pages'][$GLOBALS['current_start_page']]['page_count'] = $pdf->get_page_number() - $GLOBALS['current_start_page'] + 1;

4) 用页面脚本写出每一节的页码。

$pdf->page_script('
  if ($pdf) {
    if (array_key_exists($PAGE_NUM, $GLOBALS["start_pages"])) {
      $GLOBALS["current_start_page"] = $PAGE_NUM;
      $GLOBALS["show_page_numbers"] = $GLOBALS["start_pages"][$GLOBALS["current_start_page"]]["show_page_numbers"];
    }
    if ($GLOBALS["show_page_numbers"]) {
      $font = Font_Metrics::get_font("helvetica", "bold");
      $pdf->text(10, 10, "Page " . ($PAGE_NUM - $GLOBALS["current_start_page"] + 1) . " of " . $GLOBALS["start_pages"][$GLOBALS["current_start_page"]]["page_count"], $font, 12);
    }
  }
');

最终的文档会是这样的。

<html>
<body>

<script type="text/php">
  // setup
  $GLOBALS['start_pages'] = array( );
  $GLOBALS['current_start_page'] = null;
  $GLOBALS['show_page_numbers'] = false;
</script>

<script type="text/php">
  // section start
  $GLOBALS['current_start_page'] = $pdf->get_page_number();
  $GLOBALS['start_pages'][$pdf->get_page_number()] = array(
    'show_page_numbers' => true,
    'page_count' => 1
  );
</script>

<p>lorem ipsum ... <!-- lots of text -->

<script type="text/php">
  // record total number of pages for the section
  $GLOBALS['start_pages'][$GLOBALS['current_start_page']]['page_count'] = $pdf->get_page_number() - $GLOBALS['current_start_page'] + 1;
</script>
<div style="page-break-before: always;"></div>
<script type="text/php">
  // section start
  $GLOBALS['current_start_page'] = $pdf->get_page_number();
  $GLOBALS['start_pages'][$pdf->get_page_number()] = array(
    'show_page_numbers' => false,
    'page_count' => 1
  );
</script>

<p>lorem ipsum ... <!-- lots of text -->

<script type="text/php">
  // record total number of pages for the section
  $GLOBALS['start_pages'][$GLOBALS['current_start_page']]['page_count'] = $pdf->get_page_number() - $GLOBALS['current_start_page'] + 1;
</script>

<script type="text/php">
    $pdf->page_script('
      if ($pdf) {
        if (array_key_exists($PAGE_NUM, $GLOBALS["start_pages"])) {
          $GLOBALS["current_start_page"] = $PAGE_NUM;
          $GLOBALS["show_page_numbers"] = $GLOBALS["start_pages"][$GLOBALS["current_start_page"]]["show_page_numbers"];
        }
        if ($GLOBALS["show_page_numbers"]) {
          $font = Font_Metrics::get_font("helvetica", "bold");
          $pdf->text(10, 10, "Page " . ($PAGE_NUM - $GLOBALS["current_start_page"] + 1) . " of " . $GLOBALS["start_pages"][$GLOBALS["current_start_page"]]["page_count"], $font, 12);
        }
      }
    ');
</script>

</body>
</html>

你可以在这里看到一个实践的例子。http:/eclecticgeek.comdompdfdebug.php?identier=e980df4efacf5202c2f1d31579f09c56。

© www.soinside.com 2019 - 2024. All rights reserved.