JAVA识别电子发票问题汇总

之前写的java解析电子发票,上线后出现了一下线上的问题,无法解析发票,对问题做个规整,仅供参考!

1. Pdfbox介绍

pdfbox是一款Apache的开源工具,可以进行对pdf进行操作,如题,转图片也包含在里面,还有添加、删除、编辑pdf页,提取文字等功能。对于基本语法可参考官网,这里不再讲解基础,只列出一些问题。

官网:https://pdfbox.apache.org/

2. 依赖

我们在转化过程中可能会遇到转换缺失等问题,请加上以下依赖:

(1) ERROR: Cannot read JBIG2 image: jbig2-imageio is not installed

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>jbig2-imageio</artifactId>
    <version>3.0.2</version>
</dependency>

 (2)  jpegerror的异常

<dependency>
    <groupId>com.twelvemonkeys.imageio</groupId>
    <artifactId>imageio-jpeg</artifactId>
    <version>3.4.2</version>
</dependency>

(3) Cannot read JPEG2000 image: Java Advanced Imaging (JAI) Image I/O Tools are not installed

<dependency>
    <groupId>com.github.jai-imageio</groupId>
    <artifactId>jai-imageio-core</artifactId>
    <version>1.4.0</version>
</dependency>

<dependency>
    <groupId>com.github.jai-imageio</groupId>
    <artifactId>jai-imageio-jpeg2000</artifactId>
    <version>1.3.0</version>
</dependency>

3. 常见问题

  • (1)为何我的图片转的那么慢?
    如果您的目标图片是PNG图片,这种图片不易失真,如果PDF本身体积就大,或者图片色彩鲜艳,用ImageIO.write时,可能会消耗1~2秒(看文件本身),并且CPU会消耗的非常高。

  • (2)如何解决上面的问题呢?
    官方提供了两种方法,renderImage和renderImageWithDPI 。前者第二个参数是浮点型,可以放大倍数。后者貌似是按照像素来转化。由于我们公司要求的比较高,前者放大5~7倍,和后者设置DPI为350~400的效果差不过,后者速度更快。

  • (3)生产环境中,为什么和我本地转化出来的图片不同?
    生产环境一般用Linux主机,当然Linux主机也有自己的字体,我们一般开发环境用的是Windows自带的字体文件。

    我们的做法是,直接把Windows下的字体(C:\Windows\Fonts)文件移动到Linux下(可行)。

#cd /usr/share/fonts/   // 进入系统自带的字体目录
#mkdir myfonts  // myfonts 是你自己随便取得文件夹名字
#将字体文件拷贝到这个文件夹下,在cd /usr/share/fonts/目录下执行以下命令
#mkfontscale   
#mkfontdir
#fc-cache -fv           //更新字体缓存
#source /etc/profile    // 执行以下命令让字体生效
#fc-list    // 查看系统中所有得字体,可用于测试是否安装字体成功

https://www.jianshu.com/p/c85017f8577a

猜你喜欢

转载自blog.csdn.net/Alex_81D/article/details/130090077
今日推荐