Manipulacja dokumentami PDF w Java

Aspose.PDF FOSS dla Java zapewnia bogaty zestaw interfejsów API do manipulacji istniejącymi dokumentami PDF — dzielenia, łączenia, wyodrębniania stron, wstawiania zakresów stron oraz zmiany rozmiaru zawartości na stronach. Te możliwości skoncentrowane są w PdfFileEditor oraz w towarzyszących klasach ContentsResizeParameters i ContentsResizeValue.

PdfFileEditor: Podstawowe operacje na stronach

Klasa PdfFileEditor jest centralnym narzędziem do operacji na plikach PDF wysokiego poziomu. Oferuje metody łączenia wielu plików PDF, wyodrębniania podzbiorów stron, dzielenia dokumentu na pojedyncze strony oraz wstawiania stron z jednego dokumentu do drugiego w określonym miejscu.

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

Kluczowe metody obejmują:

  • concatenate(inputFiles, outputFile) — scala wiele dokumentów w kolejności
  • extract(inputFile, startPage, endPage, outputFile) — eksportuje spójny zakres
  • extract(inputFile, pageNumbers, outputFile) — eksportuje nieciągły zestaw
  • splitToPages(inputFile) — dzieli na jeden ByteArrayOutputStream na stronę
  • insert(inputFile, insertPosition, portFile, startPage, endPage, outputFile) — wstawia zakres
  • delete(inputFile, pageNumbers, outputFile) — usuwa określone strony
  • append(inputFile, portFile, startPage, endPage, outputFile) — dołącza zakres stron

W przypadku dużych plików, setUseDiskBuffer(true) przełącza wewnętrzne przechowywanie z sterty na dysk.

Zmiana rozmiaru treści przy użyciu ContentsResizeParameters

PdfFileEditor.resizeContents() dostosowuje treść w obrębie istniejących granic strony. Każdy margines — lewy, prawy, górny, dolny — oraz szerokość i wysokość treści są określane jako instancje ContentsResizeValue, tworzone za pomocą metod fabrycznych ContentsResizeValue.percents(value) lub 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");
}

Konstruktor z sześcioma argumentami dla ContentsResizeParameters przyjmuje wartości w kolejności: leftMargin, contentsWidth, rightMargin, topMargin, contentsHeight, bottomMargin. Wszystkie sześć muszą sumować się do 100% przy użyciu wartości procentowych lub odpowiadać wymiarom strony przy użyciu wartości punktowych.

Zmiana rozmiaru konkretnych stron

Gdy tylko podzbiór stron wymaga zmiany rozmiaru, przeciążenie przyjmujące tablicę liczb całkowitych z numerami stron kieruje się do tych stron, pozostawiając pozostałe niezmienione:

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() i isPercent() umożliwiają sprawdzenie przechowywanej wartości i określenie, czy reprezentuje ona procent, czy bezwzględną liczbę punktów.

Układ broszury i N-Up

PdfFileEditor zawiera makeBooklet() do nakładania stron w dwustronnym porządku broszury oraz makeNUp() do układania wielu stron na jednej kartce. Obie metody przyjmują ścieżki plików lub strumienie:

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: Kontrola przybliżenia per strona

PdfPageEditor celuje w właściwości poszczególnych stron, takie jak poziom przybliżenia. setZoom() przyjmuje mnożnik zmiennoprzecinkowy, który kontroluje początkowe powiększenie, gdy dokument jest otwierany w przeglądarce:

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

Wartości 0.0 lub ujemne są odrzucane — getZoom() zwraca 1.0 w tych przypadkach. To sprawia, że PdfPageEditor jest odpowiednie do przygotowywania dokumentów, które muszą otwierać się w określonym powiększeniu dla potrzeb dostępności lub wyświetlania w kiosku.

Rozpoczęcie

Dodaj zależność Maven i zaimportuj pakiet 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 dla Java jest na licencji MIT i dostępny pod adresem https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Java.

Powiązane zasoby