如何从pdf doc加载文本位置?

时间:2014-04-23 13:29:56

标签: c# vector itextsharp

我通过以下方式加载pdfdoc:

PdfReader pdfReader = new PdfReader(byteArray);
LocationTextExtractionStrategyEx st3 = new LocationTextExtractionStrategyEx();
PdfTextExtractor.GetTextFromPage(pdfReader, 1, st3);

现在我可以从st3.TextLocationInfo获取页面元素列表。每个元素都有属性TopLeftBottomRight,它们是Vector。 如果我不知道比例的最大值,我怎样才能获得元素位置。我知道矢量从左下角开始,但我不知道哪里结束,因为我不知道像矢量那样的页面大小。

我可以跑

var pageSize = pdfReader.GetPageSize(1)

但是,向量的值大于pageSize WidthHeight

另一方面,我可以加载页面上的每个字符位置吗?

2 个答案:

答案 0 :(得分:1)

LocationTextExtractionStrategyEx不属于iTextSharp。因此,我假设您谈论this answer中提供的课程。那个班级对这些职位毫无兴趣。因此,要回答您的问题:

  

我知道矢量从左下角开始,但我不知道哪里结束,因为我不知道像矢量那样的页面大小。

     

我可以跑

var pageSize = pdfReader.GetPageSize(1)
     

但是,向量的值大于pageSize WidthHeight

首先:您从LocationTextExtractionStrategyEx.TextLocationInfo获得的坐标确实要在pdfReader.GetPageSize的上下文中进行解释。

有两个主要原因导致矢量值超出后者的WidthHeight

  1. pdfReader.GetPageSize返回的矩形不需要基于(0,0)。它可以例如x坐标为301..400,y坐标为501..600。在这种情况下,高度和宽度都是100,但该矩形中点的所有坐标都会更高。

    因此,请勿查看WidthHeight,而是LeftBottomRightTop

  2. 文字实际上可能位于可见页面之外,因此其坐标位于pdfReader.GetPageSize之外。

  3. 如有最终判决,请提供相关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;