如何使用Java平鋪PDF文件中的頁面內容?

2019-10-16 22:25:19

如何使用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.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 { 

      //Creating a PdfWriter object 
      String dest = "tilingPdfPages.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();    

      //Getting the size of the page 
      PdfFormXObject pageCopy = origPage.copyAsFormXObject(destpdf);  

      //Tile size 
      Rectangle tileSize = PageSize.A4.rotate(); 

      AffineTransform transformationMatrix = AffineTransform.getScaleInstance( 
         tileSize.getWidth() / orig.getWidth() * 2f, 
         tileSize.getHeight() / orig.getHeight() * 2f); 

      //The first tile 
      PdfPage page = destpdf.addNewPage(PageSize.A4.rotate()); 

      PdfCanvas canvas = new PdfCanvas(page); 
      canvas.concatMatrix(transformationMatrix); 
      canvas.addXObject(pageCopy, 0, -orig.getHeight() / 2f); 

      //The second tile 
      page = destpdf.addNewPage(PageSize.A4.rotate()); 

      canvas = new PdfCanvas(page); 
      canvas.concatMatrix(transformationMatrix); 
      canvas.addXObject(pageCopy, -orig.getWidth() / 2f, -orig.getHeight() / 2f); 

      //The third tile 
      page = destpdf.addNewPage(PageSize.A4.rotate()); 

      canvas = new PdfCanvas(page); 
      canvas.concatMatrix(transformationMatrix); 
      canvas.addXObject(pageCopy, 0, 0); 

      //The fourth tile 
      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..");  
   }     
}

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

PDF created successfully..

輸出檔案內容如下所示 -