Programa para reducir el contenido de un documento PDF. Se requiere el archivo jar externo para importar en el programa. A continuación se muestra la implementación de la misma.
Acercarse:
1. Cree un archivo PDF vacío.
- Asigne la ruta del PDF vacío a una variable de string.
- Importe PdfWriter desde el paquete com.itextpdf.kernel.pdf . (PdfWriter nos permite escribir contenido en nuestro archivo PDF)
- PdfWriter acepta una variable de string como parámetro que representa el destino del PDF.
- Inicialice el objeto PdfWriter pasando la ruta del archivo PDF.
2. Cree un documento que represente el archivo PDF vacío.
- Importe PdfDocument desde el paquete com.itextpdf.kernel.pdf . (PdfDocument se usa para representar el pdf en código. Este último se puede usar para agregar o modificar varias funciones, como fuente, imágenes, etcétera)
- PdfDocument acepta un objeto PdfWriter o PdfReader como su parámetro.
- Inicialice PdfDocument pasando el objeto PdfWriter.
3. Repita los pasos anteriores para el PDF original.
- Asigne la ruta del PDF original a una variable de string.
- Importe PdfReader desde el paquete com.itextpdf.kernel.pdf . (PdfReader nos permite leer el contenido de nuestro archivo PDF)
- Pase la ruta del PDF original al constructor de PdfReader.
- Inicialice PdfDocument pasando el objeto PdfReader.
4. Obtenga el tamaño de la página del PDF original.
- Importe PdfPage desde el paquete com.itextpdf.kernel.pdf . (PdfPage representa una página particular en un PDF)
- Importe Rectangle desde el paquete com.itextpdf.kernel.geom .
- El método getPage(int pageNumber) presente en la clase PdfDocument t devuelve un objeto PdfPage de la página específica especificada.
- El método getPageSize() presente en la clase PdfPage devuelve un objeto Rectangle del objeto PdfPage en particular.
5. Obtenga el tamaño de la página del PDF vacío.
- No es posible obtener el tamaño de página de un PDF vacío.
- Entonces, para obtener el tamaño, agregamos una nueva página al PDF vacío usando el método addNewPage() presente en la clase PdfDocument. Los métodos addNewPage() devuelven un objeto PdfPage.
- El método getPageSize() presente en la clase PdfPage devuelve un objeto Rectangle del objeto PdfPage en particular.
6. Crear la versión reducida de la página original.
- Importe AffineTransform desde el paquete com.itextpdf.kernel.geom .
- El nuevo ancho escalado se puede calcular usando (emptyPageWidth/originalPageWidth)/2.
- La nueva altura escalada se puede calcular usando (emptyPageHeight/originalPageHeight)/2.
- El método estático getScaleInstance(doble ancho, doble altura) presente en la clase AffineTransform devuelve un objeto AffineTransform con ancho y alto escalados.
7. Agregue la versión reducida de la página original al PDF vacío.
- Importe PdfCanvas desde el paquete com.itextpdf.kernel.pdf.canvas .
- Inicialice el objeto PdfCanvas pasando la página vacía como parámetro.
- Agregue la array creada anteriormente con tamaños reducidos al lienzo vacío.
- Copie el contenido de la página original usando el método copyAsFormXObject(PdfDocument shrunkenDocument) (devuelve aPdfFormXObject) presente en la clase PdfPage.
- Agregue la página copiada al lienzo usando el método addXObject(PdfXObject xObject, float x, float y).
8. Cree el Documento.
- Importe el documento desde el paquete com.itextpdf.layout .
- Se crea un objeto Documento para hacer una versión legible del PDF.
- Uno de los constructores de la clase Document acepta el objeto PdfDocument como sus parámetros.
- Inicialice el objeto Documento pasando shrunkenDocument como su parámetro.
- El documento se cierra después de crear el objeto para evitar pérdidas de memoria.
Nota: Requiere tarro externo (Descarga haciendo clic aquí).
A continuación se muestra la implementación de la reducción de PDF:
Java
// Java program to shrink the contents of a PDF // Importing the necessary libraries required import com.itextpdf.kernel.pdf.*; import com.itextpdf.kernel.geom.Rectangle; import com.itextpdf.kernel.geom.AffineTransform; import com.itextpdf.kernel.pdf.canvas.PdfCanvas; import com.itextpdf.kernel.pdf.xobject.PdfFormXObject; import com.itextpdf.layout.Document; public class Main { public static void main(String[] args) { // Try catch block is used to handle File Exceptions try { // Destination of the empty PDF String shrunkenPath = "/home/mayur/newGFG.pdf"; // Creating PDF writer object PdfWriter pdfWriter = new PdfWriter(shrunkenPath); // Creating a PdfDocument object for empty pdf PdfDocument shrunkenDocument = new PdfDocument(pdfWriter); // Destination of the original PDF String originalPath = "/home/mayur/GFG.pdf"; // Creating PDF reader object PdfReader pdfReader = new PdfReader(originalPath); // Creating a PdfDocument object for original // pdf PdfDocument originalDocument = new PdfDocument(pdfReader); // Opening the first page of the original PDF PdfPage orignalPage = originalDocument.getPage(1); // Getting the height and width of the original // PDF Rectangle originalPDFSizes = orignalPage.getPageSize(); // Adding a new page to the empty PDF PdfPage emptyPage = shrunkenDocument.addNewPage(); // Getting the height and width of the empty PDF Rectangle emptyPDFsizes = emptyPage.getPageSize(); // Scaling down the original Pdf page double width = emptyPDFsizes.getWidth() / originalPDFSizes.getWidth(); double height = emptyPDFsizes.getHeight() / originalPDFSizes.getHeight(); // Calculating the new width and height double newWidth = width / 2; double newHeight = height / 2; // Creating a matrix with new width and new // height AffineTransform affineTransform = AffineTransform.getScaleInstance( newWidth, newHeight); // Creating an empty canvas PdfCanvas canvas = new PdfCanvas(emptyPage); // Adding the matrix created to the empty canvas canvas.concatMatrix(affineTransform); // Copying the content from the original PDF PdfFormXObject pageCopy = orignalPage.copyAsFormXObject( shrunkenDocument); // Adding the copied page to the canvas canvas.addXObject(pageCopy, (float)newWidth, (float)newHeight); // Creating a Document object to make the PDF // readable Document doc = new Document(shrunkenDocument); // Closing the documents to prevent memory leaks doc.close(); originalDocument.close(); System.out.println( "Shrunken PDF successfully created"); } // Catching any unwanted Exceptions catch (Exception e) { System.err.println(e); } } }
Antes de la ejecución:
Después de la ejecución:
Publicación traducida automáticamente
Artículo escrito por coder_srinivas y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA