2016-06-30 4 views
0

PDF 문서의 각 문자의 텍스트 위치를 가져오고 싶습니다. PDFBox 예제 사이트에서 제공하는 PrintTextLocations 예제를 살펴 보았습니다. 이 예에서는 보호 된 writeString 메서드를 재정의하고 PDFTextStripper 클래스를 확장하여 텍스트 위치를 인쇄합니다. 여기에 그 방법PDFBox에서 textpositions를 반환하는 방법은 무엇입니까?

/** 
* Override the default functionality of PDFTextStripper. 
*/ 
@Override 
protected void writeString(String string, List<TextPosition> textPositions) throws IOException 
{ 
    for (TextPosition text : textPositions) 
    { 
     System.out.println("String[" + text.getXDirAdj() + "," + 
       text.getYDirAdj() + " fs=" + text.getFontSize() + " xscale=" + 
       text.getXScale() + " height=" + text.getHeightDir() + " space=" + 
       text.getWidthOfSpace() + " width=" + 
       text.getWidthDirAdj() + "]" + text.getUnicode()); 
    } 
} 

입니다하지만 클래스에서 TextPosition 목록을 반환합니다. API에서 protected List<List<TextPosition>>을 반환하는 getCharactersByArticle() 클래스의 PDFTextStripper 클래스에 보호 된 메서드가 있음을 발견했습니다.

메서드에서 목록을 반환하는 방법을 알고 싶습니다.

미리 감사드립니다.

+0

* 메서드에서 목록 반환 * - * 어떤 * 메서드에서 반환 하시겠습니까? 분명히 당신이 호출자가 아니기 때문에'writeString'이 아니며 실제 호출자는 리턴을 무시할 것입니다. – mkl

답변

0

코드가 메모리에 아무런 문제가없는 경우 다음 해결 방법을 사용할 수 있습니다.

static ArrayList<TextPosition> pos=new ArrayList<TextPosition>(); 
/** 
* Override the default functionality of PDFTextStripper. 
*/ 
@Override 
protected void writeString(String string, List<TextPosition> textPositions) throws IOException 
{ 
    for (TextPosition text : textPositions) 
    { 
     pos.add(text); 
     System.out.println("String[" + text.getXDirAdj() + "," + 
      text.getYDirAdj() + " fs=" + text.getFontSize() + " xscale=" + 
      text.getXScale() + " height=" + text.getHeightDir() + " space=" + 
      text.getWidthOfSpace() + " width=" + 
      text.getWidthDirAdj() + "]" + text.getUnicode()); 
    } 
} 

또는 원하는 변경 사항을 사용하여 pdfbox 클래스를 복사하고 프로젝트를 다시 빌드 할 수 있습니다.

관련 문제