Использование iTextSharp v5.5.13
У меня огромное количество PDF-файлов, которые мне нужно проанализировать. Около 5% из них имеют таблицу с данными, которые мне также нужны.
Таблица выглядит следующим образом:
Большую часть времени мне нужна строкаразобрать как
2 januari 15 januari € 49,49 € 21,57 € 15,09 € 34,39
Я могу работать с этим. Я делю по пробелам, и это работает.
Но иногда в названии месяца есть дополнительный пробел: janu ari
Я знаю, что могу переопределить стратегии, чтобы избавиться от этих лишних пробелов. Я уже использую его с остальной частью PDF (ITextExtractionStrategy
), но для этой таблицы я использую стратегию прямоугольника:
var rect = new System.util.RectangleJ(70, 425, 460, 200);
RenderFilter[] filter = { new RegionTextRenderFilter(rect) };
ITextExtractionStrategy strategy =
new FilteredTextRenderListener(new MyLocationTextExtractionStrategy(), filter);
var lines = PdfTextExtractor.GetTextFromPage(reader, pageNumber, strategy).Split('\n');
Мое переопределение выглядит так:
public class MyLocationTextExtractionStrategy : LocationTextExtractionStrategy
{
protected override bool IsChunkAtWordBoundary(TextChunk chunk, TextChunk previousChunk)
{
var dist = chunk.DistanceFromEndOf(previousChunk);
return dist < -chunk.CharSpaceWidth || dist > chunk.CharSpaceWidth / 2.0f;
}
}
Я нашел это Google. Но это не решает мою проблему.
В случае janu ari
dist
больше -chunk.CharSpaceWidth
, и я не уверен, что делать дальше.
Пожалуйста, дайте мне знать, когдаЯ не должен использовать стратегию прямоугольника для этой таблицы, но другой подход.