最近java項目中使用到了pdf轉圖片的需求,在此記錄一下。java
1.基於GhostScriptapp
使用此方法要求運行環境安裝GhostScript。轉換使用的命令是:gs -sDEVICE=pngalpha -o %03d.png -sDEVICE=pngalpha -r144 test.pdfui
public static List<byte[]> pdf2image(String pdfFilePath) throws Exception{ File tempDir = null; try{ tempDir = Files.createTempDir(); Process proc = new ProcessBuilder("gs", "-sDEVICE=pngalpha", "-o", tempDir + File.separator + "%03d.png", "-sDEVICE=pngalpha", "-r144", pdfFilePath) .redirectErrorStream(true) .start(); ArrayList<String> output = new ArrayList<String>(); BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream())); String line = null; while ((line = br.readLine()) != null) output.add(line); logger.info("執行gs命令的輸出:" + StringUtils.join(output, System.lineSeparator())); if (0 != proc.waitFor()) throw new Exception("轉換失敗"); File[] files = tempDir.listFiles(); Arrays.sort(files, new Comparator<File>() { public int compare(File f1, File f2) { return f1.getName().compareTo(f2.getName()); } }); List<byte[]> images = new ArrayList<>(); for(File file : files) images.add(IOUtils.toByteArray(new FileInputStream(file))); return images; }finally{ if(tempDir != null) FileUtils.deleteDirectory(tempDir); } }
其中GhostScript還有不少經常使用的命令,有興趣的能夠去看看:https://www.ghostscript.com/doc/current/Use.htmspa
2.基於ImageMagick3d
可是我項目中是但願把有多頁文件的pdf轉爲一張圖片,GhostScript老是把它轉爲多張圖片(我網上找了好久,沒找到轉爲一張圖片的命令,若是有小夥伴們有知道的,還但願分享下),因此我又在網上找到了ImageMagick,主要是找到了能夠把整個pdf轉爲一張圖片的命令,code
具體執行命令爲:convert test.pdf -append -flatten test.pnghtm
固然須要安裝ImageMagick,blog
安裝命令爲:yum install ImageMagick ImageMagick-devel圖片