我们目前正在将一个项目从 jdk1.5.0_22 迁移到 jdk1.7.0_51,将 tomcat 5.5.35 迁移到 tomcat 7.0.50,从 Ant 迁移到 Maven3,在一个单独的 SVN 分支中。
在新项目中,我们面临一个问题,即使用 jasperreports((jrxml 文件中的 <staticText>
)生成的 pdf 报告中的一些标签被截断,而在使用 jdk1.5、tomcat 5.5 和 Ant it 的项目中没有。
据此,我对问题的原因有以下假设:
- 专家;
- JDK 7 编译器;
- JDK 7 运行时;
- Tomcat ;
这些是我为调查问题所做的步骤:
- 我检查了 jasper 库(包括 itext 和 struts-jasper-reports-plugin)是否与 pom 中声明的版本匹配;
- 在 Maven 中,我运行 dependency:list 和 dependency:tree 来检查是否使用了不同版本的 jasperreports;
- 我使用不同的设置重建并重新部署了项目并比较了结果:
| jdk compiler | 1.7 | 1.7 | 1.5 | 1.5 | 1.5 | 1.7 | | runtime jdk | 1.7 | 1.7 | 1.5 | 1.7 | 1.7 | 1.7 | | Maven | Yes | No | Yes | Yes | Yes | Yes | | Tomcat | 7 | 7 | 5.5 | 5.5 | 7 | 7 | | JasperReports | 3.7.2 | 3.7.2 | 3.7.2 | 3.7.2 | 3.7.2 | 5.5 | | truncates | Y | Y | N | Y | Y | Y |
从上面的结果来看,问题的根源似乎是jdk1.7运行时。
从这个假设来看,有两种可能:
- 我们与 jasperreports 一起使用的 jdk 1.5 版本有一个错误,它忽略了 staticText 宽度,在以下 jdk 版本中得到修复;
- jasperreports 与 jdk 7 存在一些尚未修复的不兼容性;
使用 JasperSoft Studio 插件打开报告显示,确实,jrxml 文件中的文本被截断了,这表明它可能是我们没有意识到(并愉快地利用)的 jdk 1.5 错误。
无论如何,我想知道是否有人知道为什么会发生这种情况,是否有一种方法可以避免截断文本而不必编辑和重新编译我们拥有的所有报告。
谢谢!
最佳答案
经过更多的探索,我找到了一种方法:将 staticText 更改为 textField 并包括 isStretchWithOverflow="true"。
这将使我们能够快速调整所有报告,而无需逐一调整它们的大小。
然后,我们将在不影响我们的客户的情况下,打开工单并逐一调整报告。
关于java - 为什么 JasperReports 将 pdf 文本从 jdk 1.5 截断到 jdk1.7?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21710727/