iText - Reduzindo o Conteúdo

Neste capítulo, veremos como dimensionar uma imagem em um documento PDF usando a biblioteca iText.

Reduzindo o conteúdo em um PDF

A seguir estão as etapas para reduzir o conteúdo de uma página PDF usando a biblioteca iText.

Etapa 1: Criando um objeto PdfWriter e PdfReader

o PdfWriterclasse representa o DocWriter para um PDF. Esta classe pertence ao pacotecom.itextpdf.kernel.pdf. O construtor desta classe aceita uma string, representando o caminho do arquivo onde o PDF será criado.

Instancie a classe PdfWriter passando um valor de string (representando o caminho onde você precisa criar um PDF) para seu construtor, conforme mostrado abaixo.

// Creating a PdfWriter object 
String dest = "C:/itextExamples/shrinking.pdf"; 
PdfWriter writer = new PdfWriter(dest);

Para ler os dados de um pdf existente, crie um PdfReader objeto como mostrado abaixo.

// Creating a PdfReader 
String src = "C:/itextExamples/pdfWithImage.pdf"; 
PdfReader reader = new PdfReader(src);

Etapa 2: Criação de objeto (s) PdfDocument

o PdfDocumentclass é a classe que representa o documento PDF no iText. Esta classe pertence ao pacotecom.itextpdf.kernel.pdf. Para instanciar esta classe (no modo de escrita), você precisa passar um objeto da classePdfWriter para seu construtor.

Crie documentos PDF de origem e destino passando o PdfWriter e PdfReader objetos aos construtores, como mostrado abaixo.

// Creating a PdfDocument objects 
PdfDocument destpdf = new PdfDocument(writer);         
PdfDocument srcPdf = new PdfDocument(reader);

Etapa 3: abrindo uma página do PDF existente

Obtenha uma página do PDF de origem usando o getPage() método do PdfPageclasse. Usando este objeto, obtenha o tamanho da página do documento fonte, conforme mostrado abaixo.

// Opening a page from the existing PDF 
PdfPage origPage = srcPdf.getPage(1);       

// Getting the page size 
Rectangle orig = origPage.getPageSizeWithRotation();

Etapa 4: Reduzir o conteúdo do pdf de origem

Usando o getScaleInstance() método do AffineTransform classe, reduza o conteúdo de uma página do documento de origem, conforme mostrado abaixo.

// Shrink original page content using transformation matrix 
AffineTransform transformationMatrix = AffineTransform.getScaleInstance(    
   page.getPageSize().getWidth()/ orig.getWidth()/2,    
   page.getPageSize().getHeight()/ orig.getHeight()/2);

Etapa 5: Copiar a página

Concatenar o affine transform matrix, criado na etapa anterior, para a matriz do canvas objeto do documento PDF de destino, conforme mostrado a seguir.

// Concatenating the affine transform matrix to the current matrix 
PdfCanvas canvas = new PdfCanvas(page);       
canvas.concatMatrix(transformationMatrix);

Agora, adicione a cópia da página ao canvas objeto do PDF de destino para o documento de origem, conforme mostrado abaixo.

// Add the object to the canvas 
PdfFormXObject pageCopy = origPage.copyAsFormXObject(destpdf); 
canvas.addXObject(pageCopy, 0, 0);

Etapa 6: Criando o objeto Documento

o Document classe do pacote com.itextpdf.layouté o elemento raiz ao criar um PDF autossuficiente. Um dos construtores desta classe aceita um objeto da classe PdfDocument.

Instancie o Document classe passando o objeto da classe PdfDocument, como mostrado abaixo.

// Creating a Document   
Document document = new Document(destpdf);

Etapa 7: Fechando o Documento

Feche o documento usando o close() método do Document classe, conforme mostrado abaixo.

// Closing the document 
document.close();

Exemplo

O programa Java a seguir demonstra como reduzir o conteúdo de uma página PDF usando a biblioteca iText. Ele cria um documento PDF com o nomeshrinkingPDF.pdf, reduz a imagem no pdf e salva no caminho C:/itextExamples/

Salve este código em um arquivo com o 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..");
   }
}

Compile e execute o arquivo Java salvo a partir do prompt de comando usando os seguintes comandos -

javac ShrinkingPDF.java 
java ShrinkingPDF

Após a execução, o programa acima cria um documento PDF, exibindo a seguinte mensagem.

Table created successfully..

Se você verificar o caminho especificado, poderá encontrar o documento PDF criado conforme mostrado abaixo.