iText - การย่อเนื้อหา

ในบทนี้เราจะดูวิธีการปรับขนาดภาพในเอกสาร PDF โดยใช้ไลบรารี iText

การย่อขนาดเนื้อหาใน PDF

ต่อไปนี้เป็นขั้นตอนในการย่อขนาดเนื้อหาของหน้า PDF โดยใช้ไลบรารี iText

ขั้นตอนที่ 1: การสร้างวัตถุ PdfWriter และ PdfReader

PdfWriterคลาสแทน DocWriter สำหรับ PDF คลาสนี้เป็นของแพ็คเกจcom.itextpdf.kernel.pdf. คอนสตรัคเตอร์ของคลาสนี้ยอมรับสตริงซึ่งแสดงถึงพา ธ ของไฟล์ที่จะสร้าง PDF

สร้างอินสแตนซ์คลาส PdfWriter โดยส่งค่าสตริง (แสดงถึงเส้นทางที่คุณต้องการสร้าง PDF) ไปยังตัวสร้างดังที่แสดงด้านล่าง

// 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คลาสคือคลาสที่แสดงถึงเอกสาร PDF ใน iText คลาสนี้เป็นของแพ็คเกจcom.itextpdf.kernel.pdf. ในการสร้างอินสแตนซ์คลาสนี้ (ในโหมดการเขียน) คุณต้องส่งผ่านอ็อบเจ็กต์ของคลาสPdfWriter ไปยังผู้สร้าง

สร้างเอกสาร PDF ต้นทางและปลายทางโดยส่งไฟล์ PdfWriter และ PdfReader วัตถุของตัวสร้างดังที่แสดงด้านล่าง

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

ขั้นตอนที่ 3: เปิดเพจจาก PDF ที่มีอยู่

รับหน้าจาก PDF ต้นทางโดยใช้ไฟล์ getPage() วิธีการของ PdfPageชั้นเรียน. ใช้วัตถุนี้รับขนาดของหน้าเอกสารต้นฉบับดังที่แสดงด้านล่าง

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

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

ขั้นตอนที่ 4: การย่อขนาดเนื้อหาของไฟล์ pdf ต้นฉบับ

ใช้ getScaleInstance() วิธีการของ AffineTransform คลาสย่อขนาดเนื้อหาของหน้าเอกสารต้นทางตามที่แสดงด้านล่าง

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

ขั้นตอนที่ 5: คัดลอกหน้า

เชื่อมต่อไฟล์ affine transform matrixสร้างขึ้นในขั้นตอนก่อนหน้าไปยังเมทริกซ์ของ canvas วัตถุของเอกสาร PDF ปลายทางดังที่แสดงด้านล่าง

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

ตอนนี้เพิ่มสำเนาหน้าลงในไฟล์ canvas ออบเจ็กต์ของ PDF ปลายทางไปยังเอกสารต้นทางดังที่แสดงด้านล่าง

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

ขั้นตอนที่ 6: การสร้างวัตถุเอกสาร

Document คลาสของแพ็คเกจ com.itextpdf.layoutเป็นองค์ประกอบหลักในขณะที่สร้าง PDF แบบพอเพียง หนึ่งในตัวสร้างของคลาสนี้ยอมรับอ็อบเจ็กต์ของคลาส PdfDocument

เริ่มต้นไฟล์ Document คลาสโดยส่งผ่านวัตถุของคลาส PdfDocumentตามที่แสดงด้านล่าง

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

ขั้นตอนที่ 7: การปิดเอกสาร

ปิดเอกสารโดยใช้ close() วิธีการของ Document ชั้นเรียนดังที่แสดงด้านล่าง

// Closing the document 
document.close();

ตัวอย่าง

โปรแกรม Java ต่อไปนี้สาธิตวิธีการย่อขนาดเนื้อหาของเพจ PDF โดยใช้ไลบรารี iText สร้างเอกสาร PDF ที่มีชื่อshrinkingPDF.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 ที่สร้างขึ้นดังที่แสดงด้านล่าง