我通过以下方式加载pdfdoc:
PdfReader pdfReader = new PdfReader(byteArray);
LocationTextExtractionStrategyEx st3 = new LocationTextExtractionStrategyEx();
PdfTextExtractor.GetTextFromPage(pdfReader, 1, st3);
现在我可以从st3.TextLocationInfo
获取页面元素列表。每个元素都有属性TopLeft
和BottomRight
,它们是Vector
。
如果我不知道比例的最大值,我怎样才能获得元素位置。我知道矢量从左下角开始,但我不知道哪里结束,因为我不知道像矢量那样的页面大小。
我可以跑
var pageSize = pdfReader.GetPageSize(1)
但是,向量的值大于pageSize Width
和Height
另一方面,我可以加载页面上的每个字符位置吗?
答案 0 :(得分:1)
LocationTextExtractionStrategyEx
不属于iTextSharp。因此,我假设您谈论this answer中提供的课程。那个班级对这些职位毫无兴趣。因此,要回答您的问题:
我知道矢量从左下角开始,但我不知道哪里结束,因为我不知道像矢量那样的页面大小。
我可以跑
var pageSize = pdfReader.GetPageSize(1)
但是,向量的值大于pageSize
Width
和Height
首先:您从LocationTextExtractionStrategyEx.TextLocationInfo
获得的坐标确实要在pdfReader.GetPageSize
的上下文中进行解释。
有两个主要原因导致矢量值超出后者的Width
和Height
:
pdfReader.GetPageSize
返回的矩形不需要基于(0,0)。它可以例如x坐标为301..400,y坐标为501..600。在这种情况下,高度和宽度都是100,但该矩形中点的所有坐标都会更高。
因此,请勿查看Width
和Height
,而是Left
,Bottom
,Right
和Top
。
文字实际上可能位于可见页面之外,因此其坐标位于pdfReader.GetPageSize
之外。
如有最终判决,请提供相关PDF格式。
答案 1 :(得分:0)
我通过
读取页面大小var pageSize = pdfReader.GetPageSize(1)
接下来我创建了
TextInfoLocation textLocation = new TextInfoLocation(textLine.TopLeft, textLine.BottomRight, this.PdfFilePageSize);
属性.TopLeft和.BottomRight是向量。 textLine是通过策略从pdfReader读取的LocationTextExtractionStrategyEx.TextInfo对象。
现在以像素为单位的文本位置形成了我可以得到的vectores:
double leftMargin = textLocation.LeftMargin;