如何使用Java縮小PDF文件中的內容?

2019-10-16 22:25:21

如何使用Java縮小PDF文件中的內容?

註:iText開發環境設定,下載iText7 jar(社群版:http://github.com/itext/itext7/releases/tag/7.0.4 ) ,建立一個工程:java_itext,並將下載的itext7 jar包和slf4j( http://www.slf4j.org/download.html )工具包新增到構建路徑中。專案結構如下圖所示 -

以下是使用Java縮小PDF文件中的內容的程式。

package com.yiibai;

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 = "shrinking.pdf";
        PdfWriter writer = new PdfWriter(dest);

        // Creating a PdfReader
        String src = "imagsWithPDF.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("Shrink PDF successfully...");
    }
}

執行上面範例程式碼,得到以下結果 -

Shrink PDF successfully...

輸出檔案內容如下所示 -