2013-11-21 4 views
0

Apache PDFBox 라이브러리를 처음 사용합니다.PDFBox를 사용하여 PDF의 텍스트 글꼴 정보

나는 이미

Questios How to extract font styles of text contents using pdfbox? 겪었

PDF 파일 단락에 글꼴 정보를 매핑 할 그러나 단락이있는 글꼴로 작성에 대한 정보를 제공하지 않습니다.

para1 :

예를 들어, 내 페이지에 텍스트가 포함 된 경우 굴림

para2 : 굴림

다음

내가 para1가 para2 동안 굴림에 기록하는 정보를 얻을 수 있어야합니다 Times New Roman에 기록되어 있습니다. 위의 질문에 제안

솔루션은 PDF 페이지는

굴림과 타임즈 새로운 로마를 포함하는 정보를 제공합니다.

+0

이 링크를 참조를 통해 추가 데이터에 액세스 할 수 있습니다. http://stackoverflow.com/questions/6939583/how-to-extract-font-styles-of-text-contents-using-pdfbox – PKhode

+0

@pappukhode 나는 이미 내 질문에 링크를 언급했다. –

답변

2

당신이 사용하는 PDFTextStripper 클래스 (자바 독 주석 참조,) 설명되어 있습니다

* This class will take a pdf document and strip out all of the text and ignore the 
* formatting and such. 

특정 글꼴 정보를 얻으려면, 따라서 다소 변경해야합니다.

글꼴 정보가 모두 함께이 클래스에서 사용할 수 있으며 선을 출력 할 경우에만 폐기, 그 source를 보라 :

protected void writePage() throws IOException 
{ 
    [...] 
    for(int i = 0; i < charactersByArticle.size(); i++) 
    { 
     [...] 
     List<TextPosition> line = new ArrayList<TextPosition>(); 
     [...] 
     while(textIter.hasNext()) 
     { 
      [...] 
      if(lastPosition != null) 
      { 
       [...] 
       if(!overlap(positionY, positionHeight, maxYForLine, maxHeightForLine)) 
       { 
        writeLine(normalize(line,isRtlDominant,hasRtl),isRtlDominant); 
        line.clear(); 
        [...] 
       } 
............ 

그 목록에있는 TextPosition 인스턴스를 line 여전히 서식 정보를 사용할 수 있고, 그 중 폰트가 사용되는 동안에 만 "정규화"되는 동안 line 순수 문자로 축소됩니다. 당신이에 (글꼴을 포함) 모든 페이지의 콘텐츠 정보를 검색 계속하려면

  • :

    당신이 글꼴 정보를 검색하는 방법에 따라 다른 옵션이 있습니다, 따라서 글꼴 정보를 유지하려면 getText를 통해 하나의 문자열 : 당신은 어떤 글꼴 태그를 선택 할 때마다 글꼴 변경 (예 : [Arial])를 포함하는 방법

    private List<String> normalize(List<TextPosition> line, boolean isRtlDominant, boolean hasRtl) 
    

    을 변경합니다. 불행히도이 방법은 비공개입니다. 따라서 전체 PDFTextStripper 클래스를 복사하고 복사본의 코드를 변경해야합니다.

  • 다른 구조의 특정 글꼴 정보를 검색하려는 경우 (예 :당신이 PDFTextStripper에서 자신의 스트리퍼 클래스를 유도 할 수있다) List<List<TextPosition>>로, 그것을 복사 만 바로 전이나 라인

    writeLine(normalize(line,isRtlDominant,hasRtl),isRtlDominant); 
    

    과 후를 향상, 원하는 유형의 몇 가지 변수를 추가하고 writePage는 위에서 언급 한 protected 메소드를 오버라이드 (override) 새로운 변수에 정보를 추가하는 코드. 예 :

    public class MyPDFTextStripper extends PDFTextStripper 
    { 
        public List<List<TextPosition>> myLines = new ArrayList<List<TextPosition>>(); 
        [...] 
           if(!overlap(positionY, positionHeight, maxYForLine, maxHeightForLine)) 
           { 
            writeLine(normalize(line,isRtlDominant,hasRtl),isRtlDominant); 
            myLines.add(new ArrayList<TextPosition>(line)); 
            line.clear(); 
            [...] 
           } 
    

    지금 당신은 당신의 MyPDFTextStripper의 인스턴스에 대한 getText를 호출 결과로 일반 텍스트를 검색하고 새 변수

0

글꼴을 추가하려면 라이브러리 글꼴이 아닌 글꼴 파일을 추가해야합니다. 이 같은

+0

나는 단지 알고 싶다. 텍스트가 어떤 글꼴로 쓰여 있는지, 내 컴퓨터에 글꼴이 이미 설치되어 있는지 확인하십시오. –

관련 문제