JasperReports:软连字符支持
JasperReports : soft hyphen support
问题:在某些情况下,在 pdf 报告中打印用户输入内容(以多种不同语言)的现有系统最终会错误地断词,例如 "exampl-e"
。
软连字符,是一种特殊的不可见符号,它放在单词之间,当单词不合适且必须断开时,该符号将提示系统在何处断开是有意义的。
如果用户输入 "exam<theMagicSymbol>ple"
,那么如果单词要被打断,它就会像 "examp-ple"
。
问题:jasperReprots 中是否有针对此问题的现有解决方案?
注意我是这个库的新手,但我找不到任何接近软包装支持的东西...
最简单的方法是直接使用 textFieldExpression
(在您的示例中,在打印文本之前使用正则表达式 "<[^>]*>"
)es.
<textFieldExpression><![CDATA[$F{field1}.replaceAll("<[^>]*>", "")]]></textFieldExpression>
其他解法有:
在碧玉 textField
你指定 markup="html"
示例:
<textField>
<reportElement x="0" y="4" width="100" height="20" uuid="2cfd9640-f7ce-4bbe-a024-7b1b53d3b72b"/>
<textElement markup="html">
<paragraph lineSpacing="Single"/>
</textElement>
<textFieldExpression><![CDATA[$F{field1}]]></textFieldExpression>
</textField>
这将像处理文本一样处理文本 html,所有文本格式化代码都将作为 es 使用。 <b>Test</b>
将导致它 Test 并且所有 none 文本格式代码将被删除(es. table, img ecc)。
最终解
如果您仍然不满意,您需要更高级的代码来格式化您的文本,解决方案是 您自己的 class 来格式化文本。
简单示例:
<textField>
<reportElement x="0" y="4" width="100" height="20" uuid="2cfd9640-f7ce-4bbe-a024-7b1b53d3b72b"/>
<textElement markup="none">
<paragraph lineSpacing="Single"/>
</textElement>
<textFieldExpression><![CDATA[com.my.package.JasperReportTextHandler.format($F{field1})]]></textFieldExpression>
</textField>
使用静态方法在包 com.my.package
中创建 java class JasperReportTextHandler
:
class JasperReportTextHandler{
public static String format(String value){
//... do your stuff regEx, split...
return value;
}
}
执行报告时,请确保 JasperReportTextHandler
在 class 路径中。
玩得开心
问题:在某些情况下,在 pdf 报告中打印用户输入内容(以多种不同语言)的现有系统最终会错误地断词,例如 "exampl-e"
。
软连字符,是一种特殊的不可见符号,它放在单词之间,当单词不合适且必须断开时,该符号将提示系统在何处断开是有意义的。
如果用户输入 "exam<theMagicSymbol>ple"
,那么如果单词要被打断,它就会像 "examp-ple"
。
问题:jasperReprots 中是否有针对此问题的现有解决方案?
注意我是这个库的新手,但我找不到任何接近软包装支持的东西...
最简单的方法是直接使用 textFieldExpression
(在您的示例中,在打印文本之前使用正则表达式 "<[^>]*>"
)es.
<textFieldExpression><![CDATA[$F{field1}.replaceAll("<[^>]*>", "")]]></textFieldExpression>
其他解法有:
在碧玉 textField
你指定 markup="html"
示例:
<textField>
<reportElement x="0" y="4" width="100" height="20" uuid="2cfd9640-f7ce-4bbe-a024-7b1b53d3b72b"/>
<textElement markup="html">
<paragraph lineSpacing="Single"/>
</textElement>
<textFieldExpression><![CDATA[$F{field1}]]></textFieldExpression>
</textField>
这将像处理文本一样处理文本 html,所有文本格式化代码都将作为 es 使用。 <b>Test</b>
将导致它 Test 并且所有 none 文本格式代码将被删除(es. table, img ecc)。
最终解
如果您仍然不满意,您需要更高级的代码来格式化您的文本,解决方案是 您自己的 class 来格式化文本。
简单示例:
<textField>
<reportElement x="0" y="4" width="100" height="20" uuid="2cfd9640-f7ce-4bbe-a024-7b1b53d3b72b"/>
<textElement markup="none">
<paragraph lineSpacing="Single"/>
</textElement>
<textFieldExpression><![CDATA[com.my.package.JasperReportTextHandler.format($F{field1})]]></textFieldExpression>
</textField>
使用静态方法在包 com.my.package
中创建 java class JasperReportTextHandler
:
class JasperReportTextHandler{
public static String format(String value){
//... do your stuff regEx, split...
return value;
}
}
执行报告时,请确保 JasperReportTextHandler
在 class 路径中。
玩得开心