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