Преобразование PDF в текст — несколько строк на следующей странице

#c# #itext

#c# #itext

Вопрос:

Мой PDF-контент выглядит следующим образом:

Первая страница:

 Date          Item                     IN          OUT       
17-Oct        Electrical Fan           -           38        
              with RF895 cable
              model XO-8745
              56148
       
17-Oct        Electrical Iron           77          -      
              with ring
              model X12358
              78418
              newline 
:
:
:
17-Oct        Electrical Fan            77          -    

    Note: This receipt is computer generated and no signature is required 
  

Вторая страница:

 Date          Item                     IN          OUT               
              with RF895 cable
              model XO-8745
              56148

17-Oct        Electrical Iron           -          100      
              with ring
              model 54789

              XP-859
              newline 
:
:
:
17-Oct        Electrical Iron           17          -      
              with ring
              
    Note: This receipt is computer generated and no signature is required 
  

Третья страница:

 Date          Item                     IN          OUT       
              model X12358
              56148
   
17-Oct        Electrical Fan           -           38        
              with RF895 cable
              model XO-8745
              56148
:
:
:
17-Oct        Electrical Fan           108          -        
              with RF895 cable
              model XO-8745
              56148


    Note: This receipt is computer generated and no signature is required   
  

Я использовал Itextsharp, чтобы объединить данные в 1 строку и поместить их в Excel, поскольку вторая строка находится на следующей странице, я не смог получить нужную строку, потому что она читает PDF только постранично.
следующие коды:

 if (File.Exists(theFile.FullName))
{
    Console.Write(  count   " "   theFile.FullName);
    PdfReader pdfReader = new PdfReader(theFile.FullName);
    try
    {
        DataTable finalTbl = GetTable();
        for (int page = 1; page <= pdfReader.NumberOfPages; page  )
        {
            ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
            string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy); //Convert to text from PDF
            string[] theLines = currentText.Split(Environment.NewLine.ToCharArray());
            using (StringReader reader = new StringReader(currentText))
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    string[] splittedTxt = line.Split(new[] { " " },
                        StringSplitOptions.RemoveEmptyEntries);
                    if (splittedTxt.Any())
                    {
                        // create a table
                    }
                    finalTbl.Rows.Add( //add desired datatable)
                }
            }
        }
    }
 }
    catch
   {
   throw;
      }
      finally
  {
   pdfReader.Close();
  }
}
  

Результат, который я получаю:

 17-Oct        Electrical Fan with RF895 cable model XO-8745 56148
17-Oct        Electrical Iron with ring model X12358 78418 newline 
17-Oct        Electrical Fan 
17-Oct        Electrical Iron with ring model 54789  XP-859 newline 
17-Oct        Electrical Iron with ring
17-Oct        Electrical Fan with RF895 cable model XO-8745 56148
17-Oct        Electrical Iron with ring model X12358
17-Oct        Electrical Fan with RF895 cable model XO-8745 56148
17-Oct        Electrical Fan with RF895 cable model XO-8745 56148
  

есть ли способ сначала прочитать и объединить всю страницу, прежде чем создавать таблицу данных?

Комментарии:

1. PDF не очень хороший источник данных. Вам повезло, что вы извлекли из него текст. И в правильном порядке. Здесь у вас есть дата, которая находится только в первой строке. Возможно, вы сможете вставить только тогда, когда будет найдена новая дата или документ будет завершен.

2. @DragAndDrop — По крайней мере, они не очищают экран!

3. Как насчет объединения currentText значений всех страниц в одну большую строку и, в конечном итоге, анализа этой большой строки?