使用TCPDF转换为PDF时,SVG变量显示未定义的索引

时间:2017-10-09 10:49:19

标签: php pdf canvas svg tcpdf

我有一个SVG文件。我正在尝试使用TCPDF下载为PDF文件。如果SVG文件中没有#,SVG将转换为PDF。问题是文件'#'。请建议我该怎么做。

canvas.svg:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1140" height="600" viewBox="0 0 1140 600" xml:space="preserve">
<desc>Created with Fabric.js 1.7.17</desc>
<defs>
</defs>
<rect x="0" y="0" width="1140" height="600" fill="#ffffff"></rect>
<g clip-path="url(#clipCircle)">
<image xlink:href="http://localhost/canvas/560.jpg" x="-235" y="-280" style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1;" width="470" height="560" preserveAspectRatio="none" transform="translate(235 280)"></image>
</g>
<clipPath id="clipCircle"><rect x="50" y="120" width="670" height="320" rx="40" ry="40"></rect></clipPath></svg>

pdf.php:

这是我用来以PDF格式下载文件的文件。

require_once('tcpdf_include.php');

// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetPrintHeader(false);
$pdf->SetPrintFooter(false);
$pdf->SetMargins(10, 10, 10, true);
// set font
$pdf->SetFont('helvetica', '', 10);

// add a page
$pdf->AddPage();



$pdf->ImageSVG($file='images/canvas.svg', $x=30, $y=100, $w='', $h=100, $link='', $align='', $palign='', $border=0, $fitonpage=false);


//Close and output PDF document
$pdf->Output('canvasoutput.pdf', 'D');

错误:

注意:未定义索引:第23043行D:\ xampp \ htdocs \ canvas \ TCPDF \ tcpdf.php中的clipCircle

警告:在第23044行的D:\ xampp \ htdocs \ canvas \ TCPDF \ tcpdf.php中为foreach()提供的参数无效 TCPDF错误:某些数据已经输出,无法发送PDF文件

1 个答案:

答案 0 :(得分:0)

svg文件在网页中有效,但在我转换为PDF时没有。我发现了问题。实际上clipPath应该包含在defs中。这是首选的解决方案。它也适用于TCPDF。

<强> canvas.svg:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1140" height="600" viewBox="0 0 1140 600" xml:space="preserve">
<desc>Created with Fabric.js 1.7.17</desc>
<defs>
//added Here
<clipPath id="clipCircle"><rect x="50" y="120" width="670" height="320" rx="40" ry="40"></rect></clipPath>
</defs>
<rect x="0" y="0" width="1140" height="600" fill="#ffffff"></rect>
<g clip-path="url(#clipCircle)">
<image xlink:href="http://localhost/canvas/560.jpg" x="-235" y="-280" style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1;" width="470" height="560" preserveAspectRatio="none" transform="translate(235 280)"></image>
</g>
</svg>