gpt4 book ai didi

header - Dompdf 在每一页上画线

转载 作者:行者123 更新时间:2023-12-04 17:50:46 29 4
gpt4 key购买 nike

我正在尝试使用 Dompdf 从 html 文件生成漂亮的 pdf,但我无法画线
在每一页上。这是 php 文件的示例。

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

$html = file_get_contents("test.txt");
$html = utf8_decode($html);

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

$dompdf->render();

$font = Font_Metrics::get_font("helvetica", "bold");
$canvas = $dompdf->get_canvas();
$footer = $canvas->open_object();

$canvas->line(10,730,800,730,array(0,0,0),1);
$canvas->page_text(555, 750, "{PAGE_NUM}/{PAGE_COUNT}",
$font, 10, array(0,0,0));

$canvas->close_object();
$canvas->add_object($footer, "all");

$dompdf->stream("dompdf_out.pdf", array("Attachment" => false));
?>

这会生成一个 pdf,其中每个页面都包含页码,但只有最后一页有一行。

那么如何使用 Dompdf 在每个页面上绘制线条/图像?

最佳答案

当然,我们建议在可能的情况下使用 HTML+CSS,您的上述答案就是这样做的。你错过了一件事,那就是页码。您可以使用 CSS 计数器获取每页上的页码。例如

<style>
#header { position: fixed; border-bottom:1px solid gray;}
#footer { position: fixed; border-top:1px solid gray;} .pagenum:before { content: counter(page); } </style>

<div id="header">
<img src="logo.gif" style="margin-top:10px;"/>
</div>
<div id="footer">
Page <span class="pagenum"></span>
</div>

您还不能通过 CSS 访问的一个值是页面总数。因此,您仍然需要使用脚本生成的文本。

首先,稍微解释一下。大多数直接访问方法仅将内容添加到当前页面(实际上,当前事件对象......通常是一个页面)。因此,使用 text() 绘制线条或形状、添加图像或添加文本方法全部绘制到单个页面。您可以通过渲染到一个分离的对象来绕过该限制,然后将其添加到每个页面( open_object()/ close_object()/ add_object() )。需要注意的是,分离的对象是从当前页面开始生成的(即所有以前的页面都不会看到该对象),这就是您通常希望通过内联脚本处理对象的原因。
page_text()方法不一样。它专门用于在呈现 PDF 后向所有页面添加内容。它在外部工作并与分离的对象容器分开。您在 page_script() 中有类似的功能方法,它以类似于 page_text() 的方式处理脚本处理文本。

所有这一切都是说,根据您问题中的示例,您的代码可能没有按照您的想法行事。

第二,警告。你不应该使用 utf8_decode()除非您打算只使用 iso-8859-1 从头到尾对文本进行编码。 utf8_decode()导致 utf8 有损转换为 iso-8859-1。 dompdf 完全能够处理 utf8 编码的文本(从 v0.6.0 开始),并将处理任何必要的转换。您应该熟悉 Unicode How-To 中的信息。 ,因为有一些与您的 PHP/dompdf 配置相关的要求。

考虑到所有这些信息,您可以使用原始代码进行一些小的修改:
<?php 
require_once("dompdf/dompdf_config.inc.php");

$html = file_get_contents("test.txt");

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

$font = Font_Metrics::get_font("helvetica", "bold");
$canvas = $dompdf->get_canvas();
$canvas->page_text(555, 750, "{PAGE_NUM}/{PAGE_COUNT}", $font, 10, array(0,0,0));
$canvas->page_script('
// $pdf is the variable containing a reference to the canvas object provided by dompdf
$pdf->line(10,730,800,730,array(0,0,0),1);
');

$dompdf->stream("dompdf_out.pdf", array("Attachment" => false));
?>

关于header - Dompdf 在每一页上画线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17143149/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com