PDFBox - Chèn hình ảnh

Trong chương trước, chúng ta đã biết cách trích xuất văn bản từ tài liệu PDF hiện có. Trong chương này, chúng ta sẽ thảo luận về cách chèn hình ảnh vào tài liệu PDF.

Chèn hình ảnh vào tài liệu PDF

Bạn có thể chèn hình ảnh vào tài liệu PDF bằng cách sử dụng createFromFile()drawImage() phương thức của các lớp PDImageXObjectPDPageContentStream tương ứng.

Sau đây là các bước để trích xuất văn bản từ một tài liệu PDF hiện có.

Bước 1: Tải tài liệu PDF hiện có

Tải tài liệu PDF hiện có bằng phương pháp tĩnh load() sau đó PDDocumentlớp học. Phương thức này chấp nhận một đối tượng tệp như một tham số, vì đây là một phương thức tĩnh nên bạn có thể gọi nó bằng cách sử dụng tên lớp như hình dưới đây.

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

Bước 2: Truy xuất trang

Chọn một trang trong tài liệu PDF và truy xuất đối tượng trang của nó bằng cách sử dụng getPage() như hình dưới đây.

PDPage page = doc.getPage(0);

Bước 3: Tạo đối tượng PDImageXObject

Lớp PDImageXObjecttrong thư viện PDFBox đại diện cho một hình ảnh. Nó cung cấp tất cả các phương thức cần thiết để thực hiện các thao tác liên quan đến hình ảnh, chẳng hạn như chèn hình ảnh, đặt chiều cao, đặt chiều rộng của hình ảnh, v.v.

Chúng ta có thể tạo một đối tượng của lớp này bằng phương thức createFromFile(). Đối với phương pháp này, chúng ta cần chuyển đường dẫn của hình ảnh mà chúng ta muốn thêm dưới dạng một chuỗi và đối tượng tài liệu mà hình ảnh cần được thêm vào.

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

Bước 4: Chuẩn bị Luồng nội dung

Bạn có thể chèn nhiều loại phần tử dữ liệu khác nhau bằng cách sử dụng đối tượng của lớp có tên PDPageContentStream. Do đó, bạn cần phải chuyển đối tượng document và đối tượng trang cho hàm tạo của lớp này, do đó, khởi tạo lớp này bằng cách chuyển hai đối tượng này đã được tạo ở các bước trước như được hiển thị bên dưới.

PDPageContentStream contentStream = new PDPageContentStream(doc, page);

Bước 5: Vẽ hình ảnh trong tài liệu PDF

Bạn có thể chèn hình ảnh vào tài liệu PDF bằng cách sử dụng drawImage()phương pháp. Đối với phương pháp này, bạn cần thêm đối tượng hình ảnh đã tạo ở bước trên và kích thước yêu cầu của hình ảnh (chiều rộng và chiều cao) như hình dưới đây.

contentstream.drawImage(pdImage, 70, 250);

Bước 6: Đóng PDPageContentStream

Đóng PDPageContentStream đối tượng sử dụng close() như hình dưới đây.

contentstream.close();

Bước 7: Lưu tài liệu

Sau khi thêm nội dung cần thiết, hãy lưu tài liệu PDF bằng cách sử dụng save() phương pháp của PDDocument lớp như được hiển thị trong khối mã sau.

doc.save("Path");

Bước 8: Đóng tài liệu

Cuối cùng, đóng tài liệu bằng cách sử dụng close() phương pháp của PDDocument lớp như hình bên dưới.

doc.close();

Thí dụ

Giả sử chúng ta có một tài liệu PDF có tên sample.pdf, trong đường dẫn C:/PdfBox_Examples/ với các trang trống như hình dưới đây.

Ví dụ này trình bày cách thêm hình ảnh vào trang trống của tài liệu PDF được đề cập ở trên. Tại đây, chúng tôi sẽ tải tài liệu PDF có tênsample.pdfvà thêm hình ảnh vào nó. Lưu mã này trong một tệp có tênInsertingImage.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();
     
   }
}

Biên dịch và thực thi tệp Java đã lưu từ dấu nhắc lệnh bằng các lệnh sau.

javac InsertingImage.java 
java InsertingImage

Khi thực hiện, chương trình trên sẽ chèn một hình ảnh vào trang cụ thể của tài liệu PDF đã cho, hiển thị thông báo sau.

Image inserted

Nếu bạn xác minh tài liệu sample.pdf, bạn có thể quan sát thấy một hình ảnh được chèn vào đó như hình dưới đây.