2016-06-05 1 views
0

tcpdf를 사용하여 svg를 pdf로 변환하려고합니다.Sub SVG를 사용하여 SVDF를 TCPDF로 변환

<image xlink:href='subSvg.svg'/> 

하지만 난 항상 TCPDF에 의해 오류 메시지를 얻을 : 나는이 같은 $의 my_source에 인라인으로 삽입 된 다른 SVG 이미지가 될 때까지

$pdf->ImageSVG(
    $file=$my_source,... 

Everyting 작품을 잘 사용하고 있습니다. tvpdf에 svg 이미지를 삽입하는 경험이 있습니까?

업데이트 :

다시 시도해 보았습니다. 경고 일뿐입니다. PDF가 생성됩니다.) xml_parser_free (: 경고 : Tcdpf 만 서브 SVG의 무료 능숙에 문제가있다 (19)이 예는

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" 
width="300" height="300" 
viewBox="0 0 300 300" 
preserveAspectRatio="xMinYMin meet"> 
<desc>123456</desc> 
<g id="elements" fill="black" stroke="none"> 
<rect x="0" y="0" width="30" height="30" /> 
</g> 
</svg> 
subSvg.svg

입니다 22,913

라인에 tcpdf.php에 유효한 XML 파서 자원 아닙니다

svg 인라인 (data : image/svg + xml; utf8,)을 참조 할 수 있습니까?

<image xlink:href='@<svg ...'/> 
+0

어떤 오류 메시지가 있습니까? –

+0

나는 그것을 다시 시험해 보았다 : 단지 경고 일 뿐이다. PDF가 생성됩니다. Tcdpf는 sub svg의 무료 소스에만 문제가 있습니다. 경고 : xml_parser_free() : 19는 tcpdf.php의 22913에 유효한 XML 파서 리소스가 아닙니다 – Hauke

+0

subSvg.svg의 내용 –

답변

0

참조 된 SVG를 인라인하여 SVG 이미지를 사전 처리하는 것이 좋습니다. 다음은 XSLT 2.0을 사용 가능한 접근 방식의 초안입니다 :

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:svg="http://www.w3.org/2000/svg" 
    xmlns="http://www.w3.org/2000/svg" 
    xmlns:xlink="http://www.w3.org/1999/xlink" 
    version="2.0"> 

    <xsl:template match="node()|@*"> 
    <xsl:param name="attributes"/> 

    <xsl:copy> 
     <xsl:copy-of select="@*"/> 
     <xsl:copy-of select="$attributes"/> 
     <xsl:apply-templates select="node()"/> 
    </xsl:copy> 
    </xsl:template> 


    <xsl:template match="svg:image[matches(@xlink:href, '\.svg$')]"> 
    <xsl:variable name="imageUrl"> 
     <xsl:choose> 
     <xsl:when test="contains(@xlink:href, '//')"> 
      <xsl:value-of select="@xlink:href"/> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="concat(replace(base-uri(), '/[^/]+$', '/'), @xlink:href)"/> 
     </xsl:otherwise> 
     </xsl:choose> 
    </xsl:variable> 

    <xsl:variable name="imageDocument" select="document($imageUrl)"/> 

    <xsl:if test="not($imageDocument)"> 
     <xsl:message terminate="yes"> 
     <xsl:value-of select="concat('Could not find image ', $imageUrl)"/> 
     </xsl:message> 
    </xsl:if> 

    <xsl:apply-templates select="$imageDocument"> 
     <xsl:with-param name="attributes" select="(@x, @y, @width, @height, @transform)"/> 
    </xsl:apply-templates> 
    </xsl:template> 
</xsl:stylesheet> 

당신은 XSLT 2.0 프로세서를 사용하고 있는지

  • 확인은, (A PHP의 맥락에서 XSLT 2.0, this post 참조)
  • 참조 SVGs는
  • 외부,
  • SVGs가 서로 반복적으로 참조하지 마십시오 xlink:href 속성의 URL에서 XSLT 프로세서에 의해 액세스 할 수 있습니다 SVG는 CSS 및 스타일 속성을 사용하지 않으므로 내부 SVG의 원하지 않는 재 스타일링을 초래할 수 있습니다.
  • 인라이닝은 ID 충돌을 일으키지 않습니다. <use> 요소 나 필터를 깨십시오.

SVG 파일의 모양에 따라 XSLT에 정제가 필요할 수 있습니다. 마지막 포인트를 처리하기 위해 ID 및 ID 참조를 다시 작성합니다.

+0

흥미로운 아이디어! 나는 자동 변환이 필요 없다고 생각한다. 나는 하위 파일의 데이터를 파일에 직접 삽입 할 수있다. 그러나 이미지로 사용하는 것이 나에게 상당히 편안 할 것입니다. – Hauke

관련 문제