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.