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.