要按顺序读取所有文本元素内容,可以使用PdfBox的文本提取器(PDFTextStripper)。以下是一个示例代码,它使用PDFTextStripper将文本元素提取为字符串,然后将其按顺序输出到控制台。

import java.io.IOException;
import org.apache.pdfbox.cos.COSDocument;
import org.apache.pdfbox.io.RandomAccessRead;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;

public class PdfBoxReader {

    public static void main(String[] args) throws IOException {

        // load PDF document
        String filepath = "example.pdf";
        PDFParser parser = new PDFParser(new RandomAccessRead(filepath));
        parser.parse();
        COSDocument cosDoc = parser.getDocument();
        PDDocument pdDoc = new PDDocument(cosDoc);

        // create text stripper
        PDFTextStripper stripper = new PDFTextStripper();

        // set sorting order for text elements
        stripper.setSortByPosition(true);

        // extract text from document and print to console
        String text = stripper.getText(pdDoc);
        System.out.println(text);

        // close document
        pdDoc.close();
    }
}

如果不想使用PDFTextStripper,可以使用PDFBox的PDFTextStripperByArea类来按顺序读取所有文本元素内容。下面是一个示例代码,它使用PDFTextStripperByArea类来提取文本元素,并将其按顺序输出到控制台。

import java.awt.Rectangle;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.apache.pdfbox.cos.COSDocument;
import org.apache.pdfbox.io.RandomAccessRead;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.text.PDFTextStripperByArea;

public class PdfBoxReader {

    public static void main(String[] args) throws IOException {

        // load PDF document
        String filepath = "example.pdf";
        PDFParser parser = new PDFParser(new RandomAccessRead(filepath));
        parser.parse();
        COSDocument cosDoc = parser.getDocument();
        PDDocument pdDoc = new PDDocument(cosDoc);

        // create list to store text elements
        List<String> textList = new ArrayList<String>();

        // iterate over pages and extract text elements
        for (PDPage page : pdDoc.getPages()) {
            PDFTextStripperByArea stripper = new PDFTextStripperByArea();
            stripper.setSortByPosition(true);
            List<Rectangle> regions = new ArrayList<Rectangle>();
            regions.add(page.getCropBox());
            stripper.addRegion("text", regions);
            stripper.extractRegions(page);
            textList.addAll(stripper.getRegions().get("text"));
        }

        // sort text elements by position
        Collections.sort(textList, new Comparator<String>() {
            public int compare(String s1, String s2) {
                String[] parts1 = s1.split(",");
                String[] parts2 = s2.split(",");
                int x1 = Integer.parseInt(parts1[0]);
                int y1 = Integer.parseInt(parts1[1]);
                int x2 = Integer.parseInt(parts2[0]);
                int y2 = Integer.parseInt(parts2[1]);
                if (y1 < y2) {
                    return -1;
                } else if (y1 > y2) {
                    return 1;
                } else {
                    if (x1 < x2) {
                        return -1;
                    } else if (x1 > x2) {
                        return 1;
                    } else {
                        return 0;
                    }
                }
            }
        });

        // print text elements to console
        for (String text : textList) {
            System.out.println(text);
        }

        // close document
        pdDoc.close();
    }
}

该代码将PDF文档分成页面,并使用PDFTextStripperByArea类提取每个页面上的文本元素。然后,它将文本元素按其位置排序,并将它们按顺序输出到控制台

groovy pdfbox 按顺序读取所有文本元素内容不使用PdfTextStripper

原文地址: https://www.cveoy.top/t/topic/cSQp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录