Jasper reports 用最新的iText 7.0.1替换JasperReport iText 2.1.7

Jasper reports 用最新的iText 7.0.1替换JasperReport iText 2.1.7,jasper-reports,itext,Jasper Reports,Itext,我们正在使用JasperReport6.1.0,它依赖于com.lowagie:itext:jar:2.1.7.js2。看起来iText 2.1.7有IP问题,iText要求所有用户使用需要商业许可证的最新版本。因此,我们想购买iText许可证。现在iText的最新版本是7.0.1。我尝试通过以下步骤用最新的iText 7.0.1替换JasperReport的iText 2.1.7: 1.排除pom.xml中的默认itext 2.1.7依赖项 net.sf.jasperreports jasp

我们正在使用JasperReport6.1.0,它依赖于com.lowagie:itext:jar:2.1.7.js2。看起来iText 2.1.7有IP问题,iText要求所有用户使用需要商业许可证的最新版本。因此,我们想购买iText许可证。现在iText的最新版本是7.0.1。我尝试通过以下步骤用最新的iText 7.0.1替换JasperReport的iText 2.1.7:

1.排除pom.xml中的默认itext 2.1.7依赖项

net.sf.jasperreports
jasperreports
6.1.0
com.lowagie
文字
...
2.在pom.xml中添加新的iText jar

com.itextpdf
条形码
7.0.1
com.itextpdf
亚洲字体
7.0.1
com.itextpdf
形式
7.0.1
com.itextpdf
连字符
7.0.1
com.itextpdf
木卫一
7.0.1
com.itextpdf
内核
7.0.1
com.itextpdf
布局
7.0.1
com.itextpdf
pdfa
7.0.1
com.itextpdf
签名
7.0.1
3.运行mvn和测试报告功能,我得到以下错误: 2016-11-17 14:43:36520错误[c.i.c.d.DeferreOperationManager][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…”。 我试图解压新的iText7.0.1JAR,这些类在包“com.itextpdf…”中


如何让JasperReport调用新的iText jar?

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

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

您可以在此处观看有关此决定的更多详细信息的视频:

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


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

“如何让JasperReport调用新的iText jar?”-重写使用iText的JasperReport类!说真的,你不想说你只是简单地用一个主要部分增加了5(2.1.7乘以7.0.1)的版本来替换依赖项,并期望一切都能开箱即用,是吗?不仅类的包已经改变,7.x API是一个完全的重写,兼容性被设计打破,以摆脱许多旧的罪恶。有人在Jasper reports网站上问了同样的问题:。如果您观看该页面,看看是否能从维护Jasper Reports的人员那里得到答案,这可能会很有用。升级到iText 7,这是一个完全的重写,不是一个好的重写,将彻底破坏应用程序中的所有内容。你真正想要的是一个现代的解决方案,它不需要你学习整个PDF标准+iText巫毒,就像谷歌的傀儡程序一样,它使用Chromium渲染引擎获取HTML和CSS。Jasperreports确实有一个itext7 PDF导出器的repo。感谢Bruno的回复。另外一个问题,如果我们继续在JasperReport中使用iText 2.1.7,是否存在IP问题?iText常见问题解答对此进行了详细解释:
<dependency>
  <groupId>net.sf.jasperreports</groupId>
  <artifactId>jasperreports</artifactId>
  <version>6.1.0</version>
  <exclusions>
    <exclusion>
      <groupId>com.lowagie</groupId>
      <artifactId>itext</artifactId>
    </exclusion>
    ...
<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>