XSLT -> FO を使用して PDF を生成しています。
列内のテキストが列のサイズを超えていて、テキストにスペースがない場合、テキストは次のセルまたは表の外にはみ出します。
テキストを同じセル内に配置したい。
よろしくお願いします、スウェサ
XSLT -> FO を使用して PDF を生成しています。
列内のテキストが列のサイズを超えていて、テキストにスペースがない場合、テキストは次のセルまたは表の外にはみ出します。
テキストを同じセル内に配置したい。
よろしくお願いします、スウェサ
ゼロ幅のスペース文字 (U+200B、HTML エンティティ ) を挿入することで、テキストを単語に分割できます。その後、次の位置で改行が発生します。
<xsl:template name="split_value">
<xsl:param name="value"/>
<xsl:param name="max_length"/>
<xsl:variable name="ret">
<xsl:value-of select="substring($value, 1, $max_length)"/>
<xsl:if test="string-length($value) > $max_length">
<xsl:value-of select="'​'"/>
<xsl:call-template name="split_value">
<xsl:with-param
name="value"
select="substring($value, $max_length + 1)"
/>
<xsl:with-param
name="max_length"
select="$max_length"
/>
</xsl:call-template>
</xsl:if>
</xsl:variable>
<xsl:value-of select="$ret"/>
</xsl:template>
注: テンプレートを拡張して、$max_length の連続する文字の間に空白が含まれていないテキストのみを分割するようにしたい場合があります。
これがテストケースです。
入力 XML:
<data>0123456789</data>
スタイルシート (HTML を生成):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="xsl"
>
<xsl:template match="/">
<html>
<body
style="font-family: Arial; font-size: 12pt; font-weight: normal"
>
<table width="4cm">
<xsl:for-each select="/data">
<tr><td>
<xsl:call-template name="split_value">
<xsl:with-param
name="value"
select="text()"
/>
<xsl:with-param
name="max_length"
select="number(4)"
/>
</xsl:call-template>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
可能であれば、余分な文字を切り捨てます。xslt の length() および substring() 関数を使用します。また、切り捨てた場合にテキスト全体を表示するためのツールチップまたは何かを提供することもできます