问题:现有系统在 PDF 报告中打印用户输入的内容(以多种不同语言),在某些情况下最终会错误地断词,例如 "exampl-e"
.
软连字符是一种特殊的隐形符号,放置在单词之间,当单词不合适并且必须被打破时,该符号会提示系统在哪里有意义进行打破。
如果用户输入 "exam<theMagicSymbol>ple"
那么如果这个词被拆掉的话就会像 "examp-ple"
.
问题:jasperReprots 中是否有现有的解决方案?
注意,我是这个库的新手,但我找不到任何接近软包装支持的东西......
最佳答案
最简单的方法是直接使用textFieldExpression
(在您的示例中,在打印文本之前使用正则表达式 "<[^>]*>"
)es。
<textFieldExpression><![CDATA[$F{field1}.replaceAll("<[^>]*>", "")]]></textFieldExpression>
其他解决方案是:
关于碧 Jade 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>
创建java类JasperReportTextHandler
包装中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/