استخراج قائم على المنطقة باستخدام Java
Contents
[
Hide
]
استخراج النص من منطقة صفحة مستطيلة
استخدام TextSearchOptions مع Rectangle لتقييد الاستخراج إلى مساحة محددة على الصفحة.
- افتح ملف PDF المصدر في Document مثال.
- أنشئ كائنًا من الفئة TextAbsorber لجمع النص من منطقة الصفحة المحددة.
- أنشئ كائنًا من الفئة TextSearchOptions للهدف Rectangle وفعّل
setLimitToPageBounds(true)لذا يظل الاستخراج داخل صندوق الصفحة المرئي. - طبّق خيارات البحث المكوّنة على absorber وزُر الهدف Page.
- اكتب مخزن النص المستخرج إلى ملف الخرج.
public static void extractTextFromRegion(Path inputFile, Path outputFile, int pageNumber, Rectangle rectangle)
throws Exception {
try (Document document = new Document(inputFile.toString())) {
TextAbsorber absorber = new TextAbsorber();
TextSearchOptions options = new TextSearchOptions(rectangle);
options.setLimitToPageBounds(true);
absorber.setTextSearchOptions(options);
document.getPages().get_Item(pageNumber).accept(absorber);
Files.writeString(outputFile, absorber.getText());
}
}
استخراج الفقرات مع معلومات الهندسة
استخدام ParagraphAbsorber لفحص مستطيلات الأقسام ومضلعات الفقرات مع النص المستخرج.
- افتح ملف PDF المصدر في Document مثال.
- أنشئ كائنًا من الفئة ParagraphAbsorber وزيارة الهدف Page لبناء معلومات ترميز الصفحة.
- اقرأ نتيجة ترميز الصفحة الأولى وتكرّر عبر أقسامها وفقراتها.
- اجمع كل مستطيل قسم، ومضلع الفقرة، ونص الفقرة المعاد بناؤه من TextFragment خطوط.
- أنشئ تقرير الإخراج مع تفاصيل الهندسة والنص المستخرج.
- اكتب التفاصيل المستخرجة إلى ملف الإخراج.
public static void extractParagraphsWithGeometry(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
ParagraphAbsorber absorber = new ParagraphAbsorber();
absorber.visit(document.getPages().get_Item(1));
PageMarkup pageMarkup = absorber.getPageMarkups().get(0);
StringBuilder text = new StringBuilder();
int sectionIndex = 1;
for (MarkupSection section : pageMarkup.getSections()) {
text.append("Section ").append(sectionIndex)
.append(": rectangle = ").append(section.getRectangle()).append("\n");
int paragraphIndex = 1;
for (MarkupParagraph paragraph : section.getParagraphs()) {
text.append(" Paragraph ").append(paragraphIndex)
.append(": polygon = ").append(Arrays.toString(paragraph.getPoints())).append("\n");
StringBuilder paragraphText = new StringBuilder();
for (List<TextFragment> line : paragraph.getLines()) {
for (TextFragment fragment : line) {
paragraphText.append(fragment.getText());
}
paragraphText.append("\r\n");
}
text.append(" Text: ").append(paragraphText).append("\n\n");
paragraphIndex++;
}
sectionIndex++;
}
Files.writeString(outputFile, text.toString());
}
}