PDFBox提取图像

PDFBox提取图像

在前一章中,我们已经看到了如何合并多个PDF文档。 在本章中,我们将了解如何从PDF文档的页面提取图像。

从PDF文档生成图像

PDFBox库提供了一个名称为PDFRenderer的类,它将PDF文档呈现为AWT BufferedImage。

以下是从PDF文档生成图像的步骤。

第1步:加载现有的PDF文档

使用PDDocument类的静态方法load()加载现有的PDF文档。 此方法接受一个文件对象作为参数,因为这是一个静态方法,可以使用类名称调用它,如下所示。

File file = new File("path of the document") 
PDDocument document = PDDocument.load(file);

第2步:实例化PDFRenderer类

PDFRenderer类将PDF文档呈现到AWT BufferedImage中。 因此,需要实例化这个类,如下所示。 这个类的构造函数接受一个文档对象; 传递上一步创建的文档对象,如下所示。

PDFRenderer renderer = new PDFRenderer(document);

第3步:从PDF文档渲染图像

可以使用Renderer类的renderImage()方法在特定页面中呈现图像,以将此方法用于传递要渲染图像的页面的索引。

BufferedImage image = renderer.renderImage(0);

第4步:将图像写入文件

可以使用write()方法将上一步中呈现的图像写入文件。 对于这种方法,需要传递三个参数 -

  • 渲染的图像对象。
  • 代表图像类型的字符串(jpgpng)。
  • 需要保存提取的图像的文件对象。
ImageIO.write(image, "JPEG", new File("D:/PdfBoxExamples/myimage.jpg"));

第5步:关闭文档

最后,使用PDDocument类的close()方法关闭文档,如下所示。

document.close();

示例

假设,在目录:F:\worksp\pdfbox中有一个PDF文档 - mypdf.pdf,并且在其第一页中包含一个图像,如下所示。

本示例演示如何将上述PDF文档转换为图像文件。 在这里,将检索PDF文档第一页中的图像并将其保存为myimage.jpg。 将此代码保存为PdfToImage.java -

package com.zyiz;

import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
public class PdfToImage {

   public static void main(String args[]) throws Exception {

      //Loading an existing PDF document
      File file = new File("F:/worksp/pdfbox/mypdf.pdf");
      PDDocument document = PDDocument.load(file);

      //Instantiating the PDFRenderer class
      PDFRenderer renderer = new PDFRenderer(document);

      //Rendering an image from the PDF document
      BufferedImage image = renderer.renderImage(0);

      //Writing the image to a file
      ImageIO.write(image, "JPEG", new File("F:/worksp/pdfbox/myimage.jpg"));

      System.out.println("Image created");

      //Closing the document
      document.close();

   }
}

执行时,上述程序将检索给定PDF文档中的图像,并显示以下消息。

Image created

如果打开F:/worksp/pdfbox/,可以观察到图像文件:myimage.jpg,打开后如下所示。