iText - zmniejszanie zawartości

W tym rozdziale zobaczymy, jak przeskalować obraz w dokumencie PDF za pomocą biblioteki iText.

Zmniejszanie zawartości pliku PDF

Poniżej przedstawiono kroki umożliwiające zmniejszenie zawartości strony PDF za pomocą biblioteki iText.

Krok 1: Tworzenie obiektu PdfWriter i PdfReader

Plik PdfWriterreprezentuje DocWriter dla pliku PDF. Ta klasa należy do pakietucom.itextpdf.kernel.pdf. Konstruktor tej klasy akceptuje ciąg znaków reprezentujący ścieżkę do pliku, w którym ma zostać utworzony plik PDF.

Utwórz wystąpienie klasy PdfWriter, przekazując wartość ciągu (reprezentującą ścieżkę, w której należy utworzyć plik PDF) do jej konstruktora, jak pokazano poniżej.

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

Aby odczytać dane z istniejącego pliku PDF, utwórz plik PdfReader obiekt, jak pokazano poniżej.

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

Krok 2: Tworzenie obiektów PdfDocument

Plik PdfDocumentclass to klasa reprezentująca dokument PDF w iText. Ta klasa należy do pakietucom.itextpdf.kernel.pdf. Aby utworzyć instancję tej klasy (w trybie pisania), musisz przekazać obiekt tej klasyPdfWriter do swojego konstruktora.

Twórz źródłowe i docelowe dokumenty PDF, przekazując plik PdfWriter i PdfReader obiekty do konstruktorów, jak pokazano poniżej.

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

Krok 3: Otwieranie strony z istniejącego pliku PDF

Pobierz stronę ze źródłowego pliku PDF za pomocą rozszerzenia getPage() metoda PdfPageklasa. Używając tego obiektu, uzyskaj rozmiar strony dokumentu źródłowego, jak pokazano poniżej.

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

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

Krok 4: Zmniejszanie zawartości źródłowego pliku PDF

Używając getScaleInstance() metoda AffineTransform class, zmniejsz zawartość strony dokumentu źródłowego, jak pokazano poniżej.

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

Krok 5: Kopiowanie strony

Połącz plik affine transform matrix, utworzony w poprzednim kroku, do macierzy canvas obiekt docelowego dokumentu PDF, jak pokazano poniżej.

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

Teraz dodaj kopię strony do pliku canvas obiektu docelowego PDF do dokumentu źródłowego, jak pokazano poniżej.

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

Krok 6: Tworzenie obiektu dokumentu

Plik Document klasa pakietu com.itextpdf.layoutjest elementem głównym podczas tworzenia samowystarczalnego pliku PDF. Jeden z konstruktorów tej klasy akceptuje obiekt klasy PdfDocument.

Utwórz wystąpienie Document class poprzez przekazanie obiektu klasy PdfDocument, jak pokazano niżej.

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

Krok 7: Zamknięcie dokumentu

Zamknij dokument za pomocą close() metoda Document klasa, jak pokazano poniżej.

// Closing the document 
document.close();

Przykład

Poniższy program w języku Java pokazuje, jak zmniejszyć zawartość strony PDF za pomocą biblioteki iText. Tworzy dokument PDF z nazwąshrinkingPDF.pdf, zmniejsza obraz w pliku PDF i zapisuje go w ścieżce C:/itextExamples/

Zapisz ten kod w pliku o nazwie 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..");
   }
}

Skompiluj i uruchom zapisany plik Java z wiersza poleceń, używając następujących poleceń -

javac ShrinkingPDF.java 
java ShrinkingPDF

Po uruchomieniu powyższy program tworzy dokument PDF, wyświetlając następujący komunikat.

Table created successfully..

Jeśli zweryfikujesz określoną ścieżkę, możesz znaleźć utworzony dokument PDF, jak pokazano poniżej.