我有以下svg文件:
<svg></svg>
呈现的
但是,通过使用tcpdf($ pdf-> imageSVG()),我得到了一个呈现以下内容的pdf文件:
答案 0 :(得分:1)
很遗憾,该项目不再得到支持,尽管这是我见过的最出色的工作之一。对于仍在使用它并遇到此问题的用户,问题在于根据SVG specs, the "Z" command:
子路径中的..导致从当前位置绘制一条自动直线 指向当前子路径的起始点。
这应该将下一个命令的相对路径“重置”到子路径的开头。 TCPDF没有实现这部分。它只是关闭路径,但永远不会将笔移到子路径的起点,这是下一条命令应从此处开始的地方。
为解决此问题,我仅在受保护的 SVGPath 函数的开头创建了两个变量,然后在“ M”(移动)开关中设置了它们的值,以存储每个路径或子路径。
然后,在“ Z”开关中,我只是简单地根据规格说明在存储点绘制了一条线。我已经在不同的SVG中进行了测试,并且效果很好。这是代码。
对于“ M”:
case 'M': { // moveto
foreach ($params as $ck => $cp) {
if (($ck % 2) == 0) {
$x = $cp + $xoffset;
} else {
$y = $cp + $yoffset;
if ($firstcmd OR (abs($x0 - $x) >= $minlen) OR (abs($y0 - $y) >= $minlen)) {
if ($ck == 1) {
$this->_outPoint($x, $y);
$firstcmd = false;
} else {
$this->_outLine($x, $y);
}
$x0 = $x;
$y0 = $y;
}
$xmin = min($xmin, $x);
$ymin = min($ymin, $y);
$xmax = max($xmax, $x);
$ymax = max($ymax, $y);
if ($relcoord) {
$xoffset = $x;
$yoffset = $y;
}
$start_x = $x;
$start_y = $y;
}
}
break;
对于“ Z”:
case 'Z': {
$x = $start_x;
$y = $start_y;
$this->_outLine($x, $y);
$this->_out('h');
break;
变量为: $ start_x 和 $ start_x ,您可以在函数开始时将每个变量初始化为0值,以避免在路径不正确的情况下出错。 t从移动到开始。
答案 1 :(得分:0)
SVDF标准没有在TCPDF中完全实现,因此并非所有SVG都可以在TCPDF内部正确呈现。在这种情况下,您要么需要使用SELECT Id from
(Select *, Row_number() over (partition by tvshow_id,season order by epnum desc) as ranking from tbl)c
Where ranking=1
(需要ImageMagick)来为您动态地对SVG进行栅格化,要么将SVG调整为可以使用的形式。
对于这个特定的文件,我怀疑路径的复杂性是问题所在。不过,我不确定。我为您制作了一个新的SVG文件,该文件可在最新版本的TCPDF中使用。 I saved it in a JSFiddle here.基本上,我走了这条路,然后使用InkScape将其分解为各个元素。
为此,我进入了转换组,选择了路径,最后从 Path 菜单中选择了“ Break Apart ”。