有没有办法使用 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 论坛上发过帖子吗?他们通常很擅长回答那里的问题?