iText - Restringere il contenuto
In questo capitolo vedremo come ridimensionare un'immagine su un documento PDF utilizzando la libreria iText.
Restringere il contenuto in un PDF
Di seguito sono riportati i passaggi per ridurre il contenuto di una pagina PDF utilizzando la libreria iText.
Passaggio 1: creazione di un oggetto PdfWriter e PdfReader
Il PdfWriterclass rappresenta il DocWriter per un PDF. Questa classe appartiene al pacchettocom.itextpdf.kernel.pdf. Il costruttore di questa classe accetta una stringa, che rappresenta il percorso del file in cui deve essere creato il PDF.
Istanziare la classe PdfWriter passando un valore stringa (che rappresenta il percorso in cui è necessario creare un PDF) al suo costruttore, come mostrato di seguito.
// Creating a PdfWriter object
String dest = "C:/itextExamples/shrinking.pdf";
PdfWriter writer = new PdfWriter(dest);
Per leggere i dati da un PDF esistente, creare un file PdfReader oggetto come mostrato di seguito.
// Creating a PdfReader
String src = "C:/itextExamples/pdfWithImage.pdf";
PdfReader reader = new PdfReader(src);
Passaggio 2: creazione di uno o più oggetti PdfDocument
Il PdfDocumentclass è la classe che rappresenta il documento PDF in iText. Questa classe appartiene al pacchettocom.itextpdf.kernel.pdf. Per istanziare questa classe (in modalità di scrittura), è necessario passare un oggetto della classePdfWriter al suo costruttore.
Crea documenti PDF di origine e di destinazione passando il file PdfWriter e PdfReader oggetti ai costruttori, come mostrato di seguito.
// Creating a PdfDocument objects
PdfDocument destpdf = new PdfDocument(writer);
PdfDocument srcPdf = new PdfDocument(reader);
Passaggio 3: apertura di una pagina dal PDF esistente
Ottieni una pagina dal PDF di origine utilizzando il file getPage() metodo del PdfPageclasse. Usando questo oggetto, ottieni le dimensioni della pagina del documento di origine, come mostrato di seguito.
// Opening a page from the existing PDF
PdfPage origPage = srcPdf.getPage(1);
// Getting the page size
Rectangle orig = origPage.getPageSizeWithRotation();
Passaggio 4: ridurre il contenuto del pdf di origine
Usando il getScaleInstance() metodo del AffineTransform class, riduce il contenuto di una pagina del documento di origine, come mostrato di seguito.
// Shrink original page content using transformation matrix
AffineTransform transformationMatrix = AffineTransform.getScaleInstance(
page.getPageSize().getWidth()/ orig.getWidth()/2,
page.getPageSize().getHeight()/ orig.getHeight()/2);
Passaggio 5: copia della pagina
Concatena il file affine transform matrix, creato nel passaggio precedente, alla matrice del file canvas oggetto del documento PDF di destinazione, come mostrato di seguito.
// Concatenating the affine transform matrix to the current matrix
PdfCanvas canvas = new PdfCanvas(page);
canvas.concatMatrix(transformationMatrix);
Ora aggiungi la copia della pagina al file canvas oggetto del PDF di destinazione nel documento di origine, come mostrato di seguito.
// Add the object to the canvas
PdfFormXObject pageCopy = origPage.copyAsFormXObject(destpdf);
canvas.addXObject(pageCopy, 0, 0);
Passaggio 6: creazione dell'oggetto Documento
Il Document classe del pacchetto com.itextpdf.layoutè l'elemento principale durante la creazione di un PDF autosufficiente. Uno dei costruttori di questa classe accetta un oggetto della classe PdfDocument.
Istanziare il file Document class passando l'oggetto della classe PdfDocument, come mostrato di seguito.
// Creating a Document
Document document = new Document(destpdf);
Passaggio 7: chiusura del documento
Chiudere il documento utilizzando il file close() metodo del Document classe, come mostrato di seguito.
// Closing the document
document.close();
Esempio
Il seguente programma Java dimostra come ridurre il contenuto di una pagina PDF utilizzando la libreria iText. Crea un documento PDF con nomeshrinkingPDF.pdf, riduce l'immagine nel pdf e la salva nel percorso C:/itextExamples/
Salva questo codice in un file con nome ShrinkingPDF.java.
import com.itextpdf.kernel.geom.AffineTransform;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;
import com.itextpdf.layout.Document;
public class ShrinkPDF {
public static void main(String args[]) throws Exception {
// Creating a PdfWriter object
String dest = "C:/itextExamples/shrinking.pdf";
PdfWriter writer = new PdfWriter(dest);
// Creating a PdfReader
String src = "C:/itextExamples/pdfWithImage.pdf";
PdfReader reader = new PdfReader(src);
// Creating a PdfDocument objects
PdfDocument destpdf = new PdfDocument(writer);
PdfDocument srcPdf = new PdfDocument(reader);
// Opening a page from the existing PDF
PdfPage origPage = srcPdf.getPage(1);
// Getting the page size
Rectangle orig = origPage.getPageSizeWithRotation();
// Adding a page to destination Pdf
PdfPage page = destpdf.addNewPage();
// Scaling the image in a Pdf page
AffineTransform transformationMatrix = AffineTransform.getScaleInstance(
page.getPageSize().getWidth()/orig.getWidth()/2,
page.getPageSize().getHeight()/ orig.getHeight()/2);
// Shrink original page content using transformation matrix
PdfCanvas canvas = new PdfCanvas(page);
canvas.concatMatrix(transformationMatrix);
// Add the object to the canvas
PdfFormXObject pageCopy = origPage.copyAsFormXObject(destpdf);
canvas.addXObject(pageCopy, 0, 0);
// Creating a Document object
Document doc = new Document(destpdf);
// Closing the document
doc.close();
System.out.println("Table created successfully..");
}
}
Compilare ed eseguire il file Java salvato dal prompt dei comandi utilizzando i seguenti comandi:
javac ShrinkingPDF.java
java ShrinkingPDF
Al momento dell'esecuzione, il programma di cui sopra crea un documento PDF, visualizzando il seguente messaggio.
Table created successfully..
Se verifichi il percorso specificato, puoi trovare il documento PDF creato come mostrato di seguito.