TCPDF和某些SVG无法正确呈现

时间:2018-10-30 16:28:30

标签: php svg tcpdf

我正在php服务器(https://tcpdf.org/examples/example_058/)上尝试TCPDF和示例058。 该示例本身效果很好。我下载了其他SVG文件,以尝试是否一切正确,但是其中一些无法正确呈现或完全损坏。

在示例058代码中,我更改了两件事: 1)svg文件路径 2)高度和宽度分别为100和100

这是我得到的破碎的SVG渲染之一,在Wikipedia上有Firefox徽标: On the left, the SVG rendered in Chrome, on the right, the pdf with Firefox logo inside

我正在使用PHP 7.1.x和TCPDF 6.2.25。是TCPDF中的错误还是SVG文件中的错误?

1 个答案:

答案 0 :(得分:1)

我建议尝试切换到mPDF库。我本人在使用TCPDF库时遇到了很多问题,大多数问题都可以通过切换到mPDF库来解决。

我发现使用它的最佳方法是生成一个HTML文档,包括您的svg图像资源。它呈现了我在该项目中必须使用的所有奇怪的unicode字符,并且没有给我带来太多的布局或呈现问题。它也正在积极维护。自2011年以来,TCPDF尚未更新。

$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');