【问题标题】:TCPDF and certains SVG not rendering correctlyTCPDF 和某些 SVG 无法正确呈现
【发布时间】:2023-03-14 09:35:01
【问题描述】:

我正在我的 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 文件中的错误?

【问题讨论】:

  • 为什么不在这里分享你的代码而不是描述你做了什么?
  • 这是一个常见的抱怨。您的问题很可能是由于 TCPDF 中 SVG 解析器/转换器的缺陷。我认为你能做的最好的事情就是用 TCPDF 提交一个错误。
  • 感谢您的回复。我没有分享代码,因为这与示例 058 的代码完全相同(参见第一个链接)。我更改了第 80 行: $pdf->ImageSVG($file='images/Mozilla_Firefox_logo_2013.svg', $x=30, $y=100, $w=100, $h=100, $link='', $align ='', $palign='', $border=0, $fitonpage=false);我会直接用 TCPDF 看。
  • 不久前我回答了一个类似的问题。 stackoverflow.com/a/51109754/395384 - 几乎可以肯定这是 TCPDF 的限制。你最好的选择是光栅化它。事先或setRasterizeVectorImages
  • 谢谢@EPB,我想我别无选择,只能进行光栅化

标签: php svg tcpdf


【解决方案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');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 2021-11-19
    • 2017-06-28
    • 2012-04-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多