Использование PdfPig для чтения текста из заказанного PDF-файла, как описано в разделе «Построчное получение текста из PDF с использованием ответа C#»
static void GetWordsInReadingOrder(UglyToad.PdfPig.Content.Page page, StringBuilder builder)
{
var words = page.GetWords().ToList();
var wordsList = page.GetWords().GroupBy(x => x.BoundingBox.Bottom);
foreach (var word in wordsList)
{
bool esimene = true;
foreach (var item in word)
{
if (!esimene)
builder.Append(' ');
esimene = false;
builder.Append($"{item.Text}");
}
builder.AppendLine();
}
}
Разбивает одну строку PDF на несколько строк, если есть небольшая разница в x.BoundingBox.Bottom.
Как добавить некоторый допуск, чтобы при небольшой разнице в позициях Y элементы отображаются в одной строке?
Возможно, следует добавить округление
var wordsList = page.GetWords().GroupBy(x => x.BoundingBox.Bottom);
Я создал этот код, чтобы учитывать расстояние от начала строки и сортировать до и после присвоения. Можно ли это улучшить?
var sorted = (from r in page.GetWords()
orderby r.BoundingBox.Bottom, r.BoundingBox.Left
select r).ToList();
if (sorted.Count == 0)
return;
List lines = new List();
const double rowHeight = 10;
double lnLastTop = 0;
int lnLastRow = 1;
double csvReaVpos = sorted.First().BoundingBox.Bottom;
foreach (var r in sorted)
{
if (r.BoundingBox.Bottom >= (lnLastTop + 0.5 * rowHeight) || (r.BoundingBox.Bottom - csvReaVpos) > rowHeight)
{
++lnLastRow;
csvReaVpos = r.BoundingBox.Bottom;
}
lnLastTop = r.BoundingBox.Bottom;
lines.Add(new WordsWithLines()
{
RowNo = lnLastRow,
WordElement = r
});
}
var wordsList = from r in lines
orderby r.RowNo descending, r.WordElement.BoundingBox.Left
select r;
int rowNo = wordsList.First().RowNo;
bool first = true;
foreach (var word in wordsList)
{
if (rowNo != word.RowNo)
{
builder.AppendLine();
first = true;
rowNo = word.RowNo;
}
if (!first)
builder.Append(' ');
builder.Append($"{Core.CharTran(word.WordElement.Text, " ", "_")}");
first = false;
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... y-position
Как сгруппировать текст по строкам, если есть небольшая разница в положении Y ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Bootstrap Toolp в неправильном положении при начальном падении, затем в правильном положении
Anonymous » » в форуме Html - 0 Ответы
- 20 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Bootstrap Toolp в неправильном положении при начальном падении, затем в правильном положении
Anonymous » » в форуме CSS - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-