При использовании 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()
удаляется, границы остаются. Анализ полученных PDF-файлов с помощью Illustrator показывает некоторые интересные вещи:
Слои PDF с useTemplate()
— сверху вниз:
- Слои таблицы/содержимого
- Слои шаблона PDF (группа)
- Пограничные и фоновые слои (пути)
Слои PDF без useTemplate()
— сверху вниз:
- Слои таблицы/содержимого
- Пограничные и фоновые слои (пути)
При отключении группы слоев, содержащей шаблон PDF, в Illustrator границы и фон становятся видимыми.
К сожалению, мы не нашли способа разместить группу слоев шаблона 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 в конец всего, что будет?
Заранее спасибо!