dompdf水印、图片、页眉和页脚问题

3

我在CodeIgniter中使用Dompdf作为插件,它可以完美地生成PDF。但是有一些问题困扰了我几天。

  1. 我想在生成的每个页面的页眉上放置一张图片。我按照这里给出的教程进行操作,但没有进展。我尝试了所有类型(jpg、png、gif)的图片,并将其放在PDF所在的同一文件夹中。但是没有效果。然后我尝试根据http://code.google.com/p/dompdf/wiki/Usage上显示的设置图像和CSS的路径变量。但我找不到好的示例或教程。如果有人曾经使用过,请帮助我。

  2. 我还想在每个页面上添加水印。为此,我使用以下代码:

    $pdf->page_text(110, $h - 240, "TRIAL", Font_Metrics::get_font("verdana", "bold"),110, array(0.92, 0.92, 0.92), 0, -58);

这个代码可以正常工作并生成水印,但是水印会覆盖内容。是否有任何方法可以更改水印的透明度?更改数组中的参数不起作用。

3.在每个页面的末尾(除了最后一页),我想放置文本“continued..”。为此,我使用以下代码:

$text = "Continued..";
  $width = Font_Metrics::get_text_width($text, $font, $size);
  $pdf->page_text($w - 16 - $width - 38, $y-15, $text, $font, $size, $color);

默认情况下,它会将文本放在每一页(因为应该这样做)。有没有办法在除最后一页以外的所有页面中放置文本?

  1. 如何设置不在dompdf库文件中可用的字体?

如果有人对任何一个问题有答案,请帮我解决。 - sidhartha
2个回答

2

1) 你正在使用的代码是什么?听起来你在使用内联脚本时取得了成功,但图片却没有显示。所以可能存在代码问题。

2) 这是内联脚本的问题。它在HTML内容之后呈现,意味着它会显示在HTML内容的顶部。添加文本时曾经有一个不透明度选项,但我不确定它是否正常工作。它已从0.6.0代码库中删除。

你可能需要等待下一个发布版本,它将包括更多的样式选项,可以在HTML中实现你想要做的事情(具体来说,是固定定位和CSS转换)。

3) 我不确定你能否在每一页上都显示页眉,除了最后一页。有一个选项可以停止对象的显示,但似乎只影响后续页面。因此,你必须在最后一页之前的页面中添加相关代码。

4) 如果你想添加字体,你需要使用load_font.php进行解析。你还需要访问可执行文件ttf2afm(dompdf 0.5.1)或ttf2ufm(dompdf 0.6.0)。有关如何加载字体的说明,请参见这里,或者你也可以尝试我开发的基于Web的字体准备工具


我在cpdf_Adapter.cls.php的第685行左右的函数中添加了两个参数,并在调用函数时传递相同的参数。函数如下:function page_text($x, $y, $text, $font, $size, $color = array(0,0,0), $adjust = 0, $angle = 0, $blend ="Normal", $opacity =1.0) { $this->_page_text[] = compact("x", "y", "text", "font", "size", "color", "adjust", "angle", "blend", "opacity"); } .header img不会出现在每一页(只出现在最后一页)。对于第三点,您能否告诉我如何获取总页数和当前页码,以便我可以进行比较并执行操作,或者提供一种方法? - sidhartha
@Brian 我正在使用图片。如果(isset($pdf)){ $path = base_url(); //基本路径设置为基本目录,如codeigniter配置文件中所示 $dompdf = new DOMPDF(); $dompdf->set_base_path($path); $basepath = $dompdf->get_base_path(); $img_w = 1.5 * 72; // 1.5英寸,以点为单位 $img_h = 0.9 * 72; // 0.9英寸,以点为单位 - 根据需要进行更改 $pdf->image($basepath."path_to_folder/logo.png","png",30,30,$img_w,$img_h); } 在这种情况下,图片仅显示在最后一页。我的需求是在所有页面上都显示。 - sidhartha
1
你的内联脚本位于哪里?使用 $pdf->page_text() 添加页面文本是全局设置。但是,当添加脚本生成的页眉/页脚时,它是一个相对设置。因此,如果你的脚本位于页面末尾,那么页眉/页脚只会出现在末尾。将你的内联脚本放在文档开头,你的页眉/页脚应该会出现在所有页面上。 - BrianS
我认为没有简单的方法可以使用通过内联脚本生成的标题添加“续页”文本。脚本在文档中遇到时运行,dompdf不知道文档顶部有多少页(因此get_page_count()函数在这里并不是很有用)。您需要知道倒数第二页是哪一页,就像在此示例HTML文档中一样。 - BrianS
嗨@Brian,有了你的帮助,本地系统一切正常。但是服务器上出现了一个问题,请在这里查看http://stackoverflow.com/questions/4922213/error-in-pdf-image-using-dompdf - sidhartha
显示剩余5条评论

1

请确保在dompdf_config.inc.php文件中的第173行左右DOMPDF_ENABLE_PHP设置为true。 请注意,如果有来自不受信任来源的未经过滤的内容传递到pdf中,这可能会带来潜在的安全风险。

/**
 * Enable inline PHP
 *
 * If this setting is set to true then DOMPDF will automatically evaluate
 * inline PHP contained within <script type="text/php"> ... </script> tags.
 *
 * Enabling this for documents you do not trust (e.g. arbitrary remote html
 * pages) is a security risk.  Set this option to false if you wish to process
 * untrusted documents.
 *
 * @var bool
 */
define("DOMPDF_ENABLE_PHP", true);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接