2017-11-14 25 views
1

PDF로 작업하고 iTexhSharp를 사용하고 있습니다. 지금까지 특정 영역에서 데이터를 가져올 수있었습니다. 하지만, 원하는 단어의 첫 번째 문자 (또는 숫자)의 코디네이터를 찾은 다음 해당 코디네이터에서 원하는 단어 주변을 자르기 위해 직사각형을 만들어보다 유연하게 만들고 싶습니다. 누구든지 저에게 짧은 모범을 줄 수 있다면 좋을 것입니다. 고맙습니다.iTextSharp를 사용하여 PDF의 특정 문자에서 코디네이터 (x, y)를 얻는 방법은 무엇입니까?

+0

5.5.x 또는 7.0.x 중 어떤 iText 버전을 사용합니까? – mkl

+0

@mkl 5.5.x를 사용 중입니다. – tumsd923

+0

Ah. Joris의 대답은 iText 7을 사용합니다. – mkl

답변

1

기본 아이디어는 IEventListener를 사용하여 TextRenderInfo 이벤트를 알리는 것입니다. 그런 다음 이들을 CharacterRenderInfo로 분할 한 다음 각각의 경계 상자를 요청하십시오.

class CharacterRenderInfoGetter implements IEventListener { 

    private List<CharacterRenderInfo> characterRenderInfoList = new ArrayList<>(); 

    @Override 
    public void eventOccurred(IEventData iEventData, EventType eventType) { 
     if(eventType == EventType.RENDER_TEXT) 
     { 
      TextRenderInfo tri = (TextRenderInfo) iEventData; 
      for(TextRenderInfo subTri : tri.getCharacterRenderInfos()) 
      { 
       characterRenderInfoList.add(new CharacterRenderInfo(subTri)); 
      } 
     } 
    } 

    public List<CharacterRenderInfo> getCharacterRenderInfoList() 
    { 
     java.util.Collections.sort(characterRenderInfoList); 
     return characterRenderInfoList; 
    } 

    @Override 
    public Set<EventType> getSupportedEvents() { 
     return null; 
    } 
} 

당신은 다음과 같이이 클래스를 사용할 수 있습니다

File inputFile = getInputFiles()[0]; // provide your own implementation of course 

    // create an iText PdfDocument out of the File 
    PdfDocument pdfDocument = new PdfDocument(new PdfReader(inputFile)); 

    // construct the IEventListener that will measure character distances 
    CharacterRenderInfoGetter characterRenderInfoGetter = new CharacterRenderInfoGetter(); 
    PdfCanvasProcessor processor = new PdfCanvasProcessor(characterRenderInfoGetter); 

    /* Here we explicitly tell the IEventListener to process page 1 (the first page of the document 
    * you can loop over all pages if you want to repeat this 
    */ 
    processor.processPageContent(pdfDocument.getPage(1)); 

이 코드는 자바로 작성된 것입니다 알고있다. 그러나. NET 동등한 매우 유사해야합니다. 적어도 의사 코드는 좋은 것입니다.

+0

감사 드리겠습니다. D – tumsd923