7

私からの最初の質問。現在、XSLFOを使用して構文をFOに変換し、最終的にPDFに変換するグラフ作成サービスを修正しています。

以前は、PDFエクスポートでWebからのPNGグラフを使用していましたが、これは非常に見苦しい結果を生成するため、代わりにSVGforPDFを使用することにしました。

ただし、SVGはSVGキャンバスに適切に拡大縮小されていないようです。

XSLFOに遭遇する前の構文は次のとおりです。

<img src="someimage.svg">

そして、これが私が使用しているXSLFOです:

   <xsl:template match="img">
      <fo:block space-after="12pt">
          <fo:instream-foreign-object width="20cm" height="15cm" content-width="scale-to-fit" content-height="scale-to-fit" scaling="uniform" background-color="#cccccc">
          <svg:svg x="0" y="0" width="100" height="100" viewBox="0 0 100 100">
                <svg:image x="0" y="0" width="100" height="100">
                    <xsl:if test="@src">
                       <xsl:attribute name="xlink:href">
                          <xsl:choose>
                             <xsl:when test="starts-with(@src, 'http://')">
                                <xsl:value-of select="@src"/>
                             </xsl:when>
                             <xsl:when test="starts-with(@src, 'https://')">
                                <xsl:value-of select="@src"/>
                             </xsl:when>
                             <xsl:otherwise>
                                <xsl:value-of select="concat($baseurl, @src)"/>
                             </xsl:otherwise>
                          </xsl:choose>
                       </xsl:attribute>
                    </xsl:if>
                   </svg:image>
            </svg:svg>
         </fo:instream-foreign-object>
      </fo:block>
   </xsl:template>

SVGはPDFに表示され、キャンバス内に含まれているように見えますが、何らかの理由でSVGを適切に拡大縮小することができません。それは本当に、本当に巨大であり、その結果、SVGの非常にトリミングされたバージョンになります。

私はここで提案が不足しています-これを経験した人はいますか?

PS:画像は最新バージョンのBatikを使用して作成されており、幅と高さが適切に設定されています。

4

2 に答える 2

3

実際、適切なキャンバス セットを使用しても、instream-foreign-object は SVG をまったくスケーリングできなかったようです。SVG に正しいキャンバスを設定することで、fo:external-graphic がうまくいきました ;-)

ヒントを教えてくれてありがとう:-) うまくいったのは次のとおりです。

    <fo:external-graphic content-width="25cm" content-height="16cm">
        <xsl:if test="@src">
            <xsl:attribute name="src">
                <xsl:choose>
                    <xsl:when test="starts-with(@src, 'http://')">
                        <xsl:value-of select="concat('url(',@src,')')"/>
                    </xsl:when>
                    <xsl:when test="starts-with(@src, 'https://')">
                        <xsl:value-of select="concat('url(',@src,')')"/>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:value-of select="concat('url(',$baseurl, @src,')') + ')'"/>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:attribute>
        </xsl:if>
    </fo:external-graphic>
于 2010-03-03T13:03:32.547 に答える
1

fo:instream-foreign-object の幅と高さが大きいため、サイズが大きくなります。XSL-FO の初心者の方は、Ecrion Designerを試してください。XSLFO を視覚的に編集し、マウスを使用してサイズを変更できます。乾杯!

于 2010-02-27T16:45:39.747 に答える