Как извлечь целое число как единственный токен из PDFC#

Место общения программистов C#
Ответить
Anonymous
 Как извлечь целое число как единственный токен из PDF

Сообщение Anonymous »

ASP.NET CORE 9 MVC /C# Контроллер извлекает тексты из PDF, используя PDFPIG на основе кода в ответе, как группировать текст в строки, если существует небольшая разница в положении y < /p>
Если тысячи разделены такими пространствами, как < /p>

Код: Выделить всё

Total amount: 1 000.23 EUR
pdfpig возвращает сумму как два wordElement объект, 1 и 000.23 .
В поле «Номер файла PDF» - это единый объект. Как извлечь номер как одиночную строку? < /P>
Это мой код: < /p>

Код: Выделить всё

  async Task ExtractTextPdfPigAsync(MemoryStream pdfStream)
{
pdfStream.Position = 0;
StringBuilder tulem = new();
using UglyToad.PdfPig.PdfDocument document = UglyToad.PdfPig.PdfDocument.Open(pdfStream, new UglyToad.PdfPig.ParsingOptions() { SkipMissingFonts = true });
foreach (UglyToad.PdfPig.Content.Page page in document.GetPages())
GetWordsInReadingOrder(page, tulem);
return tulem.ToString();
}

/// 
/// Returns a sequence of words in the order they appear in the PDF, based on an unsupervised reading order detector.
/// 
/// 
The page to extract words from.
/// A sequence of words in reading order.
public static void GetWordsInReadingOrder(Page page, StringBuilder builder)
{ // Extract all words from the page using the NearestNeighbourWordExtractor
List words = page.GetWords().ToList();
List sorted = (from r in page.GetWords()
orderby r.BoundingBox.Bottom, r.BoundingBox.Left
select r).ToList();

if (sorted.Count == 0)
return;

List lines = [];
const double rowHeight = 10;
double lnLastTop = 0;
int lnLastRow = 1;
double csvReaVpos = sorted.First().BoundingBox.Bottom;

foreach (Word 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
});
}

IOrderedEnumerable wordsList = from r in lines
orderby r.RowNo descending, r.WordElement.BoundingBox.Left
select r;

int rowNo = wordsList.First().RowNo;
bool first = true;
foreach (WordsWithLines word in wordsList)
{
if (rowNo != word.RowNo)
{
builder.AppendLine();
first = true;
rowNo = word.RowNo;
}
if (!first)
builder.Append(' ');
builder.Append(word.WordElement.Text);
first = false;
}
}

sealed class WordsWithLines
{
public int RowNo;
public Word WordElement;
}
Если число возвращается в виде токенов буксировки, он затрудняет извлечение числа, как описано в том, как извлекать количества с пространством в виде тысяч сепараторов
Если какой -то другой свободный пакет позволяет это использовать вместо pdfpig.

Подробнее здесь: https://stackoverflow.com/questions/796 ... n-from-pdf
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»