1. Pdfbox介紹
pdfbox是一款Apache的開源工具,可以進行對pdf進行操作,如題,轉圖片也包含在里面,還有添加、刪除、編輯pdf頁,提取文字等功能。對于基本語法可參考官網,這里不再講解基礎,只列出一些問題。
官網:https://pdfbox.apache.org/
2. 依賴
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.17</version>
</dependency>
我們在轉化過程中可能會遇到轉換缺失等問題,請加上以下依賴:
(1) jpegerror的異常
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-jpeg</artifactId>
<version>3.4.2</version>
</dependency>
(2) 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>
(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)生產環(huán)境中,為什么和我本地轉化出來的圖片不同?
生產環(huán)境一般用Linux主機,當然Linux主機也有自己的字體,我們一般開發(fā)環(huán)境用的是Windows自帶的字體文件。我們的做法是,直接把Windows下的字體(C:\Windows\Fonts)文件移動到Linux下(可行)。
#cd /usr/share/fonts/ // 進入系統(tǒng)自帶的字體目錄
#mkdir myfonts // myfonts 是你自己隨便取得文件夾名字
#將字體文件拷貝到這個文件夾下,在cd /usr/share/fonts/目錄下執(zhí)行以下命令
#mkfontscale
#mkfontdir
#fc-cache -fv //更新字體緩存
#source /etc/profile // 執(zhí)行以下命令讓字體生效
#fc-list // 查看系統(tǒng)中所有得字體,可用于測試是否安裝字體成功
參考:
https://blog.csdn.net/u014155085/article/details/86077614