java - JasperReports 中的软连字符支持

标签 java jasper-reports

问题:现有系统在 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/

相关文章:

java - 带数字的空菱形

java - Java 中的 try 是做什么的?

java - 为什么我的 Java 应用程序看不到 *.jrxml?

java - 将数据传递到子报表

jasper-reports - 数字格式化时如何反转逗号和点

java - 如何在 iReport 中用逗号替换点?

java - 如何将正确的表达式写入 boolean 值? (不能从 boolean 值转换为 boolean 值)

java - 将喜欢的方法添加到 IntelliJ 中的静态导入?

java - 克隆复杂的 Hibernate 实体

java - GridView 点击移动图像位置