1

将 TCPDF 与 FPDI 模板一起使用时,在此过程中会丢失一些 CSS 支持。问题是边框或背景颜色之类的东西,最终出现在 PDF 模板下方的图层中。TCPDF 用于SetLineStyle()将 CSS 边框/背景转换为 PDF,这似乎是问题所在。

例如:

$this->setSourceFile($filename); // /path/to/my/background.pdf
$imported_page = $this->ImportPage(1);
$this->useTemplate($imported_page);

...

$html = '<table style="border: 1px solid #000;"><tr><td style="background-color: #ff0000;">...</td></tr></table>';

$this->writeHTMLCell(45, 25, 160, 29, $html); 

不呈现 CSS 边框。一旦useTemplate()删除边界就在那里。使用 Illustrator 分析生成的 PDF 会发现一些有趣的事情:

PDF 图层useTemplate()- 从上到下:

  1. 表/内容层
  2. PDF 模板图层 (群展)
  3. 边框和背景层(路径)

PDF 图层没有useTemplate()- 从上到下:

  1. 表/内容层
  2. 边框和背景层(路径)

在 Illustrator 中禁用包含 PDF 模板的图层组时,边框和背景变得可见。

不幸的是,我们没有找到将 PDF 模板图层组放在堆栈底部的方法,以便其他所有内容都呈现在其上方。我们能想出的唯一解决方法是将writeHTMLCell()调用包装在startTemplate()/中endTemplate()并完成printTemplate()

$this->setSourceFile($filename); // /path/to/my/background.pdf
$imported_page = $this->ImportPage(1);
$this->useTemplate($imported_page);

...

$html = '<table style="border: 1px solid #000;"><tr><td style="background-color: #ff0000;">...</td></tr></table>';

$workaround_template = $this->startTemplate($w, $h);
$this->writeHTMLCell(45, 25, 160, 29, $html); 
$this->endTemplate();
$this->printTemplate($workaround_template, $x, $y, $w, $h, 'T', 'L');

所以出于好奇:这是唯一的方法,还是有办法将 PDF 模板放在所有事情的底部?

提前致谢!

4

2 回答 2

5

解决方案是确实使用 setPageMark() 。这对我来说非常有效:

public function AddPage($orientation = '', $format = '') {
    global $pdf_data_path;
    parent::AddPage($orientation, $format);
    if ($this->use_headed) {
        $this->setSourceFile($pdf_data_path."/headed.pdf");
        $tplidx = $this->importPage(1, '/MediaBox');
        $this->useTemplate($tplidx, 0, 0, 0, 0, true);
        $this->setPageMark();
    }       
}

关键是在使用模板后放置 setPageMark() 。然后边框将堆叠在生成的 PDF 中的模板顶部。

于 2012-10-27T09:03:02.433 回答
1

您是否尝试使用setPageMark() -方法?

于 2012-07-12T18:55:35.703 回答