如何使用 Java 缩小 PDF 文档中的内容

问题描述

如何使用 Java 缩小 PDF 文档中的内容。

解决方案

以下是使用 Java 缩小 PDF 文档中的内容的程序。

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 { 

        //创建 PdfWriter 对象
        String dest = "C:/itextExamples/shrinking.pdf";
        PdfWriter writer = new PdfWriter(dest);
        
        //创建 PdfReader
        String src = "C:/itextExamples/pdfWithImage.pdf";
        PdfReader reader = new PdfReader(src);
        
        //创建 PdfDocument 对象
        PdfDocument destpdf = new PdfDocument(writer);
        PdfDocument srcPdf = new PdfDocument(reader);
        
        //从现有 PDF 打开一页
        PdfPage origPage = srcPdf.getPage(1);
        
        //获取页面大小
        Rectangle orig = origPage.getPageSizeWithRotation();
        
        //将页面添加到目标 Pdf
        PdfPage page = destpdf.addNewPage();
        
        //缩放 Pdf 页面中的图像
        AffineTransform transformationMatrix = AffineTransform.getScaleInstance(
        page.getPageSize().getWidth()/ orig.getWidth()/2,
        page.getPageSize().getHeight()/ orig.getHeight()/2);
        
        //使用转换矩阵缩小原始页面内容
        PdfCanvas canvas = new PdfCanvas(page);
        canvas.concatMatrix(transformationMatrix);
        
        //将对象添加到画布
        PdfFormXObject pageCopy = origPage.copyAsFormXObject(destpdf);
        canvas.addXObject(pageCopy, 0, 0);
        
        //创建 Document 对象
        Document doc = new Document(destpdf);
        
        //关闭文档
        doc.close(); 
      	System.out.println("Table created successfully.."); 
   }
}

输出

缩小图像
java_itext.html