//params pdfPath pdf文件的路径
//params imagePath 本地保存的文件路径
import javax.imageio.ImageIO; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer;
//pom
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itext7-core</artifactId> <version>7.0.2</version> <type>pom</type> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>fontbox</artifactId> <version>2.0.3</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.3</version> </dependency>
public static List<String> pdf2Img(String pdfPath, final String imagePath) throws Exception{ List<String> imageList = new LinkedList<String>(); File file = new File(pdfPath); PDDocument doc = null; PDFRenderer render = null; try { doc = PDDocument.load(file); render = new PDFRenderer(doc); int pageCount = doc.getNumberOfPages(); int pageSize = 4; int maxThreadNum = 10; if (pageCount > 40) { pageSize = pageCount/maxThreadNum; } int threadNumber = 0; if (pageCount % pageSize != 0) { threadNumber = pageCount/pageSize + 1; } else { threadNumber = pageCount/pageSize; } CountDownLatch latch = new CountDownLatch(threadNumber); List<Integer> pageList = new LinkedList<Integer>(); List<String> fileNameList = new LinkedList<String>(); int threadCount = 0; for (int i = 0; i < pageCount; i++) { String fileName = StringUtil.getId() + ".jpg"; imageList.add(fileName); fileNameList.add(fileName); pageList.add(i); if ((i+1) % pageSize == 0) { PdfRenderThread pdfRenderThread = new PdfRenderThread(render, pageList,fileNameList, imagePath, pdfPath ,latch); threadCount++; new Thread(pdfRenderThread).start(); pageList = new LinkedList<Integer>(); fileNameList = new LinkedList<String>(); } } if (pageList.size() > 0) { PdfRenderThread pdfRenderThread = new PdfRenderThread(render, pageList, fileNameList, imagePath, pdfPath, latch); new Thread(pdfRenderThread).start(); threadCount++; } log.info("threadCount = " + threadCount); System.out.println("threadCount = " + threadCount ); latch.await(); } finally { try { if (doc != null) doc.close(); } catch (Exception e2) { e2.printStackTrace(); } } return imageList; }