vin*_*ini 2 php pdf svg pdf-generation tcpdf
我正在使用TCPDF将html转换为PDF。
$pdf = new TCPDF();
$pdf->SetPrintHeader(false);
$pdf->SetPrintFooter(false);
$pdf->AddPage();
$html = '<div>Some random html </div>';
$pdf->writeHTML($html, true, false, true, false, '');
$pdf->Output('/pdf/output.pdf','F');
Run Code Online (Sandbox Code Playgroud)
它像一种魅力。
但是我有一种情况,当(Dynamic)html也有SVG内联代码时。因此,我需要将具有SVG的html转换为PDF。但这行不通。下面是我的代码。
$pdf = new TCPDF();
$pdf->SetPrintHeader(false);
$pdf->SetPrintFooter(false);
$pdf->AddPage();
$html = '<div>Some random html <div style="width: 100px;"><svg viewBox="10 0 80 80">
<ellipse cx="240" cy="100" rx="220" ry="30" style="fill:purple" />
<ellipse cx="220" cy="70" rx="190" ry="20" style="fill:lime" />
<ellipse cx="210" cy="45" rx="170" ry="15" style="fill:yellow" />
Sorry, your browser does not support inline SVG.
</svg></div> </div>';
$pdf->writeHTML($html, true, false, true, false, '');
$pdf->Output('/pdf/output.pdf','F');
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,生成的PDF的所有html都以pdf打印,但是代替SVG时,它会显示“抱歉,您的浏览器不支持嵌入式SVG”。
有没有可能从包含SVG的html生成PDF?
更新,我发现http://www.pdfy.net/ 这个网站可以将基于html的svg转换为PDF。知道他们如何做吗?
编辑1:
好的,现在我发现mPDF支持内联SVG。它对此确实有很大的支持。但是 mPDF有它自己的问题,即对基本CSS的支持很少。例如 绝对位置,浮动不很好支持。
所以我再次遇到相同的问题,但有其他要求。一个支持内联svg的html到PDF转换的库,它还支持所有基本的CSS。
解决方案#1-保存svg到文件
您可以将自己的svg一部分保存HTML到文件中。然后,您可以按照此处所说的功能将svg图像添加到PDF中。$pdf->ImageSVG()
$pdf->ImageSVG($file='path/to/testsvg.svg', $x=15, $y=30, $w='', $h='', $link='http://www.tcpdf.org', $align='', $palign='', $border=1, $fitonpage=false);
$pdf->Write(0, $txt='', '', 0, 'L', true, 0, false, false, 0);
Run Code Online (Sandbox Code Playgroud)
解决方案2-内联添加 svg
您可以将内联存储svg到变量中(例如$svgString):
$svgString = '<svg viewBox="10 0 80 80">
<ellipse cx="240" cy="100" rx="220" ry="30" style="fill:purple" />
<ellipse cx="220" cy="70" rx="190" ry="20" style="fill:lime" />
<ellipse cx="210" cy="45" rx="170" ry="15" style="fill:yellow" />
Sorry, your browser does not support inline SVG.
</svg>';
Run Code Online (Sandbox Code Playgroud)
然后,您可以将$svgString变量添加到PDF中,如下所示:
$pdf->ImageSVG('@' . $svgString, $x=15, $y=30, $w='', $h='', $link='http://www.tcpdf.org', $align='', $palign='', $border=1, $fitonpage=false);
$pdf->Write(0, $txt='', '', 0, 'L', true, 0, false, false, 0);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9783 次 |
| 最近记录: |