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 ,其空頁如下所示。
PDFBox插入圖像

本示例演示如何將圖像添加到上述PDF文檔的空白頁面。 在這裏,將加載PDF文檔 - sample.pdf, 並添加圖像。 將此代碼保存在名稱爲InsertingImage.java的文件中。

package com.yiibai;

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,可以觀察到插入了一張圖像,如下所示。

PDFBox插入圖像