استخراج قائم على المنطقة باستخدام Java

استخراج النص من منطقة صفحة مستطيلة

استخدام TextSearchOptions مع Rectangle لتقييد الاستخراج إلى مساحة محددة على الصفحة.

  1. افتح ملف PDF المصدر في Document مثال.
  2. أنشئ كائنًا من الفئة TextAbsorber لجمع النص من منطقة الصفحة المحددة.
  3. أنشئ كائنًا من الفئة TextSearchOptions للهدف Rectangle وفعّل setLimitToPageBounds(true) لذا يظل الاستخراج داخل صندوق الصفحة المرئي.
  4. طبّق خيارات البحث المكوّنة على absorber وزُر الهدف Page.
  5. اكتب مخزن النص المستخرج إلى ملف الخرج.
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 لفحص مستطيلات الأقسام ومضلعات الفقرات مع النص المستخرج.

  1. افتح ملف PDF المصدر في Document مثال.
  2. أنشئ كائنًا من الفئة ParagraphAbsorber وزيارة الهدف Page لبناء معلومات ترميز الصفحة.
  3. اقرأ نتيجة ترميز الصفحة الأولى وتكرّر عبر أقسامها وفقراتها.
  4. اجمع كل مستطيل قسم، ومضلع الفقرة، ونص الفقرة المعاد بناؤه من TextFragment خطوط.
  5. أنشئ تقرير الإخراج مع تفاصيل الهندسة والنص المستخرج.
  6. اكتب التفاصيل المستخرجة إلى ملف الإخراج.
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());
    }
}