自从使用itext生成PDF以来,都很正常。itextpdf作为主要包,调用api生成,itext-asian亚洲包提供字体文件。
今天,再次使用,本地ok,用jetty。
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.9</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
但是,部署到测试环境,就提示错误。
[ERROR][2017-11-14 18:22:28.691]java.lang.NoSuchMethodError: com.itextpdf.text.pdf.PdfPTable.addCell(Lcom/itextpdf/text/pdf/PdfPCell;)Lcom/itextpdf/text/pdf/PdfPCell;[com.jd.zc.lifecycle.web.controller.IndexController:downloadPdf]
最开始以为是itextpdf和itext-asian 2个jar包冲突,但是试了N种可能,本地都ok,测试环境依旧有问题。
最终,让另外一个没用过itext的同事,思考了下。
这2个jar包,有相同的类,运行时然后导致了问题。
最终解决办法:
只配置1个就可以了。
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
这种方式有问题,asian的包更新不够,最新版本是2012年的5.2.0。
而itextpdf 官方的包,一直有更新。
如果想使用最新功能,就需要把itextpdf.jar放进去。
所以,这个问题依旧没有解决。
比较奇葩的是itext-asian.jar这个包的作者,为啥是 从itext的包里copy了很多代码,而不是引入font字体文件。
今天做下记录,今后不会再被坑了,等着下一个被坑的人来此地找答案。