首先引入依賴:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.1</version>
</dependency>
首先先引入依賴,可能有的地方在引入jai_core這個包的時候,不能 引入,所以,需要將這個包排除.
下面是經過測試的代碼:
public class PdfToImg { public static void main(String[] args) { String filePath = "E:\\data\\pdf\\1.pdf"; List<String> imageList = pdfToImagePath(filePath); Iterator<String> iterator = imageList.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } System.out.println(imageList); } public static List<String> pdfToImagePath(String filePath) { List<String> list = new ArrayList<>(); String fileDirectory = filePath.substring(0, filePath.lastIndexOf("."));//獲取去除后綴的文件路徑 String imagePath; File file = new File(filePath); try { File f = new File(fileDirectory); if (!f.exists()) { f.mkdir(); } PDDocument doc = PDDocument.load(file); PDFRenderer renderer = new PDFRenderer(doc); int pageCount = doc.getNumberOfPages(); for (int i = 0; i < pageCount; i++) { // 方式1,第二個參數是設置縮放比(即像素) BufferedImage image = renderer.renderImageWithDPI(i, 296); // 方式2,第二個參數是設置縮放比(即像素) BufferedImage images = renderer.renderImage(i, 1.25f); //第二個參數越大生成圖片分辨率越高,轉換時間也就越長 imagePath = fileDirectory + "/" + i + ".jpg"; ImageIO.write(images, "PNG", new File(imagePath)); list.add(imagePath); return list; } doc.close(); //關閉文件,不然該pdf文件會一直被占用。 } catch (IOException e) { e.printStackTrace(); } return null; } }
這個在本地運行是沒有問題的.但是如果放在linux服務器上運行,就需要引入一個字體.這個字體為宋體,我用的為60M左右,所以包還是挺大的,如果不齊全,可以將自己電腦上的所有字體都放在服務器的user/share/fonts這個目錄下,刷新緩存,然后重新啟動服務,就可以正式將完整的照片進行轉換,不然,轉化出來的照片中的漢字會出現亂碼的情況.
上面說的兩種方式進行設置可以進行預覽,純就是扯淡,只能通過具體的域名加上具體的路徑才能真正的達到預覽的效果.