
แยกข้อความจากไฟล์ PDF ใน Java
ในโลกที่เปลี่ยนแปลงไปอย่างรวดเร็ว ปริมาณข้อมูลมีการขยายตัวเพิ่มขึ้นอย่างมาก ไฟล์ PDF ถูกใช้อย่างกว้างขวางในการจัดเก็บและแสดงข้อมูล เป็นการยากที่จะอ่านหน้า PDF จำนวนมากเพื่อเข้าถึงย่อหน้าที่มีประโยชน์ ดังนั้นเราจะเรียนรู้วิธีแยกข้อความจากไฟล์ PDF ใน Java โดยทางโปรแกรม อย่างไรก็ตาม การทำให้กระบวนการแยกข้อความทั้งหมดเป็นแบบอัตโนมัติจะช่วยประหยัดเวลา ความพยายาม และจะนำมาซึ่งประสิทธิภาพ เราจะใช้ [ไลบรารี PDF Java] ที่ติดตั้งง่ายซึ่งมีวิธีที่กำหนดค่าได้เพื่อทำงานกับไฟล์ PDF
ประเด็นต่อไปนี้จะกล่าวถึงในโพสต์บล็อกนี้:
- ไลบรารี PDF Java - ขั้นตอนการติดตั้ง
- แยกข้อความจากไฟล์ PDF ใน Java
- วิธีแยกข้อความจากขอบเขตของหน้าโดยเฉพาะ
- ไลบรารี Java เพื่อแยกข้อความจากไฟล์ PDF ในรูปแบบย่อหน้า
ไลบรารี PDF Java - ขั้นตอนการติดตั้ง
คุณสามารถติดตั้งไลบรารีนี้ได้อย่างง่ายดายในแอปพลิเคชัน Java ของคุณโดยดาวน์โหลด ไฟล์ jar หรือคุณสามารถปฏิบัติตามการกำหนดค่า Maven ต่อไปนี้
พื้นที่เก็บข้อมูล
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>https://repository.aspose.com/repo/</url>
</repository>
การพึ่งพาอาศัยกัน
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-pdf</artifactId>
<version>20.12</version>
<classifier>jdk17</classifier>
</dependency>
แยกข้อความจากไฟล์ PDF ใน Java
ในส่วนนี้ เราจะเขียนขั้นตอนและข้อมูลโค้ดที่แยกข้อความจากทุกหน้าของเอกสาร PDF
ทำตามขั้นตอนต่อไปนี้:
- เปิดเอกสาร PDF โดยสร้างวัตถุของคลาส Document
- เริ่มต้นวัตถุของคลาส TextAbsorber เพื่อดำเนินการแยกข้อความ
- เรียกใช้เมธอด getPages() ที่ยอมรับตัวดูดซับสำหรับทุกเพจ
- รับข้อความที่แยกออกมาโดยการเรียกเมธอด getText()
- เขียนข้อความที่แยกแล้วลงในไฟล์และปิดตัวเขียน
คัดลอกและวางข้อมูลโค้ดต่อไปนี้เพื่อแยกข้อความจากเอกสาร PDF โดยทางโปรแกรม
// เปิดเอกสาร PDF โดยสร้างอ็อบเจ็กต์ของคลาส Document
Document pdfDocument = new Document("INPUT-PDF-FILE");
// เริ่มต้นวัตถุของ TextAbsorber เพื่อดำเนินการแยกข้อความ
TextAbsorber textAbsorber = new TextAbsorber();
// เรียกใช้เมธอด getPages() ที่ยอมรับตัวดูดซับสำหรับเพจทั้งหมด
pdfDocument.getPages().accept(textAbsorber);
// รับข้อความที่แยกออกมาโดยการเรียกเมธอด getText()
String extractedText = textAbsorber.getText();
try {
FileWriter writer = new FileWriter( "PATH-FOR-OUTPUT-FILE/extracted-text.txt", true);
// เขียนบรรทัดข้อความลงในไฟล์
writer.write(extractedText);
// ปิดสตรีม
writer.close();
} catch (java.io.IOException e) {
e.printStackTrace();
}
วิธีแยกข้อความจากขอบเขตของหน้าโดยเฉพาะ
library นี้ยังช่วยให้คุณสามารถแยกข้อความจากหน้าที่ต้องการของเอกสาร PDF ได้
เราจะทำตามขั้นตอนต่อไปนี้เพื่อให้บรรลุเป้าหมายนี้:
- สร้างออบเจ็กต์ของคลาส Document และโหลดไฟล์ PDF ต้นฉบับ
- สร้างอินสแตนซ์ของวัตถุของคลาส TextAbsorber เพื่อแยกข้อมูล
- เรียกใช้เมธอด getTextSearchOptions() ที่อนุญาตให้กำหนดสี่เหลี่ยมซึ่งคั่นข้อความที่แยกออกมา
- เรียกใช้ getPages() เพื่อรับชุดหน้าเอกสารและยอมรับตัวดูดซับสำหรับหน้าแรก
- โทร getText() เพื่อรับข้อความที่แยกออกมาและเขียนลงในไฟล์
- เรียกเมธอด close() เพื่อปิดสตรีม
คัดลอกและวางข้อมูลโค้ดต่อไปนี้ในไฟล์ Java ของคุณ:
// สร้างวัตถุของคลาสเอกสารและโหลดไฟล์ PDF ต้นฉบับ
Document doc = new Document("INPUT-PDF-FILE");
// สร้างอินสแตนซ์วัตถุของ TextAbsorber เพื่อดึงข้อมูล
TextAbsorber absorber = new TextAbsorber();
// เรียกเมธอด getTextSearchOptions() ที่อนุญาตให้กำหนดสี่เหลี่ยมซึ่งคั่นข้อความที่แยกออกมา -
absorber.getTextSearchOptions().setRectangle(new Rectangle(100, 200, 250, 350));
// เรียกใช้ getPages() เพื่อรับคอลเล็กชันหน้าเอกสารและยอมรับตัวดูดซับสำหรับหน้าแรก
doc.getPages().get_Item(1).accept(absorber);
// เรียก getText() เพื่อรับข้อความที่แยกออกมาและเขียนลงในไฟล์
String extractedText = absorber.getText();
// สร้างตัวเขียนและเปิดไฟล์
BufferedWriter writer = new BufferedWriter(new FileWriter(new java.io.File("PATH-FOR-OUTPUT-FILE/ExtractedText.txt")));
// เขียนเนื้อหาที่แยกออกมา
writer.write(extractedText);
// ปิดนักเขียน
writer.close();
ไลบรารี Java เพื่อแยกข้อความจากไฟล์ PDF ในรูปแบบย่อหน้า
ส่วนนี้สาธิตขั้นตอนต่อไปนี้และข้อมูลโค้ดเพื่อแยกข้อมูลจากเอกสาร PDF ในย่อหน้า
- เริ่มต้นวัตถุของคลาส Document และโหลดไฟล์ PDF ต้นฉบับ
- สร้างวัตถุของคลาส ParagraphAbsorber
- โทร visit(Document doc) ที่ทำการค้นหาส่วนและย่อหน้าในเอกสารที่ระบุ
- เรียกใช้ getPageMarkups() เพื่อรับคอลเลกชันของ PageMarkup ที่ถูกดูดซับ
- วนซ้ำคอลเลกชันของ MarkupSection ที่พบในเพจโดยใช้เมธอด getSections()
- เรียกใช้เมธอด getParagraphs() นี้เพื่อรับคอลเลกชันของ MarkupParagraph ที่พบในเพจ
- เรียกเมธอด getLines() เพื่อวนซ้ำบรรทัดของย่อหน้า
// เริ่มต้นวัตถุของคลาสเอกสารและโหลดไฟล์ PDF ต้นฉบับ
Document doc = new Document( "./static/sample.pdf");
// สร้างวัตถุของคลาส ParagraphAbsorber
ParagraphAbsorber absorber = new ParagraphAbsorber();
// โทรเยี่ยมชม(เอกสารเอกสาร) ที่ดำเนินการค้นหาส่วนและย่อหน้าในเอกสารที่ระบุ
absorber.visit(doc);
// เรียกใช้ getPageMarkups() เพื่อรับคอลเล็กชันของ PageMarkup ที่ถูกดูดซับ
for (PageMarkup markup : absorber.getPageMarkups()) {
int i = 1;
// วนซ้ำคอลเลกชันของ MarkupSection ที่พบในเพจโดยใช้เมธอด getSections()
for (MarkupSection section : markup.getSections()) {
int j = 1;
// เรียกใช้เมธอด thsi getParagraphs() เพื่อรับการรวบรวม MarkupParagraph ที่พบในเพจ https://apireference.aspose.com/pdf/java/com.aspose.pdf/PageMarkup#getParagraphs--
for (MarkupParagraph paragraph : section.getParagraphs()) {
StringBuilder paragraphText = new StringBuilder();
// เรียกเมธอด getLines() เพื่อวนซ้ำบรรทัดของย่อหน้า
for (java.util.List<TextFragment> line : paragraph.getLines()) {
for (TextFragment fragment : line) {
paragraphText.append(fragment.getText());
}
paragraphText.append("\r\n");
}
paragraphText.append("\r\n");
System.out.println("Paragraph "+j+" of section "+ i + " on page"+ ":"+markup.getNumber());
System.out.println(paragraphText.toString());
j++;
}
i++;
}
}
รับใบอนุญาตฟรี
คุณสามารถรับ ใบอนุญาตชั่วคราวฟรี เพื่อทดลองใช้ API โดยไม่มีข้อจำกัดในการประเมิน
สรุป
สิ่งนี้นำเราไปสู่จุดสิ้นสุดของบทความนี้ เราได้ศึกษาวิธีการแยกข้อความจากไฟล์ PDF ใน Java โดยทางโปรแกรมแล้ว นอกจากนี้เรายังได้ศึกษาข้อมูลโค้ดเพื่อแยกข้อความจากบริเวณหน้าใดบริเวณหนึ่ง และยังได้สำรวจการแยกข้อความในรูปแบบย่อหน้าอีกด้วย นอกจากนี้ คุณยังอาจอ่าน เอกสารประกอบ เพื่อสำรวจคุณสมบัติอื่นๆ ของ [ไลบรารี PDF Java] นี้ 2 สุดท้ายนี้ conholdate.com เขียนบล็อกโพสต์ใหม่ๆ อย่างต่อเนื่อง ดังนั้นโปรดติดต่อเพื่อรับข้อมูลอัปเดตล่าสุด
ถามคำถาม
ในกรณีที่มีข้อสงสัยใด ๆ โปรดเขียนถึงเราที่ ฟอรั่ม