【发布时间】:2011-08-16 19:59:10
【问题描述】:
有没有什么方法可以使用 ICEpdf 提取特定区域的文本?我能够提取整个页面,但这不是我想要做的。
(我知道 PDFBox 可以很好地提取页面特定矩形区域中的文本。但是,由于图像渲染在 ICEpdf 中效果更好,我想使用该库。)
【问题讨论】:
标签: java pdf extraction text-extraction icepdf
有没有什么方法可以使用 ICEpdf 提取特定区域的文本?我能够提取整个页面,但这不是我想要做的。
(我知道 PDFBox 可以很好地提取页面特定矩形区域中的文本。但是,由于图像渲染在 ICEpdf 中效果更好,我想使用该库。)
【问题讨论】:
标签: java pdf extraction text-extraction icepdf
在代表页面的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); } 返回空值; }【讨论】:
您在icepdf 论坛上发过帖子吗?他们通常很擅长在那里回答问题?
【讨论】: