在提取的話,在這個例子中的位置: 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