Pdfbox 简明教程

PDFBox - Inserting Image

在上一章中,我们已经了解如何从现有 PDF 文档中提取文本。在本章中,我们将讨论如何将图像插入 PDF 文档。

Inserting Image to a PDF Document

使用 PDImageXObject 类和 PDPageContentStream 类中的 createFromFile()drawImage() 方法,可以将图像插入 PDF 文档。

以下是从现有 PDF 文档中提取文本的步骤。

Step 1: Loading an Existing PDF Document

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

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

Step 2: Retrieving a Page

选择 PDF 文档中的一页并使用 getPage() 方法检索其页面对象,如下所示。

PDPage page = doc.getPage(0);

Step 3: Creating PDImageXObject object

PDFBox 库中的 PDImageXObject 类表示一张图片。它提供了执行图片相关操作所需的所有方法,例如插入图片、设置其高度、设置其宽度等。

我们可以使用 createFromFile() 方法创建此类的对象。我们需要向此方法传递作为字符串的要添加图片的路径和要向其中添加图片的文档对象。

PDImageXObject pdImage = PDImageXObject.createFromFile("C:/logo.png", doc);

Step 4: Preparing the Content Stream

您可以使用名为 PDPageContentStream 的类的对象插入各种数据元素。您需要将文档对象和页面对象传递给此类的构造函数,因此,按如下所示传递在先前步骤中创建的这两个对象来实例化此类。

PDPageContentStream contentStream = new PDPageContentStream(doc, page);

Step 5: Drawing the Image in the PDF Document

可以使用 drawImage() 方法在 PDF 文档中插入图片。需要向此方法添加在上一步创建的图片对象和图片所需尺寸(宽度和高度),如下所示。

contentstream.drawImage(pdImage, 70, 250);

Step 6: Closing the PDPageContentStream

按如下所示使用 close() 方法关闭 PDPageContentStream 对象。

contentstream.close();

Step 7: Saving the Document

添加所需内容后,按如下所示使用 PDDocument 类的 save() 方法保存 PDF 文档。

doc.save("Path");

Step 8: Closing the Document

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

doc.close();

Example

假设我们有一个名为 sample.pdf 的 PDF 文档,路径为 C:/PdfBox_Examples/ ,空白页如下所示。

sample document

此示例演示如何将图片添加到上述 PDF 文档的空白页。此处,我们将加载名为 sample.pdf 的 PDF 文档并向其中添加图片。使用名称 InsertingImage.java. 将此代码保存在一个文件中

import java.io.File;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

public class InsertingImage {

   public static void main(String args[]) throws Exception {
      //Loading an existing document
      File file = new File("C:/PdfBox_Examples/sample.pdf");
      PDDocument doc = PDDocument.load(file);

      //Retrieving the page
      PDPage page = doc.getPage(0);

      //Creating PDImageXObject object
      PDImageXObject pdImage = PDImageXObject.createFromFile("C:/PdfBox_Examples/logo.png",doc);

      //creating the PDPageContentStream object
      PDPageContentStream contents = new PDPageContentStream(doc, page);

      //Drawing the image in the PDF document
      contents.drawImage(pdImage, 70, 250);

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

      //Closing the PDPageContentStream object
      contents.close();

      //Saving the document
      doc.save("C:/PdfBox_Examples/sample.pdf");

      //Closing the document
      doc.close();

   }
}

使用以下命令从命令提示符处编译并执行已保存的 Java 文件。

javac InsertingImage.java
java InsertingImage

执行后,以上程序将图片插入到指定页的给定 PDF 文档,并显示以下消息。

Image inserted

验证文档 sample.pdf ,您可以看到其中插入的图片如下所示。

inserting image