我正在尝试将具有散点(带有或不带有线的HighCharts SVG)渲染为pdf文件。输出将使用ImageSVG()绘制线条,但不会渲染圆点。
我已经对SVG文件进行了一些手动编辑,发现ImageSVG的行为就像它不喜欢此渲染命令:
<path fill="darkblue" d="M99 188a4 4 0 1 1 0-.004z" class="highcharts-point highcharts-negative highcharts-color-0"/>
我将其转换为圆形渲染命令:
<circle cx="95" cy="188" r="4" fill="darkblue" />
它在TCPDF中呈现良好。
是否可以使ImageSVG正确渲染path命令以绘制点,还是在将文件发送到ImageSVG之前需要进行算法转换?
我目前正在研究一种变通方法,可以将所有路径命令都转换为圆形命令。看来它会工作-我还没有一个可行的算法。
它似乎也使点出现在与“路径”命令相同的位置,我必须从X坐标中减去4。
我已经用谷歌搜索是否有人遇到了这个问题,并搜索了stackoverflow但找不到任何东西。我还搜索了有助于转换的算法,但只发现人们想要以另一种方式转换-从圆到路径。
将svg呈现为pdf文件的通用代码。
pdf->ImageSVG($file='plot.svg', $x=15, $y=30, $w='', $h='', $link='http://www.tcpdf.org', $align='', $palign='', $border=1, $fitonpage=false);
highcharts svg太大,无法粘贴,因此以下是相关部分:
<g class="highcharts-series-group" data-z-index="3">
<g data-z-index=".1" class="highcharts-markers highcharts-series-0 highcharts-scatter-series highcharts-color-0">
<path fill="powderblue" d="M98 188a4 4 0 1 1 0-.004zM99 188a4 4 0 1 1 0-.004zM101 183a4 4 0 1 1 0-.004zM108 188a4 4 0 1 1 0-.004zM122 185a4 4 0 1 1 0-.004zM150 190a4 4 0 1 1 0-.004zM206 179a4 4 0 1 1 0-.004zM315 182a4 4 0 1 1 0-.004zM572 188a4 4 0 1 1 0-.004z" class="highcharts-point highcharts-negative highcharts-color-0"/>
</g>
</g>
如果我只是在Highcharts中做散点图,则图表输出为空-没有点。
如果我向散点图添加线,它将绘制线,而不是点。 (也使用path命令,但是TCPDF中的SVG渲染器可以很好地处理这些问题)
答案 0 :(得分:0)
这是我为这个问题找到的解决方案;
我切换到使用mPDF库。
代码更改将是非常重要的,但是与使用TCPDF相比,它的总体呈现效果更好。为了呈现SVG,我在HTML文档中创建了整个认证页面,然后使用mPDF中内置的“ WriteHTML”功能编写该页面。
它渲染点的path命令,而没有任何渲染错误。