0
SVG文字列を使用してベクターPDFを作成したいと思います。しかし、ImageMagick描画関数は常に '画像を描画できません'というエラーを返します。ImageMagick - "画像を描画できません" - SVGを使用
$image = new \Imagick();
$draw = new \ImagickDraw();
$draw->setVectorGraphics('<root>'.$svg.'</root>');
$image->newImage(1052, 697, $bg);
$image->setColorspace(\Imagick::COLORSPACE_CMYK);
$image->setImageResolution(300,300);
$image->setImageFormat('pdf');
$image->drawImage($draw);
file_put_contents('image.pdf', $image);
私はSVGソースからではなく、単純な図で試してみましたが、どちらもうまくいきませんでした。
誰かが助けてくれることを願っています。おかげ
マイSVG:あなたが持っているSVGの文字列がsetVectorGraphics()と互換性があるかどう
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1052" height="697" style="background-color: #fff" viewBox="0 0 1052 697" xml:space="preserve">
<desc>Created with Fabric.js 1.6.6</desc>
<defs></defs>
<line x1="NaN" y1="NaN" x2="NaN" y2="NaN" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1;" transform="translate(NaN NaN)"/>
<rect x="-50" y="-50" rx="0" ry="0" width="100" height="100" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(155,89,182); fill-rule: nonzero; opacity: 1;" transform="translate(576.5 399)"/>
<polygon points="-50 50,0 -50,50 50" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(241,196,15); fill-rule: nonzero; opacity: 1;" transform="translate(236.5 257)"/></svg>
私はそれは互換性がありませんだと思います。私はtoSVG()を使ってfabric.jsを渡しています 私のSVG文字列を追加しました – pape04
あなたのコードスニペットが機能しているので、あなたの質問に答えた場合は、これを解決策としてマークしてください。 – WEBjuju
はい、申し訳ありません。 SVG文字列を別の形式に変換するにはどうすればよいですか? – pape04