PDFBox插入图像

PDFBox插入图像

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

将图像插入PDF文档

分别使用PDImageXObject类的createFromFile()以及PDPageContentStream类的drawImage()方法将图像插入到PDF文档中。

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

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

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

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

第2步:检索页面

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

PDPage page = doc.getPage(0);

第3步:创建PDImageXObject对象

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

可以使用createFromFile()方法创建这个类的一个对象。 对于这种方法,需要传递想要以字符串形式添加的图像路径以及需要添加图像的文档对象。

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

第4步:准备内容流

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

PDPageContentStream contentStream = new PDPageContentStream(doc, page);

第5步:在PDF文档中绘制图像

使用drawImage()方法在PDF文档中插入图像。 对于这种方法,需要添加上述步骤中创建的图像对象和图像所需的尺寸(宽度和高度),如下所示。

contentstream.drawImage(pdImage, 70, 250);

第6步:关闭PDPageContentStream

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

contentstream.close();

第7步:保存文档

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

doc.save("Path");

第8步:关闭文件

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

doc.close();

示例

假设有一个名称为sample.pdf的PDF文档,存放的目录是:F:\worksp\pdfbox ,其空页如下所示。

本示例演示如何将图像添加到上述PDF文档的空白页面。 在这里,将加载PDF文档 - sample.pdf, 并添加图像。 将此代码保存在名称为InsertingImage.java的文件中。

package com.zyiz;

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("F:/worksp/pdfbox/sample.pdf");
      PDDocument doc = PDDocument.load(file);

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

      //Creating PDImageXObject object
      PDImageXObject pdImage = PDImageXObject.createFromFile("F:/worksp/pdfbox/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("F:/worksp/pdfbox/sample-image.pdf");

      //Closing the document
      doc.close();

   }
}

执行上面示例代码,得到以下结果 -

Image inserted

如果打开文档:sample-image.pdf,可以观察到插入了一张图像,如下所示。