Отображение SVG, использующего XSLFO

Первый вопрос от меня; я в настоящее время фиксирую сервис построения графика, который использует XSLFO для преобразования нашего синтаксиса в FO и преобразования его к PDF в конце.

Ранее мы использовали графики PNG от сети в экспорте PDF, но это создает действительно ужасные результаты, таким образом, мы решили пойти с SVG для PDF вместо этого.

Однако 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.

У меня заканчиваются предложения здесь - там кто-либо здесь, который имеет опыт с этим?

PS: изображение создается с помощью новейшей версии Батика, и ширина и высота установлены правильно.

7
задан hnilsen 26 February 2010 в 09:11
поделиться

2 ответа

На самом деле, внешний объект-поток-поток вообще не мог масштабировать 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>
3
ответ дан 7 December 2019 в 12:19
поделиться

Он большой, потому что fo: instream-foreign-object имеет большую ширину и высоту; Если вы новичок в XSL-FO, попробуйте Ecrion Designer - вы можете редактировать XSLFO визуально и изменять размер с помощью мыши. Ура!

2
ответ дан 7 December 2019 в 12:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: