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 ที่สร้างขึ้นดังที่แสดงด้านล่าง