问题:在某些情况下,现有的系统会在pdf报告中打印用户输入的内容(以多种不同的语言显示),最终会错误地打断单词,例如"exampl-e"
。
软连字号是一种特殊的不可见符号,它置于单词之间,并且当单词不合适时必须将其断开,该符号将提示系统在进行断开时有意义。
如果用户输入"exam<theMagicSymbol>ple"
,那么如果要打断单词,则将类似于"examp-ple"
。
问题:jasperReprots中是否有针对此的现有解决方案?
请注意,我是这个库的新手,但是我找不到任何支持软包装的东西...
最佳答案
最简单的方法是直接使用textFieldExpression
es(在您的示例中,在打印文本之前使用regex "<[^>]*>"
)。
<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>
将导致它测试,并且所有无文本格式的代码都将被删除(例如表,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
在类路径中即可。玩得开心
关于java - JasperReports:软连字符支持,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33751043/