iText - 縮小內容



在本章中,我們將瞭解如何使用 iText 庫在 PDF 文件上縮放影像。

縮小 PDF 中的內容

以下是使用 iText 庫縮小 PDF 頁面內容的步驟。

步驟 1:建立 PdfWriter 和 PdfReader 物件

PdfWriter 類表示 PDF 的 DocWriter。此類屬於 com.itextpdf.kernel.pdf 包。此類的建構函式接受一個字串,表示要建立 PDF 檔案的路徑。

透過向其建構函式傳遞一個字串值(表示您需要在其中建立 PDF 的路徑)來例項化 PdfWriter 類,如下所示。

// Creating a PdfWriter object 
String dest = "C:/itextExamples/shrinking.pdf"; 
PdfWriter writer = new PdfWriter(dest); 

要從現有 pdf 讀取資料,請建立一個 PdfReader 物件,如下所示。

// Creating a PdfReader 
String src = "C:/itextExamples/pdfWithImage.pdf"; 
PdfReader reader = new PdfReader(src); 

步驟 2:建立 PdfDocument 物件

PdfDocument 類是表示 iText 中 PDF 文件的類。此類屬於 com.itextpdf.kernel.pdf 包。要例項化此類(在寫入模式下),您需要將其類的物件 PdfWriter 傳遞給其建構函式。

透過將 PdfWriterPdfReader 物件傳遞給建構函式,建立源和目標 PDF 文件,如下所示。

// Creating a PdfDocument objects 
PdfDocument destpdf = new PdfDocument(writer);         
PdfDocument srcPdf = new PdfDocument(reader); 

步驟 3:開啟現有 PDF 中的頁面

使用 PdfPage 類的 getPage() 方法從源 PDF 獲取頁面。使用此物件,獲取源文件頁面的大小,如下所示。

// Opening a page from the existing PDF 
PdfPage origPage = srcPdf.getPage(1);       

// Getting the page size 
Rectangle orig = origPage.getPageSizeWithRotation(); 

步驟 4:縮小源 pdf 的內容

使用 AffineTransform 類的 getScaleInstance() 方法,縮小源文件頁面的內容,如下所示。

// Shrink original page content using transformation matrix 
AffineTransform transformationMatrix = AffineTransform.getScaleInstance(    
   page.getPageSize().getWidth()/ orig.getWidth()/2,    
   page.getPageSize().getHeight()/ orig.getHeight()/2); 

步驟 5:複製頁面

將上一步中建立的 仿射變換矩陣 與目標 PDF 文件的 畫布 物件的矩陣連線起來,如下所示。

// Concatenating the affine transform matrix to the current matrix 
PdfCanvas canvas = new PdfCanvas(page);       
canvas.concatMatrix(transformationMatrix); 

現在,將頁面副本新增到目標 PDF 的 畫布 物件到源文件,如下所示。

// Add the object to the canvas 
PdfFormXObject pageCopy = origPage.copyAsFormXObject(destpdf); 
canvas.addXObject(pageCopy, 0, 0); 

步驟 6:建立 Document 物件

com.itextpdf.layout 包的 Document 類是建立自包含 PDF 時的根元素。此類的一個建構函式接受 PdfDocument 類的物件。

透過傳遞 PdfDocument 類的物件來例項化 Document 類,如下所示。

// Creating a Document   
Document document = new Document(destpdf); 

步驟 7:關閉 Document

使用 Document 類的 close() 方法關閉文件,如下所示。

// Closing the document 
document.close();

示例

以下 Java 程式演示瞭如何使用 iText 庫縮小 PDF 頁面的內容。它建立一個名為 shrinkingPDF.pdf 的 PDF 文件,縮小 pdf 中的影像,並將其儲存在路徑 C:/itextExamples/ 中。

將此程式碼儲存在名為 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..");
   }
}      

使用以下命令從命令提示符編譯並執行儲存的 Java 檔案:

javac ShrinkingPDF.java 
java ShrinkingPDF

執行後,上述程式建立一個 PDF 文件,顯示以下訊息。

Table created successfully..

如果驗證指定的路徑,則可以找到如下所示的已建立的 PDF 文件。

Shrinking
廣告