groovy pdfbox 按顺序读取所有文本元素内容不使用PdfTextStripper
要按顺序读取所有文本元素内容,可以使用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类提取每个页面上的文本元素。然后,它将文本元素按其位置排序,并将它们按顺序输出到控制台
原文地址: https://www.cveoy.top/t/topic/cSQp 著作权归作者所有。请勿转载和采集!