JasperReports:软连字符支持

时间:2015-11-17 07:07:03

标签: java jasper-reports hyphen

问题:在某些情况下,在pdf报告中打印用户输入的内容(使用多种语言)的现有系统最终会错误地破坏单词,例如"exampl-e"

软连字符,是一个特殊的不可见符号,放在单词之间,当一个单词不适合时,必须打破该符号将暗示系统有意义进行中断。

如果用户输入了"exam<theMagicSymbol>ple",那么如果该字词被破坏,则会像"examp-ple"一样。

问题:jasperReprots中是否存在任何现有解决方案?

注意我是这个库的新手,但我找不到任何接近软包支持的东西......

1 个答案:

答案 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在类路径中。

玩得开心