2010-03-03 4 views
14

iTextSharp와 reader.GetPageContent 메서드를 사용하여 PDF에서 텍스트를 가져옵니다. 문서에서 발견 된 각 단어의 사각형/위치를 찾아야합니다. iTextSharp를 사용하여 PDF에서 단어의 사각형/위치를 가져 오는 방법이 있습니까?iTextSharp - 페이지에서 단어의 위치를 ​​얻는 방법

+1

문제점에 대한 좋은 해결책을 찾으셨습니까? – d456

답변

20

예 있습니다. text.pdf.parser 패키지를 확인하십시오 (구체적으로 LocationTextExtractionStrategy). 사실, 그 중 하나를 트릭을하지 않을 수도 있습니다. 당신은 아마 PdfTextExtractor에 공급하는 TextExtractionStrategy 직접 작성하는 것이 좋습니다 :

MyTexExStrat strat = new MyTexExStrat(); 
PdfTextExtractor.getTextFromPage(reader, pageNum, strat); 
// get the strings-n-rects from strat. 

public class MyTexExStrat implements TextExtractionStrategy { 
    void beginTextBlock() {} 
    void endTextBlock() {} 
    void renderImage(ImageRenderInfo info) {} 
    void renderText(TextRenderInfo info) { 
     // track text and location here. 
    } 
} 

당신은 아마 기준을 공유하는 텍스트를 결합하는 방법을 LocationTextExtractionStrategy보고에 대한 소스를보고 싶을 것이다. 문자열과 rect의 병렬 배열을 저장하기 위해 LTES를 수정할 수도 있습니다.

추신 :의 구형을 구축, 당신은 단지 AscentLine & DescentLine을 얻고 상단과 하단 모서리로 그 좌표를 사용할 수 있습니다

Vector bottomLeft = info.getDescentLine().getStartPoint(); 
Vector topRight = info.getAscentLine().getEndPoint(); 
Rectangle rect = new Rectangle(bottomLeft.get(Vector.I1), 
           bottomLeft.get(Vector.I2), 
           topRight.get(Vector.I1), 
           topRight.get(Vector.I2)); 

경고 : 위의 코드 엉덩이-U-MES 그 텍스트 수평이고 왼쪽에서 오른쪽으로 진행됩니다. 회전 된 텍스트는 수직 텍스트 또는 오른쪽에서 왼쪽 (아랍어, 히브리어) 텍스트와 마찬가지로이를 망칠 것입니다. 대부분의 응용 프로그램의 경우 위의 내용이 좋지만 한계가 있음을 알고 있어야합니다.

좋은 사냥.

+2

참고 : LocationTextExtractionStrategy 파서가 반드시 문서의 모양 순서대로 텍스트를 찾지는 않습니다. 저는 텍스트를 바닥 글 (.docx 파일)에 넣은 다음 PDF로 변환합니다 (DOCX4J 사용). 파서가 .docx 파일의 꼬리말을 본 다음, 본문 섹션에서 텍스트를 찾을 것입니다. 즉, 문서의 맨 아래에 텍스트를 배치하고 그 위에 텍스트를 배치하십시오. 모양 순서대로 찾으려면 결과를 직접 정렬해야 할 수도 있습니다. –

+0

C# 버전에 대한 링크를 확인하십시오. https://stackoverflow.com/questions/23909893/getting-coordinates-of-string-using-itextextractionstrategy-and-locationtextextr –