iText - Thu gọn nội dung
Trong chương này, chúng ta sẽ xem cách chia tỷ lệ hình ảnh trên tài liệu PDF bằng thư viện iText.
Thu nhỏ nội dung trong PDF
Sau đây là các bước để thu nhỏ nội dung của trang PDF bằng thư viện iText.
Bước 1: Tạo đối tượng PdfWriter và PdfReader
Các PdfWriterlớp đại diện cho DocWriter cho một tệp PDF. Lớp này thuộc về góicom.itextpdf.kernel.pdf. Hàm tạo của lớp này chấp nhận một chuỗi, đại diện cho đường dẫn của tệp nơi tệp PDF sẽ được tạo.
Khởi tạo lớp PdfWriter bằng cách chuyển một giá trị chuỗi (đại diện cho đường dẫn mà bạn cần tạo PDF) đến phương thức khởi tạo của nó, như được hiển thị bên dưới.
// Creating a PdfWriter object
String dest = "C:/itextExamples/shrinking.pdf";
PdfWriter writer = new PdfWriter(dest);
Để đọc dữ liệu từ một pdf hiện có, hãy tạo PdfReader đối tượng như hình dưới đây.
// Creating a PdfReader
String src = "C:/itextExamples/pdfWithImage.pdf";
PdfReader reader = new PdfReader(src);
Bước 2: Tạo (các) đối tượng PdfDocument
Các PdfDocumentlớp là lớp đại diện cho Tài liệu PDF trong iText. Lớp này thuộc về góicom.itextpdf.kernel.pdf. Để khởi tạo lớp này (ở chế độ viết), bạn cần chuyển một đối tượng của lớpPdfWriter với hàm tạo của nó.
Tạo tài liệu PDF nguồn và đích bằng cách chuyển PdfWriter và PdfReader đối tượng của các hàm tạo, như được hiển thị bên dưới.
// Creating a PdfDocument objects
PdfDocument destpdf = new PdfDocument(writer);
PdfDocument srcPdf = new PdfDocument(reader);
Bước 3: Mở một trang từ tệp PDF hiện có
Lấy một trang từ PDF nguồn bằng cách sử dụng getPage() phương pháp của PdfPagelớp học. Sử dụng đối tượng này, lấy kích thước của trang của tài liệu nguồn, như được hiển thị bên dưới.
// Opening a page from the existing PDF
PdfPage origPage = srcPdf.getPage(1);
// Getting the page size
Rectangle orig = origPage.getPageSizeWithRotation();
Bước 4: Thu nhỏ nội dung của pdf nguồn
Sử dụng getScaleInstance() phương pháp của AffineTransform lớp, thu nhỏ nội dung của một trang của tài liệu nguồn, như được hiển thị bên dưới.
// Shrink original page content using transformation matrix
AffineTransform transformationMatrix = AffineTransform.getScaleInstance(
page.getPageSize().getWidth()/ orig.getWidth()/2,
page.getPageSize().getHeight()/ orig.getHeight()/2);
Bước 5: Sao chép trang
Nối các affine transform matrix, được tạo ở bước trước, thành ma trận của canvas đối tượng của tài liệu PDF đích, như được hiển thị bên dưới.
// Concatenating the affine transform matrix to the current matrix
PdfCanvas canvas = new PdfCanvas(page);
canvas.concatMatrix(transformationMatrix);
Bây giờ, hãy thêm bản sao trang vào canvas đối tượng của PDF đích đến tài liệu nguồn, như được hiển thị bên dưới.
// Add the object to the canvas
PdfFormXObject pageCopy = origPage.copyAsFormXObject(destpdf);
canvas.addXObject(pageCopy, 0, 0);
Bước 6: Tạo đối tượng Tài liệu
Các Document lớp của gói com.itextpdf.layoutlà phần tử gốc trong khi tạo một tệp PDF tự túc. Một trong những hàm tạo của lớp này chấp nhận một đối tượng của lớp PdfDocument.
Khởi tạo Document lớp bằng cách truyền đối tượng của lớp PdfDocument, như hình dưới đây.
// Creating a Document
Document document = new Document(destpdf);
Bước 7: Đóng tài liệu
Đóng tài liệu bằng cách sử dụng close() phương pháp của Document lớp, như hình dưới đây.
// Closing the document
document.close();
Thí dụ
Chương trình Java sau đây trình bày cách thu nhỏ nội dung của trang PDF bằng thư viện iText. Nó tạo ra một tài liệu PDF với tênshrinkingPDF.pdf, thu nhỏ hình ảnh trong pdf và lưu nó trong đường dẫn C:/itextExamples/
Lưu mã này trong một tệp có tên ShrinkingPDF.java.
import com.itextpdf.kernel.geom.AffineTransform;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;
import com.itextpdf.layout.Document;
public class ShrinkPDF {
public static void main(String args[]) throws Exception {
// Creating a PdfWriter object
String dest = "C:/itextExamples/shrinking.pdf";
PdfWriter writer = new PdfWriter(dest);
// Creating a PdfReader
String src = "C:/itextExamples/pdfWithImage.pdf";
PdfReader reader = new PdfReader(src);
// Creating a PdfDocument objects
PdfDocument destpdf = new PdfDocument(writer);
PdfDocument srcPdf = new PdfDocument(reader);
// Opening a page from the existing PDF
PdfPage origPage = srcPdf.getPage(1);
// Getting the page size
Rectangle orig = origPage.getPageSizeWithRotation();
// Adding a page to destination Pdf
PdfPage page = destpdf.addNewPage();
// Scaling the image in a Pdf page
AffineTransform transformationMatrix = AffineTransform.getScaleInstance(
page.getPageSize().getWidth()/orig.getWidth()/2,
page.getPageSize().getHeight()/ orig.getHeight()/2);
// Shrink original page content using transformation matrix
PdfCanvas canvas = new PdfCanvas(page);
canvas.concatMatrix(transformationMatrix);
// Add the object to the canvas
PdfFormXObject pageCopy = origPage.copyAsFormXObject(destpdf);
canvas.addXObject(pageCopy, 0, 0);
// Creating a Document object
Document doc = new Document(destpdf);
// Closing the document
doc.close();
System.out.println("Table created successfully..");
}
}
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 ShrinkingPDF.java
java ShrinkingPDF
Khi thực hiện, chương trình trên tạo một tài liệu PDF, hiển thị thông báo sau.
Table created successfully..
Nếu bạn xác minh đường dẫn được chỉ định, bạn có thể tìm thấy tài liệu PDF đã tạo như hình bên dưới.