【问题标题】:Extracting text in a specific region of PDF page using ICEpdf使用 ICEpdf 提取 PDF 页面特定区域中的文本
【发布时间】:2011-08-16 19:59:10
【问题描述】:

有没有什么方法可以使用 ICEpdf 提取特定区域的文本?我能够提取整个页面,但这不是我想要做的。

(我知道 PDFBox 可以很好地提取页面特定矩形区域中的文本。但是,由于图像渲染在 ICEpdf 中效果更好,我想使用该库。)

【问题讨论】:

    标签: java pdf extraction text-extraction icepdf


    【解决方案1】:

    在代表页面的Page对象上可以调用方法:

    PageText pageText = document.getPageText(pagNumber);

    类似于捆绑示例 ./examples/extraction/PageTextExtraction.java

    PageText 对象包含页面的所有 LineText->WordText->GlyphText 对象。 LineText、WordText 和 GlyphText 都扩展了具有 getBounds() 方法的 AbstractText。这些对象的边界位于 PDF 用户空间中,即第一几何象限。 Java2D 位于第四几何象限。假设您已经有了 selectionRectangle,代码如下:

    // 当前选中状态,忽略高亮。 currentPage.getViewText().clearSelected(); // 获取页面变换,所有计算都一样 仿射变换 pageTransform = currentPage.getPageTransform( Page.BOUNDARY_CROPBOX, documentViewModel.getViewRotation(), documentViewModel.getViewZoom()); Rectangle2D.Float pageSpaceSelectRectangle = convertRectangleToPageSpace(selectionRectangle, pageTransform); ArrayList pageLines = pageText.getPageLines(); for (LineText pageLine : pageLines) { // 检查是否包含,如果是的话就分成单词。 if (pageLine.getBounds().intersects(pageSpaceSelectRectangle)) { // 你有一些选定的文本。 } } /** * 将矩形转换为页面变换指定的空间。这 * 是将选择矩形转换为页面空间的实用方法 * 以便可以计算交叉点以确定选定状态。 * * @param mouseRect 矩形转换空间 * @param pageTransform 页面转换 * @return 转换后的矩形。 */ 私有 Rectangle2D convertRectangleToPageSpace(矩形 mouseRect, 仿射变换页面变换){ GeneralPath 形状路径; 尝试 { AffineTransform 变换 = pageTransform.createInverse(); shapePath = new GeneralPath(mouseRect); shapePath.transform(变换); 返回 shapePath.getBounds2D(); } 捕捉(NoninvertibleTransformException e){ logger.log(Level.SEVERE, "将鼠标点转换为页面空间时出错。", e); } 返回空值; }

    【讨论】:

    • 非常感谢您的意见,我会解决并在这里发布,您的解决方案已经很酷了(不过,我会提高精度)
    【解决方案2】:

    您在icepdf 论坛上发过帖子吗?他们通常很擅长在那里回答问题?

    【讨论】:

      猜你喜欢
      • 2018-01-29
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 2015-08-18
      相关资源
      最近更新 更多