このアプローチを使用して、xsl トランスフォーマーで画像を作成しています: XSLT: base64 データを画像ファイルに変換します。
私の問題は、作成されたイメージを参照する IMG タグを作成する方法です。これが私がやったことです:
<!-- CREATE TEMP IMAGE -->
<xsl:variable name="b64" select="b64:new(string(./swe:Text/swe:value))"/>
<xsl:variable name="fos" select="fos:new(string('./temp.jpeg'))"/>
<xsl:value-of select="fos:write($fos, b64:getBinaryValue($b64))"/>
<xsl:value-of select="fos:close($fos)"/>
<a>
<xsl:attribute name="href">
<xsl:value-of select="concat('./temp', '.jpeg')"/>
</xsl:attribute>
<img>
<xsl:attribute name="src">
<xsl:value-of select="concat('./temp', '.jpeg')"/>
</xsl:attribute>
<xsl:attribute name="align">TOP</xsl:attribute>
<xsl:attribute name="width">100</xsl:attribute>
<xsl:attribute name="height">75</xsl:attribute>
</img>
</a>
上記の出力を取得して JTextPane に表示していますが、画像は常に壊れています。
相対パスの問題だと思いますが、xsl 内から絶対パスを取得する方法がわかりません。
編集:わかりました、JTextPanesがそれを処理できないため、imgタグで相対的な画像を参照できないことがわかりました。以下を使用して、これを機能させることができました。
<xsl:variable name="b64" select="b64:new(string(./swe:Text/swe:value))"/>
<xsl:variable name="fos" select="fos:new(string(concat('/temp/', @name, '.jpeg')))"/>
<xsl:value-of select="fos:write($fos, b64:getBinaryValue($b64))"/>
<xsl:value-of select="fos:close($fos)"/>
<img>
<xsl:attribute name="src">
<xsl:value-of select="concat('file:///C:/temp/', @name, '.jpeg')"/>
</xsl:attribute>
<xsl:attribute name="align">MIDDLE</xsl:attribute>
<xsl:attribute name="width">200</xsl:attribute>
<xsl:attribute name="height">150</xsl:attribute>
</img>
しかし、私は本当にそれが相対的である必要があります
システム定義の一時ディレクトリにアクセスする必要があります。
誰もこれの方法を知っていますか?