java无法读取跨行突出显示的确切文本
我正在使用PDBox阅读突出显示的PDF文档。我能够用一行字和多个字来阅读突出显示的文本。然而,我无法跨行阅读突出显示的文本。请查找以下示例代码以阅读突出显示的文本
PDDocument pddDocument = PDDocument.load(new File("C:\\pdf-sample.pdf"));
List allPages = pddDocument.getDocumentCatalog().getAllPages();
for (int i = 0; i < allPages.size(); i++) {
int pageNum = i + 1;
PDPage page = (PDPage) allPages.get(i);
List<PDAnnotation> la = page.getAnnotations();
if (la.size() < 1) {
continue;
}
System.out.println("Page number : "+pageNum);
for (PDAnnotation pdfAnnot: la) {
if (pdfAnnot.getSubtype().equals("Popup")) {
continue;
}
PDFTextStripperByArea stripper = new PDFTextStripperByArea();
stripper.setSortByPosition(true);
PDRectangle rect = pdfAnnot.getRectangle();
float x = rect.getLowerLeftX() - 1;
float y = rect.getUpperRightY() - 1;
float width = rect.getWidth();
float height = rect.getHeight() + rect.getHeight() / 4;
int rotation = page.findRotation();
if (rotation == 0) {
PDRectangle pageSize = page.getMediaBox();
y = pageSize.getHeight() - y;
}
Rectangle2D.Float awtRect = new Rectangle2D.Float(x, y, width, height);
stripper.addRegion(Integer.toString(0), awtRect);
stripper.extractRegions(page);
System.out.println("------------------------------------------------------------------");
System.out.println("Annot type = " + pdfAnnot.getSubtype());
System.out.println("Getting text from region = " + stripper.getTextForRegion(Integer.toString(0)) + "\n");
System.out.println("Getting text from comment = " + pdfAnnot.getContents());
}
}
在跨行读取高亮显示的文本时,“pdfAnnot.getRectangle()”函数返回文本周围的最小矩形区域。这将提供比所需更多的文本。我找不到任何API来提取精确突出显示的文本
例如: 从测试PDF文件中提取的文本
Anyone, anywhere can open a PDF file. All you need is the free Adobe Acrobat
Reader. Recipients of other file formats sometimes can't open files because they
don't have the applications used to create the documents.
用例1:
阅读第一个粗体文本,即PDF。阅读单行突出显示的文本时没有问题。将按如下所示打印正确的文本:
输出:
从区域获取文本=“PDF”
用例2:
阅读第二个粗体文本,即Adobe Acrobat reader,共两行。在这种情况下,运行上述程序时提取的文本为:
输出:
从region获取文本=“任何人、任何地方都可以打开PDF文件。您所需要的只是免费的Adobe Acrobat
读者其他文件格式的收件人有时无法打开文件,因为他们”
getRectangle()API提供由高亮显示的文本包围的最小矩形的坐标。因此,它比“AdobeAcrobatReader”更具文本性
- 如何知道提取区域中高亮显示的的起点和终点李>
- 如何知道提取区域中的行数李>
我们将非常感谢您的帮助
# 1 楼答案
要使@roham amini提供的代码在当前版本的Apache PDFBOX(2.0)中工作,您必须做很多更改
这段代码运行良好,我在Freeplane的groovy脚本中使用了它。您可能需要更换记录器。信息功能
# 2 楼答案
我使用以下代码成功地提取了突出显示的文本