2012-01-11 5 views
6

정보 추출에 대한 연구를하고 있으며 iText를 사용하고 싶습니다.iText를 이용한 PDF 텍스트 추출

iText를 탐색하는 중입니다. 우리가 검토 한 문헌에 따르면, iText는 사용할 수있는 최상의 도구입니다. iText에서 한 줄에 PDF 파일을 추출 할 수 있습니까? 나는 여기에 stackoverflow 내 질문에 게시물을 읽었지만 단지 그것을 추출하지 텍스트를 읽습니다. 아무도 내 문제를 도와 줄 수 있습니까? 고맙습니다.

+3

내가하는 일에 대해 완전히 명확하지 않습니다. 텍스트를 읽고 텍스트를 추출하는 것은 일반적으로 같은 것입니다. iText는 텍스트를 파일에 저장하지 않지만 일단 텍스트가 있으면 쉽게 처리 할 수 ​​있습니다. iText는 실제로 텍스트 (윤곽선 또는 비트 맵이 아닌) 인 한 텍스트를 추출하는 작업을 훌륭하게 수행합니다. 이 사이트를 검색 할 때 iText의 .Net 포트 인'iTextSharp'를 찾으십시오. 그것은 더 많은 질문/답변을 가지고 있으며 코드는 C#과 거의 동일합니다. –

답변

3

iText를 사용하면 텍스트 블록의 세밀도에 대한 보증은 없지만 문서를 만드는 데 사용되는 실제 PDF 렌더러에 따라 다릅니다.

각 단어 나 문자가 고유 한 텍스트 블록을 가질 가능성이 있습니다. 텍스트 블록을 좌표에 따라 재정렬해야 할 수도 있으므로 신뢰할 수있는 결과를 얻으려면 어휘 순서로 정렬 할 필요가 없습니다. 또한 텍스트 블록 사이에 공백을 삽입해야하는지 계산해야 할 수도 있습니다. 시어 도어처럼

13

당신이 PDF 파일에서 텍스트를 추출 할 수 있습니다 말했다 크리스처럼 오래는 텍스트 (안 윤곽 또는 비트 맵)

베스트 할 일이 살입니다 실제로으로

을 지적 Bruno Lowagie의 책 "Itext"실전. 두 번째 판에서 15 장은 텍스트 추출을 다루고 있습니다.

하지만 그의 사이트에서 예제를 볼 수 있습니다. http://itextpdf.com/examples/iia.php?id=279

그리고 일반 txt 파일을 만들려면이 파일을 구문 분석 할 수 있습니다.

/* 
* This class is part of the book "iText in Action - 2nd Edition" 
* written by Bruno Lowagie (ISBN: 9781935182610) 
* For more info, go to: http://itextpdf.com/examples/ 
* This example only works with the AGPL version of iText. 
*/ 

package part4.chapter15; 

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.PrintWriter; 

import com.itextpdf.text.pdf.PdfReader; 
import com.itextpdf.text.pdf.parser.PdfReaderContentParser; 
import com.itextpdf.text.pdf.parser.SimpleTextExtractionStrategy; 
import com.itextpdf.text.pdf.parser.TextExtractionStrategy; 

public class ExtractPageContent { 

    /** The original PDF that will be parsed. */ 
    public static final String PREFACE = "resources/pdfs/preface.pdf"; 
    /** The resulting text file. */ 
    public static final String RESULT = "results/part4/chapter15/preface.txt"; 

    /** 
    * Parses a PDF to a plain text file. 
    * @param pdf the original PDF 
    * @param txt the resulting text 
    * @throws IOException 
    */ 
    public void parsePdf(String pdf, String txt) throws IOException { 
     PdfReader reader = new PdfReader(pdf); 
     PdfReaderContentParser parser = new PdfReaderContentParser(reader); 
     PrintWriter out = new PrintWriter(new FileOutputStream(txt)); 
     TextExtractionStrategy strategy; 
     for (int i = 1; i <= reader.getNumberOfPages(); i++) { 
      strategy = parser.processContent(i, new SimpleTextExtractionStrategy()); 
      out.println(strategy.getResultantText()); 
     } 
     reader.close(); 
     out.flush(); 
     out.close(); 
    } 

    /** 
    * Main method. 
    * @param args no arguments needed 
    * @throws IOException 
    */ 
    public static void main(String[] args) throws IOException { 
     new ExtractPageContent().parsePdf(PREFACE, RESULT); 
    } 
} 

주의 사항이 예는이 iText의 AGPL 버전에서 작동 라이센스

: 다음은 코드 예입니다.

다른 예제를 보면 텍스트 부분을 생략하는 방법이나 PDF의 일부를 추출하는 방법을 보여줍니다.

희망이 있습니다.

관련 문제