Manipolazione di documenti PDF in Java

Aspose.PDF FOSS per Java fornisce un ricco insieme di API per manipolare documenti PDF esistenti — divisione, concatenazione, estrazione di pagine, inserimento di intervalli di pagine e ridimensionamento del contenuto all’interno delle pagine. Queste funzionalità sono concentrate in PdfFileEditor e nelle sue classi associate ContentsResizeParameters e ContentsResizeValue.

PdfFileEditor: Operazioni di base delle pagine

La classe PdfFileEditor è la struttura centrale per operazioni PDF di alto livello. Fornisce metodi per concatenare più file PDF, estrarre sottoinsiemi di pagine, dividere un documento in pagine individuali e inserire pagine da un documento a un altro in una posizione specifica.

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

I metodi chiave includono:

  • concatenate(inputFiles, outputFile) — unisce più documenti in ordine
  • extract(inputFile, startPage, endPage, outputFile) — esporta un intervallo contiguo
  • extract(inputFile, pageNumbers, outputFile) — esporta un insieme non contiguo
  • splitToPages(inputFile) — suddivide in un ByteArrayOutputStream per pagina
  • insert(inputFile, insertPosition, portFile, startPage, endPage, outputFile) — inserisce un intervallo
  • delete(inputFile, pageNumbers, outputFile) — rimuove pagine specifiche
  • append(inputFile, portFile, startPage, endPage, outputFile) — aggiunge un intervallo di pagine

Per file di grandi dimensioni, setUseDiskBuffer(true) passa lo storage interno da heap a disco.

Ridimensionamento del contenuto con ContentsResizeParameters

PdfFileEditor.resizeContents() regola il contenuto entro i confini della pagina esistente. Ogni margine — sinistro, destro, superiore, inferiore — e la larghezza e altezza del contenuto sono specificati come istanze ContentsResizeValue, costruite tramite i metodi factory ContentsResizeValue.percents(value) o 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");
}

Il costruttore a sei argomenti per ContentsResizeParameters accetta i valori nell’ordine: leftMargin, contentsWidth, rightMargin, topMargin, contentsHeight, bottomMargin. Tutti e sei devono sommare al 100% quando si usano valori percentuali, oppure corrispondere alle dimensioni della pagina quando si usano valori assoluti in punti.

Ridimensionamento di pagine specifiche

Quando solo un sottoinsieme di pagine richiede il ridimensionamento, la sovraccarico che accetta un array di interi con i numeri di pagina mira a quelle pagine lasciando inalterate le altre:

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() e isPercent() consentono di ispezionare il valore memorizzato e determinare se rappresenta una percentuale o un conteggio assoluto di punti.

Layout per opuscolo e N-Up

PdfFileEditor include makeBooklet() per imporre le pagine in ordine di opuscolo a doppia faccia e makeNUp() per affiancare più pagine per foglio. Entrambi i metodi accettano percorsi di file o stream:

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: Controllo zoom per pagina

PdfPageEditor mira a proprietà individuali della pagina come il livello di zoom. setZoom() accetta un moltiplicatore float che controlla l’ingrandimento iniziale quando il documento viene aperto in un visualizzatore:

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

I valori di 0.0 o negativi vengono rifiutati — getZoom() restituisce 1.0 in tali casi. Questo rende PdfPageEditor adatto per preparare documenti che devono aprirsi a un ingrandimento specifico per casi d’uso di accessibilità o visualizzazione su chiosco.

Guida introduttiva

Aggiungi la dipendenza Maven e importa il pacchetto 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 per Java è rilasciato con licenza MIT ed è disponibile su https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Java.

Risorse correlate