2012-09-10 4 views
6

"processTextPosition"과 유사한 PDFBox를 사용하여 단어의 위치를 ​​가져올 수 있습니까? processTextPosition은 단일 문자에서만 호출되며, 단어로 병합하는 코드는 텍스트의 위치를 ​​반환하는 PDFTextStripper ("normalize"메서드)의 일부입니다. 위치를 추출하는 방법/유틸리티가 있습니까? (동기가 무엇인지 궁금 분들을 위해 - 정보가 실제로 테이블이며, 우리는 빈 셀을 감지하고 싶습니다) 감사PDFBox - 단어 위치 가져 오기 (문자 만이 아님)

+0

아마도 도움이 될 것입니다 : http://stackoverflow.com/questions/3203790/parsing-pdf-files-especially-with -tables-with-pdfbox/12545981 # 12545981 – impeto

+0

제안 해 주셔서 감사합니다. 결국 우리의 해결책은 writePage를 변경하여 단어를 자신의 위치로 유지하는 것입니다 (보낸 URL에 설명 된대로). 그러나 우리의 경우, 열의 수 (및 그 위치)는 알 수 없기 때문에 정보의 구성에 따라 열을 찾아야합니다 (예 : Y 위치에서 시작하는 단어가 많은 줄이있는 경우 = 100, 아마도 거기에 테이블 열이 있습니다). 이 구조를 감지 할 수있는 구성 요소가 있습니까? 그렇다면 "Y"가 상수가 아닌 경우 약간 회전 된 페이지도 처리 할 수 ​​있습니까? – user964797

+0

한 가지 가능한 방법은 PDFTextStripper 클래스의 processTextPosition()에 재정의를 추가하고 seperator라는 단어를 확인하여 문자를 추적하는 것입니다. 단어 start에 표시를 유지하고 단어 끝에 부호를 유지하고 단어를 저장할 때 구분 기호가 있습니다. – programer8

답변

1

얻을 수있는 pdf 파일에서 추출 된 텍스트에서 단어와 자신의 x와 y 위치 당신 따라서

PDFTextStripper pdfStripper = new CustomPDFTextStripper(); 
String text = pdfStripper.getText(*pdf file wrapped as a PDDocument object*); 

로 텍스트를 PdfTextStripper 클래스를 확장하고, PDF 파일 등

public class CustomPDFTextStripper extends PDFTextStripper{ 

    public CustomPDFTextStripper() throws IOException { 

    } 

    /** 
    * Override the default functionality of PDFTextStripper. 
    */ 

    @Override 
    protected void writeString(String text, List<TextPosition> textPositions) throws IOException{ 
     TextPosition firstProsition = textPositions.get(0); 
     writeString(String.format("[%s , %s , %s]", firstProsition.getTextPos().getXPosition(), 
       firstProsition.getTextPos().getYPosition(), text)); 

    } 
} 

에서 텍스트를 추출하는 사용자 정의 클래스를 사용하여이 사용자 정의 클래스의 객체를 생성하고 추출해야합니다 결과 텍스트 문자열은 [xposition, yposition, word] 형태로 기본 단어 분리 기호로 구분됩니다.

+0

PdfBox에서 작동하지 않습니다. –