PDFBox - 插入图像

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

将图像插入 PDF 文档

您可以分别使用 PDImageXObject 类和 PDPageContentStream 类的 createFromFile()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 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 文档,位于路径 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 {
        //加载现有文档
        File file = new File("C:/PdfBox_Examples/sample.pdf");
        PDDocument doc = PDDocument.load(file);
        
        //检索页面
        PDPage page = doc.getPage(0);
        
        //创建 PDImageXObject 对象
        PDImageXObject pdImage = PDImageXObject.createFromFile("C:/PdfBox_Examples/logo.png",doc);
        
        //创建 PDPageContentStream 对象
        PDPageContentStream content = new PDPageContentStream(doc, page);
        
        //在 PDF 文档中绘制图像
        content.drawImage(pdImage, 70, 250);
        
        System.out.println("已插入图像");
        
        //关闭 PDPageContentStream 对象
        contents.close();		
        
        //保存文档
        doc.save("C:/PdfBox_Examples/sample.pdf");
            
        //关闭文档
        doc.close();
     
   }
}

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

javac InsertingImage.java
java InsertingImage

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

Image inserted

如果您验证文档 sample.pdf,您可以观察到其中插入了一张图片,如下所示。

插入图像