Vector 如何将iText位置向量转换为页面上的相对位置(以百分比表示)

Vector 如何将iText位置向量转换为页面上的相对位置(以百分比表示),vector,location,itext,Vector,Location,Itext,我正在使用iText的LocationTextExtractionStrategy类在PDF中查找一个特殊字符,这似乎很有效。我得到了一个iText向量,比如94.5698.9,1.0(来自getStartLocation())和100.5698.9,1.0(来自getEndLocation)。我想知道位置是什么,表示为相对于页面的百分比。目标是将PDF页面导出为图像,并在网页上的div中使用它,然后使用另一个div作为覆盖(半透明)以高亮显示该区域。例如,我可以找到一个人的名字后面跟有特殊字符

我正在使用iText的LocationTextExtractionStrategy类在PDF中查找一个特殊字符,这似乎很有效。我得到了一个iText向量,比如94.5698.9,1.0(来自getStartLocation())和100.5698.9,1.0(来自getEndLocation)。我想知道位置是什么,表示为相对于页面的百分比。目标是将PDF页面导出为图像,并在网页上的div中使用它,然后使用另一个div作为覆盖(半透明)以高亮显示该区域。例如,我可以找到一个人的名字后面跟有特殊字符。我想在这个特殊角色所在的地方放一个div。由于我有iText向量,如果我能以某种方式将其转换为与PDF页面相关的百分比,那么我可以将该信息转换为div上使用的信息。例如,top 25.125%,left 30.55%-如果位置偏离标记几个像素就可以了,因为我只想突出显示一般区域(垂直或水平方向大约5个像素)

如果您有一个8.5英寸(宽)乘11英寸(高)的文档,那么如果特殊字符位于向量152594,1.0,那么公式将计算如下

leftPercent=(152/612)*100=25%
topPercent=((792-594)/792)*100=25%


在我的测试用例中,我故意将特殊字符放置在距离顶部25%和距离左侧25%的位置。

距离左侧的相对距离的计算是
location.getEndLocation().get(0)/pageWidth)*100
距离顶部的相对位置的计算仍然无法实现。明白了。由于PDF位置从左下角开始,因此必须从高度中减去顶点:
((pageHeight-location.getEndLocation().get(1))/pageHeight)*100
我对您的答案投了赞成票,但我想澄清的是,只有当页面左下角的坐标为0,0时,您的解决方案才是正确的(所有PDF都应假定的内容)。此外,您应该检查哪个页面用于将PDF页面导出为图像:是媒体框还是裁剪框?还是其他区域?这取决于图像左下角的坐标及其高度和宽度可能会有所不同。@mkl不确定您的意思。每个页面都应该是一个单独的图像,导出时的尺寸与您的相同一个近乎完美的文档外观表示。我记录了每页的坐标,这样我就可以分别显示每个图像文件,然后将上下文中的外推坐标应用到显示的页面上。只要尺寸相同,高度和宽度是否变化并不重要,因为x%从顶部和从左到右的y%转换为任意大小,因为它是相对的。我遗漏了什么吗?谢谢!@BrunoLowagie。谢谢你检查我的答案并提出这一点。我正在使用docx4j生成我的PDF。它使用。据我所知,尽管我不是100%确定,XSL-FO,但是当与ApacheFPO的PDFDocumentHandler一起用于生成PDF时s、 它认为——所以我相信永远都是这样——是吗?看这里:
leftPercent = (location.getEndLocation().get(0) / pageWidth) *100,
topPercent = ((pageHeight - location.getEndLocation().get(1)) / pageHeight) *100