Манипулирование 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) переключает внутреннее хранилище с кучи на диск.
Изменение размера содержимого с помощью 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() принимает множитель типа float, который управляет начальным увеличением при открытии документа в просмотрщике:
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.