2017-07-24 50 views
-2

所以我想從PDF文件中提取某些內容。所以它是一張發票,我希望能夠在PDF文件中搜索單詞「發票號碼」,然後選擇「名字」並將它們解壓縮到用iTextSharp解析PDF,然後提取特定的文本到屏幕

Console.WriteLine();

所以目前這是我得到的,我需要弄清楚如何進一步移動。

using iTextSharp.text.pdf; 
using System.IO; 
using iTextSharp.text.pdf.parser; 
using System; 

namespace PdfProperties 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      PdfReader reader = new PdfReader("C:/PDF/invoiceDetail.pdf"); 
      PdfReaderContentParser parser = new PdfReaderContentParser(reader); 
      FileStream fs = new FileStream("C:/PDF/result0.txt", FileMode.Create); 
      StreamWriter sw = new StreamWriter(fs); 

      SimpleTextExtractionStrategy strategy; 

      string text = ""; 

      for (int i = 1; i <= reader.NumberOfPages; i++) 
      { 
       strategy = parser.ProcessContent(i, new SimpleTextExtractionStrategy()); 
       sw.WriteLine(strategy.GetResultantText()); 

       text = strategy.GetResultantText(); 

       String[] splitText = text.Split(new char[] {'.' }); 

       Console.WriteLine("Test"); 

       Console.WriteLine(text); 
      } 
      sw.Flush(); 
      sw.Close(); 

     } 
    } 
} 

任何幫助,將不勝感激

+0

貴控制檯輸出包含所需的發票號碼和名字? – mkl

+1

您需要pdf2Data插件來執行此操作。該附加組件是封閉源代碼(其中包括許多人認爲他們可以在商業環境中免費使用iText)。有關pdf2Data的更多信息,請參閱http://itextpdf.com/itext7/pdf2Data。 –

回答

0

海蘭 你可以試試這個:

String[] splitText = text.Split("."); 
for(int i =0; i<splitText.Lenght;i++) 
{ 
if(splitText[i].toString() =="Invoice Number:") 
(
    // we have Invoice Number 

// now we search for First Name 
    if(splitText[i].toString() == "First Name") 
    (
    // now we have also First Name 
    ) 
) 
} 
0

有2種方式的要對此:

  1. 你可以試試自行處理髮票。這意味着處理結構,並處理邊緣情況。如果內容並不總是以相同的方式對齊會怎樣?如果發票模板更改會怎樣?如果發票中的某些文字是可變的,而且您不能真正依賴正在提取的確切文字? ..

    總之,這不是一個小問題要解決。

  2. 使用pdf2Data。它專門設計用於處理結構豐富的文檔。像發票一樣。它使用了一個名爲「選擇器」的概念,允許您定義您期望某些內容的位置。按位置(在由座標定義的矩形中的某處)或由結構塊(從該表中排出)等等。

    即使附加組件是封閉源,您仍然可以通過使用試用許可證。在評估pdf2Data之後,您至少可以做出更明智的決定,決定採取哪條路線來解決這個問題。

    退房itextpdf.com/itext7/pdf2Data瞭解更多信息