2012-10-22 1 views
-1

나는 2 열 형식의 PDF 파일을 가지고 있습니다. 간단한 텍스트로 분석 할 수 있지만이 pdfs에는 중간에 이미지가 있습니다. 결과적으로 내 텍스트 출력은 중간에 이미지가있는 PDF의 특정 페이지에 대해 뒤죽박죽이됩니다.이미지가있는 PDF 문서 리더

예를 들어, 2 열 페이지 형식을 고려

이미지 텍스트 2

이미지 이미지

이미지 텍스트 3

텍스트 1 이미지

Text4 

출력 텍스트 4 텍스트 3 텍스트 2 텍스트 1 텍스트 대신 1 텍스트 2 텍스트 3 텍스트 4

올바른 순서로 텍스트를 읽는 방법은 무엇입니까?

다음 코드

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 = 76; i <= reader.getNumberOfPages(); i++) { 
     strategy = parser.processContent(i, new SimpleTextExtractionStrategy()); 
     out.println(strategy.getResultantText()); 
    } 
    out.flush(); 
    out.close(); 
} 

답변

0

당신은 SimpleTextExtractionStrategy를 사용하고 사용하고 있습니다. 이 전략은 페이지 내용의 문자 그룹이 이미 현명한 순서로 있다고 가정합니다. 해당 문자 그룹을 정렬하는 대신 LocationTextExtractionStrategy를 시도하십시오.

흥미로운 주문을 선호하는 것 같습니다. 귀하의 질문에 따라, 당신은

Image Text2 
Image Image 
Image Text3 
Text1 Image 
     Text4 

LocationTextExtractionStrategy은 주로하지만, 단지 이차적으로 왼쪽에서 오른쪽으로 위에서 아래로 주문 것이기 텍스트 1, 텍스트 2 텍스트 3 텍스트 4를 얻을 싶어요. 따라서 텍스트 2 텍스트 3 텍스트 1 텍스트 4이 표시됩니다. 필요에 따라 LocationTextExtractionStrategy를 복사하고 텍스트 조각을 필요한 방식으로 정렬하도록 변경해야합니다.

이 원하는 순서는하지만, 두 개의 컬럼에있는 것으로 해석 될 것은되고있는 내용에 기인하는 경우, 당신은 전략 입력 필터링하여 별도로 열을 구문 분석 할 수 있습니다 :

Rectangle rect = new Rectangle(x1, y1, x2, y2); 
RenderFilter filter = new RegionTextRenderFilter(rect); 
TextExtractionStrategy strategy = new FilteredTextRenderListener(
    new LocationTextExtractionStrategy(), filter); 

협의이 iText를 액션, 2 판 예 ExtractPageContentArea.

감사합니다, Michael