Die Anzeige von SVG mit XSLFO
Erste Frage von mir; ich bin momentan auf der Festsetzung einer Grafik-service, verwendet XSLFO konvertieren unsere syntax zu FO, und konvertiert Sie zu PDF-Datei in das Ende.
Bisher haben wir die Verwendung von PNG-Grafiken aus dem web im PDF-Exporte, aber das schafft wirklich hässliche Ergebnisse, also haben wir beschlossen zu gehen mit SVG nach PDF statt.
Jedoch die SVG scheint nicht die Waage in die SVG-canvas richtig.
Hier ist die syntax vor der Ausführung in XSLFO:
<img src="someimage.svg">
Und hier ist die XSLFO ich bin mit:
<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>
Die SVG scheint in der PDF, und es scheint sich innerhalb der Leinwand, aber aus irgendeinem Grund kann ich nicht bekommen, es richtig zu skalieren. Es ist nur wirklich, wirklich riesig, und das Ergebnis ist eine extrem beschnittene version des SVG.
Ich bin keine Vorschläge hier - gibt es hier jemand, der Erfahrung damit hat dieser?
PS: Das Bild ist erstellt mit der neuesten version der Batik -, und die Breite und die Höhe richtig eingestellt ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigentlich instream-foreign-object nicht zu sein scheinen in der Lage zu skalieren SVG überhaupt nicht, auch nicht mit der richtigen Leinwand gesetzt. Durch das einstellen der richtigen Leinwand, auf der SVG -, fo:external-Grafik hat den trick 😉
Vielen Dank Jungs, dass ich Eure Tipps 🙂 Hier ist was funktioniert:
Es ist groß, weil die fo:instream-foreign-object hat eine große Breite und Höhe; wenn Sie ein Anfänger in XSL-FO, Sie sollten versuchen, die Ecrion Designer - Sie können Bearbeiten XSLFO optisch und in der Größe ändern mit der Maus.
Prost!