在提取的话,在这个例子中的位置: http://www.dertour.de/static/agb/2015/sommer/DER_Deutschland_So15.pdf 与iTextSharp的5.5.8iTextSharp的 - 不正确的文本位置
我得到“不正确”坐标一些话。例如,在第一段的第17行:'gehen oder im Widerspruch zur Reiseaus-' ,单词的左侧顶部位置的x值是118,217,296,350,524,587。只有第一个值似乎是正确的(118,208,277,320,487,540)。 'gehen'和'oder'之间空格字符右下角的x值是208,这看起来是正确的,而且似乎是“oder”这个单词的正确x-pos。也许它与段落的填充模式有关,但我不确定我应该执行哪些操作来获得正确的坐标。
我正在使用LocationTextExtractionStrategy并将字位置计算为300 dpi坐标系。
public override void RenderText(TextRenderInfo renderInfo)
{
// for the provided example
// uUnit = 1
// originX = 33.862
// originY = 33.555
// dpi = 300
// above values where calculated with code:
// PdfNumber userUnit = pageDict.GetAsNumber(PdfName.USERUNIT);
// if (userUnit != null)
// {
// uUnit = userUnit.FloatValue;
// }
// Rectangle dim = reader.GetPageSize(i);
// float originX = dim.Left;
// float originY = dim.Bottom;
// calculate coordinates:
renderInfo.GetText();
LineSegment segment = renderInfo.GetBaseline();
List<TextRenderInfo> charInfo = renderInfo.GetCharacterRenderInfos().ToList();
foreach (TextRenderInfo item in charInfo)
{
LineSegment char_segment = item.GetBaseline();
int char_left = (int)Math.Round((char_segment.GetStartPoint()[0] - originX) * dpi * uUnit/72.0f);
int char_top = (int)Math.Round((item.GetAscentLine().GetEndPoint()[1] - originY) * dpi * uUnit/72.0f);
int char_right = (int)Math.Round((char_segment.GetEndPoint()[0] - originX) * dpi * uUnit/72.0f);
int char_bottom = (int)Math.Round((item.GetDescentLine().GetStartPoint()[1] - originY) * dpi * uUnit/72.0f);
}
}
你误解负值:他们这样做拉开差距。 – mkl
如上所述,由于我们有严格的双字节编码,所以在这里任何地方都不应用字间距*,因此没有单字节32编码空间。 – mkl