【发布时间】:2017-03-31 20:10:05
【问题描述】:
我们正在使用 JasperReport 6.1.0,它依赖于 com.lowagie:itext:jar:2.1.7.js2。看起来 iText 2.1.7 有 IP 问题,并且 iText 要求所有用户使用需要商业许可证的最新版本。所以我们想购买 iText 许可证。现在 iText 最新版本是 7.0.1。我尝试按照以下步骤将 JasperReport 的 iText 2.1.7 替换为最新的 iText 7.0.1:
1。在 pom.xml 中排除默认的 itext 2.1.7 依赖
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.1.0</version>
<exclusions>
<exclusion>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
</exclusion>
...
2。在 pom.xml 中添加新的 iText jar
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>barcodes</artifactId>
<version>7.0.1</version>
<!-- barcodes depends on kernel -->
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>font-asian</artifactId>
<version>7.0.1</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>forms</artifactId>
<version>7.0.1</version>
<!-- forms depends on kernel and layout -->
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>hyph</artifactId>
<version>7.0.1</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>io</artifactId>
<version>7.0.1</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>kernel</artifactId>
<version>7.0.1</version>
<!-- kernel depends on io -->
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>layout</artifactId>
<version>7.0.1</version>
<!-- layout depends on kernel -->
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>pdfa</artifactId>
<version>7.0.1</version>
<!-- pdfa depends on kernel -->
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>sign</artifactId>
<version>7.0.1</version>
<!-- sign depends on kernel, layout and forms -->
</dependency>
3。运行 mvn 和测试报告功能,我得到以下错误:
2016-11-17 14:43:36,520 错误 [c.i.c.d.DeferredOperationManager] [Thread-49] 延迟操作异常。操作 UUID:2a647922-d6d0-450d-9b2d-4d97638ba03f。 UI 错误键:d9a16093-be20-4278-9f8b-93120c0a2231 - 错误:java.lang.NoClassDefFoundError: com/lowagie/text/SplitCharacter
看起来 JasperReport 正在尝试查找命名空间为“com.lowagie...”的旧 iText 类。 我试图解压缩新的 iText 7.0.1 jar,这些类在包“com.itextpdf ...”中。
如何让 JasperReport 调用新的 iText jar?
【问题讨论】:
-
“如何让 JasperReport 调用新的 iText jar?” - 重写使用 iText 的 JasperReport 类! 说真的,你不想说你只是用主要部分增加 5(2.1.7 乘 7.0.1)的版本替换依赖项并期望一切都可以开箱即用,这样做你?不仅类的包发生了变化,7.x API 也完全重写,兼容性被设计打破以摆脱许多旧罪。
-
有人在 Jasper 报告网站上提出了同样的问题:community.jaspersoft.com/questions/1035351/itext7-support。如果您观看该页面,看看它是否从维护 Jasper 报告的人那里得到答案,这可能会很有用。
-
升级到 iText 7,这是一个彻底的重写,而不是一个好的版本,将会破坏应用程序中的所有内容。您真正想要的是一个现代解决方案,它不需要您学习整个 PDF 标准 + iText voodoo,例如 Google 的 Puppeteer,它使用 Chromium 渲染引擎获取 HTML 和 CSS。
-
Jasperreports 确实有一个带有 itext7 PDF 导出器的存储库。
标签: jasper-reports itext