Маніпулювання PDF-документами у Java

Aspose.PDF FOSS для Java надає багатий набір API для маніпулювання існуючими PDF-документами — розділення, об’єднання, витягування сторінок, вставку діапазонів сторінок та зміну розміру вмісту на сторінках. Ці можливості зосереджені в PdfFileEditor та його супутніх класах ContentsResizeParameters і ContentsResizeValue.

PdfFileEditor: Основні операції зі сторінками

Клас PdfFileEditor є центральним засобом для високорівневих операцій з PDF-файлами. Він надає методи для об’єднання кількох PDF-файлів, витягування підмножин сторінок, розділення документа на окремі сторінки та вставки сторінок з одного документа в інший у вказаній позиції.

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");

Ключові методи включають:

  • concatenate(inputFiles, outputFile) — об’єднує кілька документів у порядку
  • extract(inputFile, startPage, endPage, outputFile) — експортує безперервний діапазон
  • extract(inputFile, pageNumbers, outputFile) — експортує непослідовний набір
  • splitToPages(inputFile) — розбиває на один ByteArrayOutputStream на сторінку
  • insert(inputFile, insertPosition, portFile, startPage, endPage, outputFile) — вставляє діапазон
  • delete(inputFile, pageNumbers, outputFile) — видаляє конкретні сторінки
  • append(inputFile, portFile, startPage, endPage, outputFile) — додає діапазон сторінок

Для великих файлів setUseDiskBuffer(true) перемикає внутрішнє сховище з heap на диск.

Зміна розміру вмісту за допомогою ContentsResizeParameters

PdfFileEditor.resizeContents() коригує вміст в межах існуючих меж сторінки. Кожен відступ — лівий, правий, верхній, нижній — а також ширина та висота вмісту задаються як екземпляри ContentsResizeValue, створені за допомогою фабричних методів ContentsResizeValue.percents(value) або 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");
}

Конструктор з шістьма аргументами для ContentsResizeParameters приймає значення у такому порядку: leftMargin, contentsWidth, rightMargin, topMargin, contentsHeight, bottomMargin. Усі шість повинні в сумі дорівнювати 100% при використанні значень у відсотках або відповідати розмірам сторінки при використанні абсолютних значень у пунктах.

Зміна розмірів окремих сторінок

Коли лише підмножина сторінок потребує зміни розмірів, перевантаження, яке приймає масив цілих чисел номерів сторінок, орієнтується на ці сторінки, залишаючи інші без змін:

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() дозволяють переглянути збережене значення та визначити, чи представляє воно відсоток, чи абсолютну кількість пунктів.

Буклет і N-Up розкладка

PdfFileEditor включає makeBooklet() для розміщення сторінок у двосторонньому порядку буклета та makeNUp() для укладання декількох сторінок на аркуші. Обидва методи приймають шляхи до файлів або потоки:

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: Управління масштабом для кожної сторінки

PdfPageEditor орієнтується на окремі властивості сторінки, такі як рівень масштабування. setZoom() приймає множник з плаваючою комою, який контролює початкове збільшення під час відкриття документа у переглядачі:

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

Значення 0.0 або від’ємні відхиляються — getZoom() повертає 1.0 у таких випадках. Це робить PdfPageEditor придатним для підготовки документів, які мають відкриватися з певним збільшенням для потреб доступності або використання в кіоскових дисплеях.

Початок роботи

Додайте залежність Maven і імпортуйте пакет 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 для Java має ліцензію MIT і доступний за адресою https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Java.

Пов’язані ресурси