itext生成PDF,天坑

时间:2022-03-30 01:07:45


  自从使用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字体文件。


今天做下记录,今后不会再被坑了,等着下一个被坑的人来此地找答案。