当前位置: 首页 > 编程语言 > C#

如何将pdf页面中的文字坐标从左下角变为左上角分享

时间:2023-04-10 12:46:55 C#

如何将pdf页面中的文字坐标从左下角变为左上角左角这样我就可以获得矩形内文本的文本坐标。使用itextsharp.dll提取矩形坐标。基本上我从itextsharp.dll获取矩形坐标,其中itextsharp使用左下角的坐标系。我从PDFBOX获取pdf页面文本,其中PDFBOX使用坐标系作为左上角。我需要帮助将坐标从左下角转换为左上角提前感谢您更新我的问题如果您理解我的问题如果没有提供完整的信息请原谅我..好吧让我尝试从头开始提供更多详细信息。我正在开发一种工具,我可以在其中获得PDF,其中使用评论部分中的一些绘图标记绘制了一个矩形。现在我正在使用iTextsharp读取矩形坐标PdfDictionarypageDict=pdReader.GetPageN(page_no);PdfArrayannotArray=pageDict.GetAsArray(PdfName.ANNOTS);其中pdReader是PdfReader。并使用PDFBOX提取页面文本及其坐标。在我有一个类创建pdfBoxTextExtraction的地方,我处理文本和坐标,以便它返回文本和llx、lly、urx、ury“逐行”请注意逐行而不是逐句。所以我想提取位于矩形坐标内的文本。从itextsharp返回矩形的坐标时我被卡住了,即llx、lly、urx、ury的矩形原点位于左下角,因为从PDFBOX返回的文本坐标的原点位于左上角。然后我意识到我需要调整y轴,使原点从左下角移动到左上角。因为我得到了页面的高度和crop的高度iTextSharp.text.Rectanglemediabox=reader.GetPageSize(page_no);iTextSharp.text.Rectanglecropbox=reader.GetCropBox(page_no);做了一些基本调整lly=mediabox.Top–llyury=mediabox.Top-ury在某些情况下调整大小有效,而在某些PDF中需要调整cropboxlly=cropbox.Top-lllyury=cropbox。顶部-呃,在某些PDF上工作。我所需要的只是帮助调整矩形坐标,以便我得到矩形内的文本希望这很清楚。如果不是,请原谅我并要求ISO-32000-1中定义了相同的PDF格式的坐标系统。该ISO标准说明X轴朝右,Y轴朝上。这是默认值。这些是iText返回的坐标(在幕后,iText解析所有CTM转换)。如果要对iText返回的坐标进行变换,得到Y轴向下的坐标系中的坐标,可以在页面顶部的Y坐标中减去iText返回的Y值。.例如:假设我们正在处理A4页面,底部的Y坐标为0,顶部的Y坐标为842。如果你有Y坐标如y1=806和y2=36,那么你可以这样做:y=842-y;现在y1=36,y2=806。只需使用简单的高中数学就可以反转Y轴的方向。根据其他评论更新:每个页面都有一个媒体框。这定义了最重要的页面边界。可能还有其他页面边界,但它们都不会超出媒体框(如果有,则您的PDF违反了ISO-32000-1)。裁剪框定义了页面的可见区域。默认情况下(例如,如果缺少cropbox条目),cropbox与mediabox重合。在您的评论中,您说您从高位中减去llx。这是不正确的。llx是左下角的x坐标,而高度是在y轴上测量的属性,除非页面旋转。您是否检查过页面字典是否具有/Rotate值?您还声称iText返回的值与PdfBox返回的值不匹配。注意iText返回的值符合ISO标准定义的坐标系。如果PdfBox不遵循这个标准,你应该问PdfBox的人他们为什么不这样做,以及他们使用什么坐标系。也许这是mkl的评论。他写道:Y'=Ymax–Y。X'=X–Xmin。也许PdfBox搜索最大的Y值Ymax和最小的X值Xmin,然后对所有坐标应用上述变换。如果您正在呈现PDF,这是一个有用的转换,但如果您正在使用坐标,例如在页面上相对于文本的特定位置添加内容,那么做这样的事情是不明智的(因为转换后的坐标不再是“PDF”坐标)。备注:你说你需要PdfBox来获取页面的文本。为什么需要这个额外的工具?iText完全能够提取和重新排序页面上的文本(假设您使用正确的提取策略)。如果不是,请澄清。if((mediabox.Top-mediabox.Height)!=0){topY=mediabox.Top;heightY=mediabox.Height;diffY=topY-heightY;lly_adjust=(topY-ury)+diffY;ury_adjust=(topY-lly)+diffY;}elseif((cropbox.Top-cropbox.Height)!=0){topY=mediabox.Top;heightY=cropbox.Top;diffY=topY-heightY;lly_adjust=(topY-ury)-diffY;ury_adjust=(topY-lly)-diffY;}else{lly_adjust=mediabox.Top-ury;ury_adjust=mediabox.Top-lly;}这些就是最后的调整以上是C#学习教程:如何从左下角变成左上角pdf页面中文字的坐标共享,如果对你有用还需要了解更多关于C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: