首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JasperReport iText 2.1.7替换为最新的iText 7.0.1

将JasperReport iText 2.1.7替换为最新的iText 7.0.1
EN

Stack Overflow用户
提问于 2016-11-17 10:22:24
回答 1查看 11.3K关注 0票数 6

我们使用的是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依赖项

代码语言:javascript
复制
<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.在iText中添加新的pom.xml jars

代码语言:javascript
复制
<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异常.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.1jar,类在包“com.itextpdf.”中。

如何让JasperReport调用新的iText jar?

EN

回答 1

Stack Overflow用户

发布于 2016-11-17 10:37:21

您不能将iText 2.1.7替换为iText 7,因为这两个版本之间的差异太大了。我们确实知道有一些人开始在JasperReports中使用JasperReports 5。这需要对JasperReports进行许多更改,例如将包名从com.lowagie更改为com.itextpdf (*),并将对com.lowagie.text.Color的引用更改为com.itextpdf.text.BaseColor

在iText,我们注意到我们正在使用iText 5达到极限。例如:我们使用char存储文本,这意味着每个字符只使用2个字节存储。如果我们想支持印地语,那是不够的。如果我们想要向iText添加对Indic语言的支持,我们必须重写完整的字体层。iText 5中的“替换字体层”非常困难,因为字体层是构建所有其余代码的基础。因此,我们决定重写完整的API。

您可以在这里观看有关此决定的更详细的视频:Devoxx 2016:“哎呀我弄坏了我的API”

但是,将iText 2.1.7替换为iText 7的最大问题是,JasperReports依赖于PdfGraphics2D,而且我们还没有将该部分移植到iText 7(目前为止)。我们甚至可能决定不再移植这个部分,因为如果您选择使用PdfGraphics2D (而PDF/UA变得越来越重要),就不可能创建PDF/UA。

(*) 2009年,我决定从包名中删除我的名字。当我第一次发布iText时,我只拥有lowagie.com域,我编写的所有Java代码都使用了com.lowagie包。我没想到iText会如此成功。当每个人开始使用iText时,每个人都开始问我个人问题。我再也没有生活了。因此,我创建了一家公司,我们使iText专业化,用更加中立的com.itextpdf取代com.lowagie就是其中之一。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40652274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档