วิธีอ่านไฟล์ pdf ใน Java

PDF เป็นรูปแบบเอกสารดิจิทัลที่ใช้กันอย่างแพร่หลาย เราสามารถแยกวิเคราะห์เอกสาร PDF และแยกข้อความและรูปภาพออกจากเอกสารเหล่านั้นโดยทางโปรแกรม อาจมีประโยชน์ในหลายกรณี เช่น การวิเคราะห์ข้อความ การดึงข้อมูล การแปลงเอกสาร เป็นต้น ในบทความนี้ เราจะเรียนรู้วิธีแยกข้อความและรูปภาพจากเอกสาร PDF โดยใช้ Java

หัวข้อต่อไปนี้จะครอบคลุมในบทความนี้:

Java API เพื่อแยกข้อความและรูปภาพจากเอกสาร PDF

สำหรับการแยกข้อความและรูปภาพจากเอกสาร PDF เราจะใช้ GroupDocs.Parser for Java API ช่วยให้สามารถดึงข้อความ ข้อมูลเมตา และรูปภาพดิบ ที่มีการจัดรูปแบบและมีโครงสร้าง จากไฟล์ของ รูปแบบที่รองรับ โปรด ดาวน์โหลด JAR ของ API หรือเพิ่มการกำหนดค่า pom.xml ต่อไปนี้ในแอปพลิเคชัน Java ที่ใช้ Maven

<repository>
	<id>GroupDocsJavaAPI</id>
	<name>GroupDocs Java API</name>
	<url>https://repository.groupdocs.com/repo/</url>
</repository>
<dependency>
	<groupId>com.groupdocs</groupId>
	<artifactId>groupdocs-parser</artifactId>
	<version>22.3</version> 
</dependency>

การแยกข้อความ Java PDF

เราสามารถแยกวิเคราะห์เอกสาร PDF และแยกข้อความโดยทำตามขั้นตอนด้านล่าง:

  • ขั้นแรก โหลดไฟล์ PDF โดยใช้คลาส Parser
  • จากนั้น เรียกใช้เมธอด Parser.getText() เพื่อแยกข้อความจากเอกสารที่โหลด
  • จากนั้นรับผลลัพธ์ในวัตถุคลาส TextReader
  • สุดท้าย ให้เรียกใช้เมธอด TextReader.readToEnd() เพื่ออ่านอักขระทั้งหมดตั้งแต่ตำแหน่งปัจจุบันจนถึงจุดสิ้นสุดของโปรแกรมอ่านข้อความ แล้วส่งคืนเป็นสตริงเดียว

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีแยกข้อความจากไฟล์ PDF โดยใช้ Java

// ตัวอย่างโค้ดนี้สาธิตวิธีแยกวิเคราะห์ PDF และแยกข้อความ
// สร้างอินสแตนซ์ของคลาส Parser
Parser parser = new Parser("D:\\Files\\Parser\\sample.pdf");

// แยกข้อความลงในเครื่องอ่าน
try (TextReader reader = parser.getText()) {
    // พิมพ์ข้อความจากเอกสาร
    // หากไม่รองรับการแยกข้อความ โปรแกรมอ่านจะเป็นโมฆะ
    System.out.println(reader == null ? "Text extraction isn't supported" : reader.readToEnd());
}
แยกข้อความจากเอกสาร PDF โดยใช้ Java

แยกข้อความจากเอกสาร PDF โดยใช้ Java

แยกข้อความจากหน้าเฉพาะของเอกสาร PDF โดยใช้ Java

คุณสามารถแยกวิเคราะห์เอกสาร PDF และแยกข้อความจากหน้าใดหน้าหนึ่งได้โดยทำตามขั้นตอนง่ายๆ ที่ระบุไว้ด้านล่าง:

  • ขั้นแรก โหลดไฟล์ PDF โดยใช้คลาส Parser
  • จากนั้น รับข้อมูลเอกสารโดยใช้เมธอด Parser.getDocumentInfo()
  • จากนั้นตรวจสอบว่า IDocumentInfo.getPageCount() ไม่เป็นศูนย์หรือไม่
  • หลังจากนั้นให้เรียกใช้เมธอด Parser.getText() พร้อมดัชนีหน้าเพื่อแยกข้อความจากหน้านั้นและรับผลลัพธ์ในอ็อบเจ็กต์คลาส TextReader
  • สุดท้าย แสดงผลลัพธ์โดยการเรียกเมธอด TextReader.readToEnd() เพื่ออ่านข้อความที่แยกออกมา

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการแยกข้อความจากเพจเฉพาะโดยใช้ Java

// ตัวอย่างโค้ดนี้สาธิตวิธีแยกวิเคราะห์ PDF และแยกข้อความจากหน้าใดหน้าหนึ่ง
// สร้างอินสแตนซ์ของคลาส Parser
Parser parser = new Parser("D:\\Files\\Parser\\sample.pdf");

// รับข้อมูลเอกสาร
IDocumentInfo documentInfo = parser.getDocumentInfo();

// ตรวจสอบว่าเอกสารมีหน้าหรือไม่
if (documentInfo == null || documentInfo.getRawPageCount() == 0) {
    System.out.println("Document hasn't pages.");
    return;
}

// แยกข้อความลงในเครื่องอ่าน
try (TextReader reader = parser.getText(1)) {
    // พิมพ์ข้อความจากเอกสาร
    // หากไม่รองรับการแยกข้อความ โปรแกรมอ่านจะเป็นโมฆะ
    System.out.println(reader.readToEnd());
}

API ยังช่วยให้ตรวจสอบว่าเอกสารรองรับคุณสมบัติการแยกข้อความหรือไม่ เพื่อจุดประสงค์นี้ เราสามารถใช้คุณสมบัติ Parser.getFeatures().isText() ได้ โปรดอ่านเพิ่มเติมเกี่ยวกับ คุณสมบัติที่รองรับ

แยกรูปภาพจาก PDF (Java)

เราสามารถแยกวิเคราะห์เอกสาร PDF และแยกรูปภาพโดยทำตามขั้นตอนด้านล่าง:

  • ขั้นแรก โหลดไฟล์ PDF โดยใช้คลาส Parser
  • จากนั้น เรียกใช้เมธอด Parser.getImages() และรับคอลเลกชันของออบเจ็กต์ PageImageArea จากเอกสารที่โหลด
  • จากนั้นตรวจสอบว่าคอลเลกชันไม่เป็นโมฆะหรือไม่
  • หลังจากนั้น วนซ้ำรูปภาพที่พบทั้งหมด
  • สุดท้ายแสดงรายละเอียดรูปภาพ

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีรับรายละเอียดรูปภาพจากไฟล์ PDF โดยใช้ Java

// ตัวอย่างโค้ดนี้สาธิตวิธีแยกวิเคราะห์ PDF และรับรูปภาพ
// สร้างอินสแตนซ์ของคลาส Parser
Parser parser = new Parser("D:\\Files\\Parser\\images.pdf");

// แยกภาพ
Iterable<PageImageArea> images = parser.getImages();

// ตรวจสอบว่ารองรับการแยกรูปภาพหรือไม่
if (images == null) {
    System.out.println("Images extraction isn't supported");
    return;
}

// วนซ้ำรูปภาพ
for (PageImageArea image : images) {
    // พิมพ์ดัชนีหน้า สี่เหลี่ยมผืนผ้า และประเภทรูปภาพ:
    System.out.println("Page: " + image.getPage().getIndex());
    System.out.println("Image Rectangle: " + image.getRectangle());
    System.out.println("Image Filetype: " + image.getFileType());
    System.out.println("----------------------------------------");
}
รับภาพจากเอกสาร PDF โดยใช้ Java

รับรูปภาพจากเอกสาร PDF โดยใช้ Java

แยกรูปภาพจากหน้าเฉพาะของเอกสาร PDF โดยใช้ Java

เราสามารถแยกรูปภาพจากหน้าใดหน้าหนึ่งได้โดยทำตามขั้นตอนง่าย ๆ ด้านล่างนี้:

  • ขั้นแรก โหลดไฟล์ PDF โดยใช้คลาส Parser
  • จากนั้น รับข้อมูลเอกสารโดยใช้เมธอด Parser.getDocumentInfo()
  • จากนั้นตรวจสอบว่า IDocumentInfo.getPageCount() ไม่เป็นศูนย์หรือไม่
  • หลังจากนั้นให้เรียกใช้เมธอด Parser.getImages() พร้อมด้วยดัชนีหน้าเพื่อแยกรูปภาพจากหน้าเฉพาะนั้น
  • สุดท้าย ทำซ้ำรูปภาพที่พบทั้งหมดและแสดงรายละเอียด

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการแยกรูปภาพจากเพจเฉพาะโดยใช้ Java

// ตัวอย่างโค้ดนี้สาธิตวิธีแยกวิเคราะห์ PDF และรับรูปภาพจากหน้าใดหน้าหนึ่ง
// สร้างอินสแตนซ์ของคลาส Parser
Parser parser = new Parser("D:\\Files\\Parser\\images.pdf");

// รับข้อมูลเอกสาร
IDocumentInfo documentInfo = parser.getDocumentInfo();

// ตรวจสอบว่าเอกสารมีหน้าหรือไม่
if (documentInfo.getPageCount() == 0) {
    System.out.println("Document hasn't pages.");
    return;
}

int pageIndex = 1;

// วนซ้ำรูปภาพ
// เราเพิกเฉยต่อการตรวจสอบค่าว่างเนื่องจากเราได้ตรวจสอบคุณสมบัติการแยกรูปภาพแล้วก่อนหน้านี้
for (PageImageArea image : parser.getImages(pageIndex)) {
  // พิมพ์ดัชนีหน้า สี่เหลี่ยมผืนผ้า และประเภทรูปภาพ:
    System.out.println("Page: " + image.getPage().getIndex());
    System.out.println("Image Rectangle: " + image.getRectangle());
    System.out.println("Image Filetype: " + image.getFileType());
    System.out.println("----------------------------------------");
}

แยกและบันทึกรูปภาพลงในไฟล์โดยใช้ Java

นอกจากนี้เรายังสามารถบันทึกภาพที่แยกออกมาได้โดยทำตามขั้นตอนด้านล่าง:

  • ขั้นแรก โหลดไฟล์ PDF โดยใช้คลาส Parser
  • จากนั้น เรียกใช้เมธอด Parser.getImages() และรับคอลเลกชันของออบเจ็กต์ PageImageArea จากเอกสารที่โหลด
  • จากนั้นสร้างอินสแตนซ์ของคลาส ImageOptions และตั้งค่ารูปแบบรูปภาพ
  • หลังจากนั้น วนซ้ำรูปภาพที่พบทั้งหมด
  • สุดท้าย ให้บันทึกโดยใช้เมธอด save() ใช้เส้นทางไฟล์เอาต์พุตและ ImageOptions เป็นอาร์กิวเมนต์

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการแยกและบันทึกรูปภาพลงในไฟล์โดยใช้ Java

// ตัวอย่างโค้ดนี้สาธิตวิธีการแยกและรูปภาพในไดเร็กทอรี
// สร้างอินสแตนซ์ของคลาส Parser
Parser parser = new Parser("D:\\Files\\Parser\\images.pdf");

// แยกภาพออกจากเอกสาร
Iterable<PageImageArea> images = parser.getImages();

// ตรวจสอบว่ารองรับการแยกรูปภาพหรือไม่
if (images == null) {
    System.out.println("Page images extraction isn't supported");
    return;
}

// สร้างตัวเลือกเพื่อบันทึกภาพในรูปแบบ PNG
ImageOptions options = new ImageOptions(ImageFormat.Png);

int imageNumber = 0;

// วนซ้ำรูปภาพ
for (PageImageArea image : images)
{
    // บันทึกภาพเป็นไฟล์ PNG
    image.save(String.format("D:\\Files\\Parser\\Images\\%d.png", imageNumber), options);
    imageNumber++;
}
แยกและบันทึกรูปภาพลงในไฟล์โดยใช้ Java

แยกและบันทึกรูปภาพลงในไฟล์โดยใช้ Java

รับใบอนุญาตฟรี

คุณสามารถลองใช้ API ได้โดยไม่มีข้อจำกัดในการประเมินโดยขอ ใบอนุญาตชั่วคราวฟรี

บทสรุป

ในบทความนี้ เราได้เรียนรู้วิธี:

  • แยกข้อความทั้งหมดออกจากเอกสาร PDF ทั้งหมดหรือหน้าเฉพาะของเอกสารโดยใช้ Java
  • แยกรูปภาพจากไฟล์ PDF โดยทางโปรแกรม
  • บันทึกภาพที่แยกออกมาบนดิสก์ในเครื่อง

นอกจากนี้ คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ GroupDocs.Parser สำหรับ Java API ได้โดยใช้ เอกสารประกอบ ในกรณีที่มีความคลุมเครือ โปรดติดต่อเราที่ ฟอรั่ม

ดูสิ่งนี้ด้วย