相關jar包:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>fontbox</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
相關代碼:
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;
import java.util.UUID;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* 將多頁pdf轉化為多張圖片
* @param pdfPath 表示pdf的路徑
* @return 轉化后的圖片的路徑集合
* @throws IOException
*/
public static List<String> pdfPathToImagePaths(String pdfPath) throws IOException {
log.info("將多頁pdf轉化為圖片,pdf路徑為:"+pdfPath);
File pdfFile = new File(pdfPath);
PDDocument pdDocument = PDDocument.load(pdfFile);
int pageCount = pdDocument.getNumberOfPages();
PDFRenderer pdfRenderer = new PDFRenderer(pdDocument);
List<String> imagePathList=new ArrayList<>();
String fileParent = pdfFile.getParent();
for (int pageIndex=0; pageIndex<pageCount; pageIndex++) {
String imgPath = fileParent + File.separator +UUID.randomUUID().toString()+".png";
BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, 105, ImageType.RGB);
ImageIO.write(image, "png", new File(imgPath));
imagePathList.add(imgPath);
log.info("第{}張生成的圖片路徑為:{}",pageIndex,imgPath);
}
pdDocument.close();
return imagePathList;
}
這里的UUID.randomUUID()是產生一個隨機的32位數字字母,作為文件名。
也可以自己去找些工具類,或者改用具體的時間作為文件名。
參考資料:
https://blog.csdn.net/u013405574/article/details/51086186