Thao tác tài liệu PDF trong Java

Aspose.PDF FOSS cho Java cung cấp một bộ API phong phú để thao tác các tài liệu PDF hiện có — tách, ghép, trích xuất các trang, chèn các dải trang, và thay đổi kích thước nội dung trong các trang. Những khả năng này được tập trung trong PdfFileEditor và các lớp đồng hành ContentsResizeParametersContentsResizeValue.

PdfFileEditor: Các thao tác trang cốt lõi

Lớp PdfFileEditor là tiện ích trung tâm cho các hoạt động tệp PDF cấp cao. Nó cung cấp các phương thức để ghép nhiều tệp PDF, trích xuất các tập con trang, tách một tài liệu thành các trang riêng lẻ, và chèn các trang từ một tài liệu vào tài liệu khác tại một vị trí cụ thể.

PdfFileEditor editor = new PdfFileEditor();
// Concatenate two documents into one
editor.concatenate("first.pdf", "second.pdf", "combined.pdf");
// Extract pages 2 through 5 to a new file
editor.extract("source.pdf", 2, 5, "extracted.pdf");

Các phương thức chính bao gồm:

  • concatenate(inputFiles, outputFile) — hợp nhất nhiều tài liệu theo thứ tự
  • extract(inputFile, startPage, endPage, outputFile) — xuất một dải liên tục
  • extract(inputFile, pageNumbers, outputFile) — xuất một tập không liên tục
  • splitToPages(inputFile) — tách thành một ByteArrayOutputStream cho mỗi trang
  • insert(inputFile, insertPosition, portFile, startPage, endPage, outputFile) — chèn một phạm vi
  • delete(inputFile, pageNumbers, outputFile) — xóa các trang cụ thể
  • append(inputFile, portFile, startPage, endPage, outputFile) — thêm một phạm vi trang

Đối với các tệp lớn, setUseDiskBuffer(true) chuyển bộ nhớ nội bộ từ heap sang đĩa.

Thay đổi kích thước nội dung với ContentsResizeParameters

PdfFileEditor.resizeContents() điều chỉnh nội dung trong giới hạn trang hiện có. Mỗi lề — trái, phải, trên, dưới — và chiều rộng, chiều cao của nội dung được chỉ định dưới dạng các thể hiện ContentsResizeValue, được tạo thông qua các phương thức nhà máy ContentsResizeValue.percents(value) hoặc ContentsResizeValue.units(value).

try (Document doc = new Document("input.pdf")) {
    PdfFileEditor editor = new PdfFileEditor();
    ContentsResizeParameters params = new ContentsResizeParameters(
        ContentsResizeValue.percents(10),   // left margin
        ContentsResizeValue.percents(80),   // content width
        ContentsResizeValue.percents(10),   // right margin
        ContentsResizeValue.percents(10),   // top margin
        ContentsResizeValue.percents(80),   // content height
        ContentsResizeValue.percents(10)    // bottom margin
    );
    editor.resizeContents(doc, params);
    doc.save("resized.pdf");
}

Constructor có sáu đối số cho ContentsResizeParameters chấp nhận các giá trị theo thứ tự: leftMargin, contentsWidth, rightMargin, topMargin, contentsHeight, bottomMargin. Cả sáu phải cộng lại thành 100% khi sử dụng giá trị phần trăm, hoặc phải khớp với kích thước trang khi sử dụng giá trị điểm tuyệt đối.

Thay đổi kích thước các trang cụ thể

Khi chỉ một tập con các trang cần được thay đổi kích thước, phiên bản overload chấp nhận một mảng số nguyên các số trang sẽ nhắm mục tiêu các trang đó trong khi để lại phần còn lại không thay đổi:

PdfFileEditor editor = new PdfFileEditor();
ContentsResizeParameters params = new ContentsResizeParameters(
    ContentsResizeValue.units(28),   // left margin in points
    ContentsResizeValue.units(540),  // content width
    ContentsResizeValue.units(28),   // right margin
    ContentsResizeValue.units(28),   // top margin
    ContentsResizeValue.units(786),  // content height
    ContentsResizeValue.units(28)    // bottom margin
);
// Only resize pages 1 and 3
editor.resizeContents(doc, new int[]{1, 3}, params);

ContentsResizeValue.getValue()isPercent() cho phép kiểm tra giá trị đã lưu và xác định liệu nó đại diện cho phần trăm hay số điểm tuyệt đối.

Bố cục Sổ tay và N-Up

PdfFileEditor bao gồm makeBooklet() để sắp xếp các trang theo thứ tự sổ tay hai mặt và makeNUp() để ghép nhiều trang trên một tờ. Cả hai phương pháp đều chấp nhận đường dẫn tệp hoặc luồng dữ liệu:

PdfFileEditor editor = new PdfFileEditor();
// Print as a folded booklet
editor.makeBooklet("input.pdf", "booklet.pdf");
// Tile 2 columns × 3 rows per sheet
editor.makeNUp("input.pdf", "nup.pdf", 2, 3);

PdfPageEditor: Điều khiển thu phóng từng trang

PdfPageEditor nhắm mục tiêu các thuộc tính riêng lẻ của trang như mức thu phóng. setZoom() chấp nhận một hệ số nhân kiểu float, điều khiển độ phóng đại ban đầu khi tài liệu được mở trong trình xem:

PdfPageEditor pageEditor = new PdfPageEditor();
pageEditor.bindPdf("input.pdf");
pageEditor.setZoom(1.5f);
pageEditor.save("zoomed.pdf");

Các giá trị của 0.0 hoặc âm bị từ chối — getZoom() trả về 1.0 trong những trường hợp đó. Điều này làm cho PdfPageEditor phù hợp cho việc chuẩn bị tài liệu cần mở ở mức phóng đại cụ thể cho các trường hợp sử dụng về khả năng truy cập hoặc hiển thị kiosk.

Bắt đầu

Thêm phụ thuộc Maven và nhập gói facades:

<dependency>
  <groupId>org.aspose</groupId>
  <artifactId>aspose-pdf-foss</artifactId>
  <version>26.8.0</version>
</dependency>
import org.aspose.pdf.*;
import org.aspose.pdf.facades.*;

Aspose.PDF FOSS cho Java được cấp phép MIT và có sẵn tại https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Java.

Tài nguyên liên quan