iText - Réduire le contenu
Dans ce chapitre, nous verrons comment mettre à l'échelle une image sur un document PDF à l'aide de la bibliothèque iText.
Réduire le contenu d'un PDF
Voici les étapes pour réduire le contenu d'une page PDF à l'aide de la bibliothèque iText.
Étape 1: Création d'un objet PdfWriter et PdfReader
le PdfWriterLa classe représente le DocWriter pour un PDF. Cette classe appartient au packagecom.itextpdf.kernel.pdf. Le constructeur de cette classe accepte une chaîne, représentant le chemin du fichier où le PDF doit être créé.
Instanciez la classe PdfWriter en passant une valeur de chaîne (représentant le chemin où vous devez créer un PDF) à son constructeur, comme indiqué ci-dessous.
// Creating a PdfWriter object
String dest = "C:/itextExamples/shrinking.pdf";
PdfWriter writer = new PdfWriter(dest);
Pour lire les données d'un pdf existant, créez un PdfReader objet comme indiqué ci-dessous.
// Creating a PdfReader
String src = "C:/itextExamples/pdfWithImage.pdf";
PdfReader reader = new PdfReader(src);
Étape 2: Création d'un ou plusieurs objets PdfDocument
le PdfDocumentclass est la classe qui représente le document PDF dans iText. Cette classe appartient au packagecom.itextpdf.kernel.pdf. Pour instancier cette classe (en écriture), vous devez passer un objet de la classePdfWriter à son constructeur.
Créez des documents PDF source et de destination en passant le PdfWriter et PdfReader objets aux constructeurs, comme indiqué ci-dessous.
// Creating a PdfDocument objects
PdfDocument destpdf = new PdfDocument(writer);
PdfDocument srcPdf = new PdfDocument(reader);
Étape 3: Ouverture d'une page à partir du PDF existant
Obtenez une page du PDF source à l'aide de getPage() méthode de la PdfPageclasse. À l'aide de cet objet, obtenez la taille de la page du document source, comme indiqué ci-dessous.
// Opening a page from the existing PDF
PdfPage origPage = srcPdf.getPage(1);
// Getting the page size
Rectangle orig = origPage.getPageSizeWithRotation();
Étape 4: Réduire le contenu du pdf source
En utilisant le getScaleInstance() méthode de la AffineTransform classe, réduisez le contenu d'une page du document source, comme indiqué ci-dessous.
// Shrink original page content using transformation matrix
AffineTransform transformationMatrix = AffineTransform.getScaleInstance(
page.getPageSize().getWidth()/ orig.getWidth()/2,
page.getPageSize().getHeight()/ orig.getHeight()/2);
Étape 5: Copie de la page
Concaténer le affine transform matrix, créé à l'étape précédente, à la matrice du canvas objet du document PDF de destination, comme indiqué ci-dessous.
// Concatenating the affine transform matrix to the current matrix
PdfCanvas canvas = new PdfCanvas(page);
canvas.concatMatrix(transformationMatrix);
Maintenant, ajoutez la copie de page au canvas objet du PDF de destination vers le document source, comme indiqué ci-dessous.
// Add the object to the canvas
PdfFormXObject pageCopy = origPage.copyAsFormXObject(destpdf);
canvas.addXObject(pageCopy, 0, 0);
Étape 6: Création de l'objet Document
le Document classe du package com.itextpdf.layoutest l'élément racine lors de la création d'un PDF autonome. L'un des constructeurs de cette classe accepte un objet de la classe PdfDocument.
Instancier le Document class en passant l'objet de la classe PdfDocument, comme indiqué ci-dessous.
// Creating a Document
Document document = new Document(destpdf);
Étape 7: fermeture du document
Fermez le document à l'aide du close() méthode de la Document classe, comme indiqué ci-dessous.
// Closing the document
document.close();
Exemple
Le programme Java suivant montre comment réduire le contenu d'une page PDF à l'aide de la bibliothèque iText. Il crée un document PDF avec le nomshrinkingPDF.pdf, réduit l'image dans le pdf et l'enregistre dans le chemin C:/itextExamples/
Enregistrez ce code dans un fichier avec un nom 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..");
}
}
Compilez et exécutez le fichier Java enregistré à partir de l'invite de commande à l'aide des commandes suivantes -
javac ShrinkingPDF.java
java ShrinkingPDF
Lors de l'exécution, le programme ci-dessus crée un document PDF, affichant le message suivant.
Table created successfully..
Si vous vérifiez le chemin spécifié, vous pouvez trouver le document PDF créé comme indiqué ci-dessous.