dompdf page_script() 变量
dompdf page_script() variables
我正在尝试生成包含多组页码和未编号页面的 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() 函数中相应地执行操作。据我所知,这似乎不可能。
我可以在文档 <?php $GLOBALS['page_count'] = false; ?>
中设置全局变量并从 page_script() 中读取它们,但是这些都是一次性处理的。因此,无论我在文档中将最后一个 $GLOBALS['page_count'] 设置为 $GLOBALS['page_count'] 在整个 page_script() 函数中的值。
我希望这能说得通。我的下一步是生成多个 PDF 并将它们连接在一起,但除非万不得已,否则我不想这样做。有人有什么想法吗?
你走在正确的轨道上。实际上,快到了。您需要做的是在全局变量中跟踪您的部分。以下片段可以放在您的 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.com/dompdf/debug.php?identifier=e980df4efacf5202c2f1d31579f09c56
我正在尝试生成包含多组页码和未编号页面的 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() 函数中相应地执行操作。据我所知,这似乎不可能。
我可以在文档 <?php $GLOBALS['page_count'] = false; ?>
中设置全局变量并从 page_script() 中读取它们,但是这些都是一次性处理的。因此,无论我在文档中将最后一个 $GLOBALS['page_count'] 设置为 $GLOBALS['page_count'] 在整个 page_script() 函数中的值。
我希望这能说得通。我的下一步是生成多个 PDF 并将它们连接在一起,但除非万不得已,否则我不想这样做。有人有什么想法吗?
你走在正确的轨道上。实际上,快到了。您需要做的是在全局变量中跟踪您的部分。以下片段可以放在您的 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.com/dompdf/debug.php?identifier=e980df4efacf5202c2f1d31579f09c56