2016-10-27 4 views
0

SVG 문자열을 사용하여 벡터 PDF를 만들고 싶습니다. 그러나 ImageMagick draw 함수는 항상 '이미지를 그릴 수 없음'500 오류를 반환합니다.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> 

답변

0

이 궁금하다. 나는 getVectorGraphics() 사용 예제 here at php.net imagickdraw setvectorgraphics을 사용하고, 결과가 $의 SVG를 사용하여, 당신의 조각 작업을 할 수 있었다 : 나는 그것이 호환되지 않습니다 생각

$svg = "<drawing-wand/><clip-path/><clip-units>Undefined</clip-units><decorate>None</decorate><encoding/><fill>#00000000FFFF</fill><fill-opacity>1</fill-opacity><fill-rule>Evenodd</fill-rule><font/><font-family/><font-size>12</font-size><font-stretch>Undefined</font-stretch><font-style>Undefined</font-style><font-weight>0</font-weight><gravity>Undefined</gravity><stroke>#FFFFFFFFFFFF</stroke><stroke-antialias>1</stroke-antialias><stroke-dasharray/><stroke-dashoffset>0</stroke-dashoffset><stroke-linecap>Butt</stroke-linecap><stroke-linejoin>Miter</stroke-linejoin><stroke-miterlimit>10</stroke-miterlimit><stroke-opacity>0</stroke-opacity><stroke-width>1</stroke-width><text-align>Undefined</text-align><text-antialias>1</text-antialias><text-undercolor>#000000000000</text-undercolor><vector-graphics>fill '#FFFF00000000' 
circle 20,20 50,50 
fill '#00000000FFFF' 
circle 50,70 50,50 
rectangle 50,120 80,150 
</vector-graphics>"; 
$bg = new ImagickPixel("white"); 

$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); 
+0

합니다. fabric.js에서 toSVG()를 사용하여 전달합니다. 내 SVG 문자열을 추가했습니다. – pape04

+0

코드 스 니펫이 작동하므로 질문에 대답 해 주시면 솔루션으로 표시해 주시겠습니까? – WEBjuju

+0

예, 죄송합니다. SVG 문자열을 다른 형식으로 변환하려면 어떻게해야합니까? – pape04

관련 문제