使用soffice的命令把pdf轉image的話,默認只能轉一頁的,這個有點費勁,因而也不打算沿用soffice的方案了,改用pdfbox來實現。apache
<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.4</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox-tools</artifactId> <version>2.0.4</version> </dependency>
public static List<BufferedImage> convertToImage(File file) throws IOException { PDDocument document = PDDocument.load(file); PDFRenderer pdfRenderer = new PDFRenderer(document); List<BufferedImage> bufferedImageList = new ArrayList<>(); for (int page = 0;page<document.getNumberOfPages();page++){ BufferedImage img = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB); bufferedImageList.add(img); } document.close(); return bufferedImageList; }
public static BufferedImage concat(BufferedImage[] images) throws IOException { int heightTotal = 0; for(int j = 0; j < images.length; j++) { heightTotal += images[j].getHeight(); } int heightCurr = 0; BufferedImage concatImage = new BufferedImage(images[0].getWidth(), heightTotal, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = concatImage.createGraphics(); for(int j = 0; j < images.length; j++) { g2d.drawImage(images[j], 0, heightCurr, null); heightCurr += images[j].getHeight(); } g2d.dispose(); return concatImage; }
這樣基本就大功告成了,不足的地方是性能過低,有待優化。maven