问题:在某些情况下,现有的系统会在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/

10-09 10:07