TCPDF и некоторые SVG не рендерится правильно - PullRequest
0 голосов
/ 30 октября 2018

Я пробую TCPDF и пример 058 на моем php-сервере (https://tcpdf.org/examples/example_058/). Сам пример прекрасно работает. Я скачал другие SVG-файлы, чтобы проверить, все ли правильно, но некоторые из них отображаются неправильно или полностью повреждены.

В коде примера 058 я изменил 2 вещи: 1) Путь файла SVG 2) высота и ширина до 100 и 100

Вот один из сломанных SVG-рендерингов с логотипом Firefox, найденным в Википедии: Слева, SVG, визуализированный в Chrome, справа, PDF с логотипом Firefox внутри

Я использую PHP 7.1.x и TCPDF 6.2.25. Это ошибка в TCPDF или ошибка в файле SVG?

1 Ответ

0 голосов
/ 17 мая 2019

Рекомендую попробовать переключиться на библиотеку mPDF . У меня были многочисленные проблемы с библиотекой TCPDF, и большинство из них было решено путем переключения на библиотеку mPDF.

Наилучший способ использовать его, как я обнаружил, - генерировать HTML-документ, включая ваши ресурсы изображений SVG. Он отображает все странные символы Юникода, которые я должен использовать для этого проекта, и не дает мне почти столько же проблем с размещением или рендерингом. Это также активно поддерживается. TCPDF не обновлялся с того, что я могу сказать с 2011 года.

$mPdf = new Mpdf();

Например:

$html .= sprintf('<div id="svgPlot" style="position: fixed; top: %smm;">', $y);
$html .= '<svg> (blob of svg text) </svg>';
$html .= '</div>';

Вы также можете использовать их в HTML-документе следующим образом:

        $this->html .= sprintf('<div id="logo" style="left: -9mm; top: %smm; height:45mm; position: fixed;">', strval((int)$y + 1));
        $this->html .= sprintf('<img src="%s" alt="LOGO">', $logo); // $logo is resource location on your server for SVG logo file.
        $this->html .= '</div>';

Чтобы затем завершить запись, вы должны использовать:

$mPdf->WriteHTML($html);

Тогда:

$mPdf->Output($localFileName, 'D');
...