我正在使用PDFBOX和itextSharp dll并处理pdf。这样我就可以得到矩形内文本的文本坐标。矩形坐标是使用itextsharp.dll.基本上我从itextsharp.dll获得矩形坐标,其中itextSharp使用坐标系统作为左下。我从PDFBOX获得pdf页面文本,其中PDFBOX使用坐标系统作为左上角。我需要帮助将坐标从左下转换为左上角
更新我的问题
如果你不理解我的问题,如果没有提供完整的信息,请原谅。
好吧,让我试着从一开始就给出更多的细节。
我正在开发一个工具,在这个工具中,我得到了一个PDF文件,其中一个矩形是使用注释部分中的一些绘html" target="_blank">图标记绘制的。现在我用iTextsharp读取矩形坐标
PdfDictionary pageDict = pdReader.GetPageN(page_no);
PdfArray annotArray = pageDict.GetAsArray(PdfName.ANNOTS);
其中pdReader是PdfReader。
使用PDFBOX提取页面文本及其坐标。在这里,我创建了一个类pdfBoxTextExtraction,我处理文本和坐标,以便它返回文本和llx、lly、urx、ury“逐行”请逐行注意,而不是逐句。
所以我想提取矩形坐标内的文本。当从itextsharp返回的矩形坐标(即,矩形的llx、lly、urx、ury)在左下角有一个原点,而从PDFBOX返回的文本坐标在左上角有一个原点时,我被卡住了。然后我意识到我需要调整y轴,以便原点从左下角移动到左上角。最后,我得到了页面的高度和cropbox的高度
iTextSharp.text.Rectangle mediabox = reader.GetPageSize(page_no);
iTextSharp.text.Rectangle cropbox = reader.GetCropBox(page_no);
做了一些基本的调整
lly=mediabox。顶级的
ury=媒体盒。托普里
在某些情况下,调整是有效的,而在某些PDF中,需要对cropbox进行调整
lly=cropbox。顶级的
ury=cropbox。托普里
而在某些PDF上,这是不起作用的。
我所需要的只是帮助调整矩形坐标,以便我得到矩形内的文本。
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;
}
else if ((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;
}
这些都是最后的调整
PDF中的坐标系在ISO-32000-1中定义。本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)。
裁剪框定义页面的可见区域。默认情况下(例如,如果缺少裁剪框条目),裁剪框与媒体框重合。
在你的评论中,你说你从高度中减去了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完全能够提取和重新排序页面上的文本(假设您使用了正确的提取策略)。如果没有,请澄清。
根据坐标系,如果只给定矩形的中心坐标以及宽度和高度,您将如何确定矩形的左上角坐标? 例如,矩形的中心坐标是(40,40),矩形的宽度为90,高度为60。
我试图在父div内获得可拖动div的左上角的坐标。我可以在父div中获取鼠标的坐标,这是通过一个标签完成的。我想知道是否有任何类似的标记,例如来获取div的坐标 我使用标签,但它不起作用。
问题内容: 我想使用PDFMiner从PDF文件中提取所有文本框和文本框坐标。 其他许多Stack Overflow帖子都介绍了如何以有序方式提取所有文本,但是我该如何做获取文本和文本位置的中间步骤呢? 给定一个PDF文件,输出应类似于: 问题答案: 换行符在最终输出中转换为下划线。这是我发现的最小工作解决方案。
给定一个包含纵向页面的现有 PDF 文件,我该如何以编程方式(使用 .NET)处理该文件,以便在横向页面上生成具有相同内容的新文件。 新页面应该充分利用可用的横向宽度。页面数量可能会增加,因为现有的纵向页面可能不适合一个横向页面。 背景故事:我们使用Google Sheets REST API来生成pdf文档。如果有很多列,文档可能会很宽。不幸的是,Google Drive REST API总是以
本文向大家介绍如何更改浏览器左上角标题旁的图标?相关面试题,主要包含被问及如何更改浏览器左上角标题旁的图标?时的应答技巧和注意事项,需要的朋友参考一下 意思是修改网站图标 此图标应该为一个 .ico 的图标,常为 16*16 / 24 * 24 通过在 html 头部引入如下标签实现:
假设我想以这样的方式在Java中制作一个按钮,这样当你点击它时,就会出现一个JPopupMenu。它出现的相关代码是,它使JPopupMenu的左上角显示在按钮的中心,如下所示: 不过,我希望它的左下角位于按钮的中心,有点像iTunes的做法(左下角下方有一个按钮,大小与左侧的按钮相同): 我试图通过获取JPopupMenu的高度并将其添加到弹出菜单正在显示的y坐标来实现这一点,但我发现JPopu