当前位置: 首页 > 知识库问答 >
问题:

无法使用java apache pdfbox从PDF中提取特定坐标的值

夔波
2023-03-14

我的任务是从PDF中提取特定坐标的文本。

我使用Apache Pdfbox客户端进行数据提取。

为了从PDF中获取x、y、高度和宽度坐标,我使用PDF x更改工具,单位为毫米。当我在矩形中传递值时,值不是空值。

public String getTextUsingPositionsUsingPdf(String pdfLocation, int pageNumber, double x, double y, double width,
                double height) throws IOException {
            String extractedText = "";
            // PDDocument Creates an empty PDF document. You need to add at least
            // one page for the document to be valid.
            // Using load method we can load a PDF document
            PDDocument document = null;
            PDPage page = null;
            try {
                if (pdfLocation.endsWith(".pdf")) {
                    document = PDDocument.load(new File(pdfLocation));
                    int getDocumentPageCount = document.getNumberOfPages();
                    System.out.println(getDocumentPageCount);

                    // Get specific page. THe parameter is pageindex which starts with // 0. If we need to
                    // access the first page then // the pageIdex is 0 PDPage
                    if (getDocumentPageCount > 0) {
                        page = document.getPage(pageNumber + 1);
                    } else if (getDocumentPageCount == 0) {
                        page = document.getPage(0);
                    }
                    // To create a rectangle by passing the x axis, y axis, width and height 
                    Rectangle2D rect = new Rectangle2D.Double(x, y, width, height);
                    String regionName = "region1";

                    // Strip the text from PDF using PDFTextStripper Area with the
                    // help of Rectangle and named need to given for the rectangle
                    PDFTextStripperByArea stripper = new PDFTextStripperByArea();
                    stripper.setSortByPosition(true);
                    stripper.addRegion(regionName, rect);
                    stripper.extractRegions(page);
                    System.out.println("Region is " + stripper.getTextForRegion("region1"));
                    extractedText = stripper.getTextForRegion("region1");
                } else {
                    System.out.println("No data return");
                }
            } catch (IOException e) {
                System.out.println("The file  not found" + "");
            } finally {
                document.close();
            }
            // Return the extracted text and this can be used for assertion
            return extractedText;
        }

请建议我的方法是否正确...

共有1个答案

公冶峰
2023-03-14

我已经使用了这个PDF教程点。com/uipath/uipath\u教程。pdf。。我试图找到文本“竞赛的一部分”,其中x=55.6 mm y=168.8宽度=210.0 mm,高度=297.0。但我得到的是空值

我用这些输入测试了您的方法:

System.out.println("Extracting like Venkatachalam Neelakantan from uipath_tutorial.pdf\n");
float MM_TO_UNITS = 1/(10*2.54f)*72;
String text = getTextUsingPositionsUsingPdf("src/test/resources/mkl/testarea/pdfbox2/extract/uipath_tutorial.pdf",
        0, 55.6 * MM_TO_UNITS, 168.8 * MM_TO_UNITS, 210.0 * MM_TO_UNITS, 297.0 * MM_TO_UNITS);
System.out.printf("\n---\nResult:\n%s\n", text);

(ExtractText测试testUiPathTutorial)

并得到了结果

 part of contents of this e-book in any manner without written consent 

te the contents of our website and tutorials as timely and as precisely as 
, the contents may contain inaccuracies or errors. Tutorials Point (I) Pvt. 
guarantee regarding the accuracy, timeliness or completeness of our 
tents including this tutorial. If you discover any errors on our website or 
ease notify us at contact@tutorialspoint.com 

i 

假设你实际上是在寻找“一部分内容”,而不是“比赛的一部分”,只缺少“a”;可能在测量时,您查找的是可见字母绘图的开头,但实际的图示符原点稍早于此。如果选择稍小的x,例如54.6 mm,则也会得到“a”。

考虑到矩形的宽度和高度,你得到的不仅仅是“内容的一部分”,这显然并不奇怪。

如果您想知道MM\u TO\u单位的常数,请看看这个答案。

 类似资料:
  • 有可能吗?如果是,那么它可以怎么做。

  • 我目前正在刮这个网站,以建立一个汽车数据集,我有一个方程式建立循环通过网站的每一页,而刮。然而,我无法提取文本,我需要使这一工作。 下面的代码片段是我试图刮去的标记。我需要得到现场的车辆数量。 这张图片显示了我正在尝试删除的站点元素 下面是我用来刮取该元素的代码: 此代码返回以下内容: 然后我检查了一下为什么返回soup.select给我的所有内容来得到错误代码: 它返回: 为什么给我一个空名单?

  • 问题内容: 我已将一些地址上传到BatchGeo,并下载了要从中提取坐标的结果KML文件。我设法在这里在线整理了混乱的文本文件,但是我不知道如何解析它以提取坐标。 似乎有几个适用于python的kml库,但在文档方面却没有太多(例如pyKML)。通过本教程,我已经了解了这一点,并创建了一个’lxml.etree._ElementTree’对象,但不确定其属性: 这给出了错误: 那么如何获取坐标列表

  • 我要提取的数据来自这个网站https://www.adobe.com/support/security/advisories/apsa11-04.html。我只想提取 发布日期:2011年12月6日最后更新:2012年1月10日漏洞标识符:APSA11-04 CVE编号:CVE-2011-2462 代码: 输出: 我不想要这些信息。我该如何过滤呢? 平台:全部*注意:Adobe Reader fo

  • 我想从现有的pdf中获取图像字段,并用其他图像填充它,以使用java中的pdfbox库创建新的pdf文件

  • 问题内容: 我想使用PDFMiner从PDF文件中提取所有文本框和文本框坐标。 其他许多Stack Overflow帖子都介绍了如何以有序方式提取所有文本,但是我该如何做获取文本和文本位置的中间步骤呢? 给定一个PDF文件,输出应类似于: 问题答案: 换行符在最终输出中转换为下划线。这是我发现的最小工作解决方案。