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 路径中。

玩得开心