<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.18</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>jbig2-imageio</artifactId> <version>3.0.2</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox-tools</artifactId> <version>2.0.18</version> </dependency>
@Test public void pdf2image2() throws IOException { PDDocument pdDocument; FileInputStream fileInputStream = new FileInputStream("d:/test.pdf"); pdDocument = PDDocument.load(fileInputStream); PDFRenderer renderer = new PDFRenderer(pdDocument); // 获取PDF页数 int pages = pdDocument.getNumberOfPages(); for (int i = 0; i < pages; i++) { BufferedImage image = renderer.renderImage(i, 2.5f, ImageType.BINARY, RenderDestination.PRINT); FileOutputStream out = new FileOutputStream("d:\\imageresult" + i + ".png"); // PNG ImageIO.write(image, "png", out); } pdDocument.close(); }
应用renderImage会小很多
aspose
FileInputStream fileInputStream = new FileInputStream("D:\\test.pdf"); Document pdfDocument = new Document(fileInputStream); Resolution resolution = new Resolution(72); JpegDevice jpegDevice = new JpegDevice(740, 1046, resolution, 100); RenderingOptions renderingOptions = new RenderingOptions(); for (int index = 1; index <= pdfDocument.getPages().size(); index++) { // 输入门路 FileOutputStream out = new FileOutputStream("d:\\image" + index + ".jpg"); jpegDevice.process(pdfDocument.getPages().get_Item(index), out); out.close(); } pdfDocument.close();
图片压缩
File imageFile = new File("d:\\imageresult0.jpg"); File compressedImageFile = new File("d:\\myimage_compressed.jpg"); InputStream is = new FileInputStream(imageFile); OutputStream os = new FileOutputStream(compressedImageFile); float quality = 0.01f; // create a BufferedImage as the result of decoding the supplied InputStream BufferedImage image = ImageIO.read(is); // get all image writers for JPG format Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg"); if (!writers.hasNext()) throw new IllegalStateException("No writers found"); ImageWriter writer = (ImageWriter) writers.next(); ImageOutputStream ios = ImageIO.createImageOutputStream(os); writer.setOutput(ios); ImageWriteParam param = writer.getDefaultWriteParam(); param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionQuality(quality); writer.write(null, new IIOImage(image, null, null), param); // close all streams is.close(); os.close(); ios.close(); writer.dispose();