有没有办法使用 ICEpdf 提取特定区域的文本?我能够提取整个页面,但这不是我想要做的。
(我知道 PDFBox 可以很好地提取页面特定矩形区域中的文本。但是,由于图像渲染在 ICEpdf 中效果更好,我想使用该库。)
有没有办法使用 ICEpdf 提取特定区域的文本?我能够提取整个页面,但这不是我想要做的。
(我知道 PDFBox 可以很好地提取页面特定矩形区域中的文本。但是,由于图像渲染在 ICEpdf 中效果更好,我想使用该库。)
在代表页面的 Page 对象上,您可以调用该方法:
PageText pageText = document.getPageText(pageNumber);
类似于捆绑示例 ./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, 仿射变换页面变换){ 通用路径 shapePath; 尝试 { AffineTransform 变换 = pageTransform.createInverse(); shapePath = new GeneralPath(mouseRect); shapePath.transform(变换); 返回 shapePath.getBounds2D(); } 捕捉(NoninvertibleTransformException e){ logger.log(Level.SEVERE, "将鼠标点转换为页面空间时出错。", e); } 返回空值; }
你在icepdf 论坛上发过帖子吗?他们通常很擅长回答那里的问题?