问题:在某些情况下,在pdf报告中打印用户输入的内容(使用多种语言)的现有系统最终会错误地破坏单词,例如"exampl-e"
。
软连字符,是一个特殊的不可见符号,放在单词之间,当一个单词不适合时,必须打破该符号将暗示系统有意义进行中断。
如果用户输入了"exam<theMagicSymbol>ple"
,那么如果该字词被破坏,则会像"examp-ple"
一样。
问题:jasperReprots中是否存在任何现有解决方案?
注意我是这个库的新手,但我找不到任何接近软包支持的东西......
答案 0 :(得分:1)
最简单的方法是直接使用textFieldExpression
(在您的示例中使用正则表达式"<[^>]*>"
,然后再打印文本)es。
<textFieldExpression><![CDATA[$F{field1}.replaceAll("<[^>]*>", "")]]></textFieldExpression>
其他解决方案是:
在jasper 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>
会导致测试,并且所有文本格式代码都将被删除(例如,表格,img ecc)。
最终解决方案
如果您仍然不满意,则需要更高级的代码来设置文本格式,解决方案是您自己的类格式化文本。
简单示例:
<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>
使用静态方法在包JasperReportTextHandler
中创建java类com.my.package
:
class JasperReportTextHandler{
public static String format(String value){
//... do your stuff regEx, split...
return value;
}
}
执行报告时,请确保JasperReportTextHandler
在类路径中。
玩得开心