2014-07-24 2 views
0

pdf 파일의 텍스트 부분을 캡처하기 위해 C#으로 iText 라이브러리를 사용하려고합니다.첫 번째 페이지 이후에 iText가 PDF의 텍스트 내용을 반환하지 않습니다.

엑셀 2013에서 내 보낸 pdf를 만든 다음 웹에서 itext 사용법 샘플을 복사했습니다 (libref를 프로젝트에 추가했습니다).

완벽하게 첫 페이지를 읽지 만 이후에는 정보가 왜곡됩니다. 그것은 첫 번째 페이지의 일부를 유지하고 다음 페이지와 정보를 병합합니다. 주석 처리 된 줄은 문제를 해결하려고 할 때 문자열 "thePage"가 for 루프 안에 다시 만들어졌습니다.

다음은 코드입니다. 나는이 문제에 도움을 줄 수있는 사람에게 pdf를 이메일로 보낼 수 있습니다. 사전에

덕분에

public static string ExtractTextFromPdf(string path) 
    { 

     ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.LocationTextExtractionStrategy(); 

     using (PdfReader reader = new PdfReader(path)) 
     { 
      StringBuilder text = new StringBuilder(); 

      //string[] theLines; 
      //theLines = new string[COLUMNS]; 
      //string thePage; 

      for (int i = 1; i <= reader.NumberOfPages; i++) 
      { 
       string thePage = ""; 
       thePage = PdfTextExtractor.GetTextFromPage(reader, i, its); 

       string [] theLines = thePage.Split('\n'); 
       foreach (var theLine in theLines) 
       { 
        text.AppendLine(theLine); 
       } 
      // text.AppendLine(" "); 
      // Array.Clear(theLines, 0, theLines.Length); 
      // thePage = ""; 
      } 
      return text.ToString(); 
     } 
    } 
+0

각 페이지마다 새로운 전략 객체를 사용하십시오. 전략 객체는 텍스트 데이터를 수집하고 새 페이지가 시작되었는지 여부를 알지 못합니다. – mkl

+0

감사합니다. 루프 내부에서 객체를 인스턴스화하고 문제를 해결했습니다. 나는 문제를 해결하는 대답에 "upvote"해야한다고 알고 있지만 어떻게 해야할지 모르겠습니다. 어쨌든 당신에게 좋은 반응과 신속한 반응을 주셔서 감사합니다. – user1555945

+0

나는 대답이 아니라 주석만을 만들었습니다. 나는 그것을 명백하게 대답 할 것이고, 당신은 그것의 왼쪽에있는 표시를 클릭함으로써 그 대답을 받아 들일 수있다. – mkl

답변

0

전략 객체는 텍스트 데이터를 수집하고 새 페이지를 시작하거나하지 않은 경우 알 수 없습니다.

따라서 각 페이지마다 새로운 전략 개체를 사용하십시오.

+0

죄송합니다. 투표율이 15 점입니다. 고맙습니다. 어쨌든 – user1555945

+0

Upvoting은 필요하지 않지만 받아들이는 것이 적절할 것입니다. – mkl

+0

나는 확실히 대답을 받아 들인다. 나는 대답을 "받아 들일"수있는 절차가 있다면, 다시 한번, 그것을 모르고있다. 나는 사이트에서 우연히 만난 자원을 소중하게 생각하지만 작은 상점에서 일하고 많은 모자를 착용해야만 적절한 "예절"을 연습하는 방법을 둘러 보지 않았습니다. 그것과 상관없이 당신은 저의 프로젝트로 저를 구해 줬습니다. – user1555945

관련 문제