如何使用 Java 在 PDF 文档中平铺页面内容

问题描述

如何使用 Java 在 PDF 文档中平铺页面内容。

解决方案

以下是使用 Java 在 PDF 中平铺页面内容的程序。

import com.itextpdf.kernel.geom.AffineTransform; 
import com.itextpdf.kernel.geom.PageSize; 
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;  

public class TilingPDFPages { 
   public static void main(String args[]) throws Exception { 
   
        //创建 PdfWriter 对象
        String dest = "C:/itextExamples/tilingPdfPages.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();
        
        //获取页面大小
        PdfFormXObject pageCopy = origPage.copyAsFormXObject(destpdf);
        
        //图块大小
        矩形 tileSize = PageSize.A4.rotate();
        
        AffineTransform transformationMatrix = AffineTransform.getScaleInstance(
        tileSize.getWidth() / orig.getWidth() * 2f,
        tileSize.getHeight() / orig.getHeight() * 2f);
        
        //第一个图块
        PdfPage page = destpdf.addNewPage(PageSize.A4.rotate());
        
        PdfCanvas canvas = new PdfCanvas(page);
        canvas.concatMatrix(transformationMatrix);
        canvas.addXObject(pageCopy, 0, -orig.getHeight() / 2f);
        
        //第二个图块
        page = destpdf.addNewPage(PageSize.A4.rotate());
        
        canvas = new PdfCanvas(page);
        canvas.concatMatrix(transformationMatrix);
        canvas.addXObject(pageCopy, -orig.getWidth() / 2f, -orig.getHeight() / 2f);
        
        //第三个图块
        page = destpdf.addNewPage(PageSize.A4.rotate());
        
        canvas = new PdfCanvas(page);
        canvas.concatMatrix(transformationMatrix);
        canvas.addXObject(pageCopy, 0, 0);
        
        //第四个图块
        page = destpdf.addNewPage(PageSize.A4.rotate());      
        canvas = new PdfCanvas(page); 
        canvas.concatMatrix(transformationMatrix); 
        canvas.addXObject(pageCopy, -orig.getWidth() / 2f, 0);
        destpdf.close(); 
        srcPdf.close(); 
        System.out.println("PDF created successfully..");  
   }     
}

输出

Tile Image
java_itext.html