Index: forgon-tools/src/main/java/com/forgon/tools/conversion/PdfToImageUtil.java =================================================================== diff -u -r24096 -r41098 --- forgon-tools/src/main/java/com/forgon/tools/conversion/PdfToImageUtil.java (.../PdfToImageUtil.java) (revision 24096) +++ forgon-tools/src/main/java/com/forgon/tools/conversion/PdfToImageUtil.java (.../PdfToImageUtil.java) (revision 41098) @@ -4,10 +4,13 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; import javax.imageio.ImageIO; import org.apache.pdfbox.pdmodel.PDDocument; @@ -75,38 +78,95 @@ * @return 创建图片的路径集合 * @throws IOException */ - public static List pdfToImagePath(String filePath) throws IOException{ - List list = new ArrayList<>(); - String fileDirectory = filePath.substring(0,filePath.lastIndexOf("."));//获取去除后缀的文件路径 - String imagePath; - PDDocument pdDocument = null; - File file = new File(filePath); - try { - File f = new File(fileDirectory); - if(!f.exists()){ - f.mkdir(); - } - pdDocument = PDDocument.load(file); - PDFRenderer renderer = new PDFRenderer(pdDocument); - int pageCount = pdDocument.getNumberOfPages(); - for(int i=0; i pdfToImagePath(String filePath) throws IOException{ + List list = new ArrayList<>(); + String fileDirectory = filePath.substring(0,filePath.lastIndexOf("."));//获取去除后缀的文件路径 + PDDocument pdDocument = null; + File file = new File(filePath); + ExecutorService pool = null; + List> futureLst = new ArrayList>(); + try { + File f = new File(fileDirectory); + if(!f.exists()){ + f.mkdir(); + } + pdDocument = PDDocument.load(file); + int pageCount = pdDocument.getNumberOfPages(); + pool = Executors.newFixedThreadPool(5); + for(int i=0; i future = pool.submit(new Callable() { + @Override + public String call() throws Exception { + PDDocument pdDocumentThread = null; + try { + pdDocumentThread = PDDocument.load(file); + PDFRenderer renderer = new PDFRenderer(pdDocumentThread); + //BufferedImage image = renderer.renderImageWithDPI(finalPage, 300); //300打印级 + BufferedImage image = renderer.renderImageWithDPI(finalPage, 150); //150屏幕预览 + String imagePath = fileDirectory + "/"+ finalPage + ".jpg"; + ImageIO.write(image, "PNG", new File(imagePath)); + return imagePath; + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (pdDocumentThread != null) { + pdDocumentThread.close(); + } + } + return null; + } + }); + futureLst.add(future); + } + for (Future future : futureLst) { + list.add(future.get()); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (pdDocument != null) { + pdDocument.close(); + } + if(pool != null){ + pool.shutdown(); + } } - return list; - } + return list; + } + + public static List pdfToImagePath_old(String filePath) throws IOException{ + List list = new ArrayList<>(); + String fileDirectory = filePath.substring(0,filePath.lastIndexOf("."));//获取去除后缀的文件路径 + String imagePath; + PDDocument pdDocument = null; + File file = new File(filePath); + try { + File f = new File(fileDirectory); + if(!f.exists()){ + f.mkdir(); + } + pdDocument = PDDocument.load(file); + PDFRenderer renderer = new PDFRenderer(pdDocument); + int pageCount = pdDocument.getNumberOfPages(); + for(int i=0; i