Java 使用ICEpdf提取PDF页面特定区域中的文本

Java 使用ICEpdf提取PDF页面特定区域中的文本,java,pdf,extraction,text-extraction,icepdf,Java,Pdf,Extraction,Text Extraction,Icepdf,是否有任何方法可以使用ICEpdf提取特定区域的文本?我能够提取整个页面,但这不是我想要做的 (我知道PDFBox很好地提取了页面特定矩形区域中的文本。但是,由于在ICEpdf中图像渲染效果更好,我想使用该库。)你在ICEpdf论坛上发表过吗?他们通常很擅长回答那里的问题。你在icepdf论坛上发过帖子吗?他们通常非常擅长回答问题?在表示页面的页面对象上,您可以调用以下方法: PageText pageText = document.getPageText(pagNumber); PageTex

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


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

你在ICEpdf论坛上发表过吗?他们通常很擅长回答那里的问题。

你在icepdf论坛上发过帖子吗?他们通常非常擅长回答问题?

在表示页面的页面对象上,您可以调用以下方法:

PageText pageText = document.getPageText(pagNumber); PageText PageText=document.getPageText(页码); 与捆绑包示例类似。/examples/extraction/PageTextExtraction.java

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

// the currently selected state, ignore highlighted. currentPage.getViewText().clearSelected(); // get page transform, same for all calculations AffineTransform pageTransform = currentPage.getPageTransform( Page.BOUNDARY_CROPBOX, documentViewModel.getViewRotation(), documentViewModel.getViewZoom()); Rectangle2D.Float pageSpaceSelectRectangle = convertRectangleToPageSpace(selectionRectangle, pageTransform); ArrayList pageLines = pageText.getPageLines(); for (LineText pageLine : pageLines) { // check for containment, if so break into words. if (pageLine.getBounds().intersects(pageSpaceSelectRectangle )) { // you have some selected text. } } /** * Converts the rectangle to the space specified by the page tranform. This * is a utility method for converting a selection rectangle to page space * so that an intersection can be calculated to determine a selected state. * * @param mouseRect rectangle to convert space of * @param pageTransform page transform * @return converted rectangle. */ private Rectangle2D convertRectangleToPageSpace(Rectangle mouseRect, AffineTransform pageTransform) { GeneralPath shapePath; try { AffineTransform tranform = pageTransform.createInverse(); shapePath = new GeneralPath(mouseRect); shapePath.transform(tranform); return shapePath.getBounds2D(); } catch (NoninvertibleTransformException e) { logger.log(Level.SEVERE, "Error converting mouse point to page space.", e); } return null; } //当前选定的状态,忽略突出显示。 currentPage.getViewText().clearSelected(); //获取页面转换,所有计算相同 AffineTransform pageTransform=currentPage.getPageTransform( 第2页,请点击CROPBOX, documentViewModel.getViewRotation(), documentViewModel.getViewZoom()); 矩形2D.浮动页面空间选择矩形= convertRectangleToPageSpace(selectionRectangle,pageTransform); ArrayList pageLines=pageText.getPageLines(); 用于(LineText pageLine:pageLines){ //检查是否有遏制措施,如果有,请用言语表达。 if(pageLine.getBounds()相交(pageSpaceSelectRectangle)){ //您有一些选定的文本。 } } /** *将矩形转换为页面格式指定的空间。这 *是将选择矩形转换为页面空间的实用方法 *以便可以计算交点以确定选定状态。 * *@param mous竖立矩形以转换 *@param pageTransform页面转换 *@return转换为矩形。 */ private Rectangle2D convertRectangleToPageSpace(矩形), 仿射变换(pageTransform){ 通用路径形状路径; 试一试{ AffineTransform tranform=pageTransform.createInverse(); shapePath=新的通用路径(鼠标竖立); 形状路径变换(变换); 返回shapePath.getBounds2D(); }捕获(不可逆转换异常){ logger.log(严重级别, “将鼠标点转换为页面空间时出错。”,e); } 返回null; }
在表示页面的页面对象上,可以调用以下方法:

PageText pageText = document.getPageText(pagNumber); PageText PageText=document.getPageText(页码); 与捆绑包示例类似。/examples/extraction/PageTextExtraction.java

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

// the currently selected state, ignore highlighted. currentPage.getViewText().clearSelected(); // get page transform, same for all calculations AffineTransform pageTransform = currentPage.getPageTransform( Page.BOUNDARY_CROPBOX, documentViewModel.getViewRotation(), documentViewModel.getViewZoom()); Rectangle2D.Float pageSpaceSelectRectangle = convertRectangleToPageSpace(selectionRectangle, pageTransform); ArrayList pageLines = pageText.getPageLines(); for (LineText pageLine : pageLines) { // check for containment, if so break into words. if (pageLine.getBounds().intersects(pageSpaceSelectRectangle )) { // you have some selected text. } } /** * Converts the rectangle to the space specified by the page tranform. This * is a utility method for converting a selection rectangle to page space * so that an intersection can be calculated to determine a selected state. * * @param mouseRect rectangle to convert space of * @param pageTransform page transform * @return converted rectangle. */ private Rectangle2D convertRectangleToPageSpace(Rectangle mouseRect, AffineTransform pageTransform) { GeneralPath shapePath; try { AffineTransform tranform = pageTransform.createInverse(); shapePath = new GeneralPath(mouseRect); shapePath.transform(tranform); return shapePath.getBounds2D(); } catch (NoninvertibleTransformException e) { logger.log(Level.SEVERE, "Error converting mouse point to page space.", e); } return null; } //当前选定的状态,忽略突出显示。 currentPage.getViewText().clearSelected(); //获取页面转换,所有计算相同 AffineTransform pageTransform=currentPage.getPageTransform( 第2页,请点击CROPBOX, documentViewModel.getViewRotation(), documentViewModel.getViewZoom()); 矩形2D.浮动页面空间选择矩形= convertRectangleToPageSpace(selectionRectangle,pageTransform); ArrayList pageLines=pageText.getPageLines(); 用于(LineText pageLine:pageLines){ //检查是否有遏制措施,如果有,请用言语表达。 if(pageLine.getBounds()相交(pageSpaceSelectRectangle)){ //您有一些选定的文本。 } } /** *将矩形转换为页面格式指定的空间。这 *是将选择矩形转换为页面空间的实用方法 *以便可以计算交点以确定选定状态。 * *@param mous竖立矩形以转换 *@param pageTransform页面转换 *@return转换为矩形。 */ private Rectangle2D convertRectangleToPageSpace(矩形), 仿射变换(pageTransform){ 通用路径形状路径; 试一试{ AffineTransform tranform=pageTransform.createInverse(); shapePath=新的通用路径(鼠标竖立); 形状路径变换(变换); 返回shapePath.getBounds2D(); }捕获(不可逆转换异常){ logger.log(严重级别, “将鼠标点转换为页面空间时出错。”,e); } 返回null; }
非常感谢您的输入,我会计算出来并发布在这里,您的解决方案已经很酷(但是我会处理精度问题)非常感谢您的输入,我会计算出来并发布在这里,您的解决方案已经很酷(但是我会处理精度问题)