Joy*_*Guo 4 jasper-reports itext
我们使用的是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:
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.1.0</version>
<exclusions>
<exclusion>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
</exclusion>
...
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)
2016-11-17 14:43:36,520 ERROR [cicdDeferredOperationManager] [Thread-49]延迟操作的异常.操作UUID:2a647922-d6d0-450d-9b2d-4d97638ba03f.UI错误键:d9a16093-be20-4278-9f8b-93120c0a2231 - 错误:java.lang.NoClassDefFoundError:com/lowagie/text/SplitCharacter
看起来像JasperReport试图找到旧的iText类,其命名空间是"com.lowagie ...".我试图解压缩新的iText 7.0.1 jar,这些类在"com.itextpdf ..."包中.
如何让JasperReport调用新的iText jar?
你不能用iText 7替换iText 2.1.7,因为两个版本之间的差异太大了.我们知道有些人转而使用带有JasperReports的iText 5.这需要一些变化来JasperReports的如改变包装名称com.lowagie,以com.itextpdf(*),改变引用com.lowagie.text.Color到com.itextpdf.text.BaseColor.
在iText,我们注意到我们用iText 5进入了天花板.例如:我们使用文本存储文本char意味着每个字符仅使用2个字节存储.如果我们想支持印地语,这还不够.如果我们想要向iText添加对印度语的支持,我们必须重写完整的字体层.因为字体层是构建所有其余代码的基础,因此在iText 5中"替换字体层"将非常困难.因此我们决定重写完整的API.
您可以在此处观看有关此决定的详细视频:Devoxx 2016:"糟糕我打破了我的API"
然而:用iText 7替换iText 2.1.7的最大问题是JasperReports依赖于PdfGraphics2D我们尚未将该部分移植到iText 7(尚未).我们甚至可能决定不再移植该部分,因为如果您选择使用PdfGraphics2D(而PDF/UA变得越来越重要),则无法创建PDF/UA .
(*)2009年,我决定从包名中删除我的名字.当我第一次发布iText时,我只拥有lowagie.com域,并且我使用com.lowagie了所有我编写的Java代码的包.我没想到iText会如此成功.当每个人都开始使用iText时,每个人都开始亲自问我问题.我已经没有生命了.因此,我创建了一家公司,我们专业化了iText com.lowagie,而更为中立的com.itextpdf是其中一种专业化.
| 归档时间: |
|
| 查看次数: |
5318 次 |
| 最近记录: |