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();
示例
假設我們在路徑C:/PdfBox_Examples/下有一個名為sample.pdf的PDF文件,其中包含空白頁面,如下所示。
此示例演示如何將圖片新增到上述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文件,您可以觀察到其中插入了一張圖片,如下所示。