2017-05-18 4 views
0

를 사용 .DOCX 파일에 대해 null을 반환 각 단락. (내가 선택한 각 글꼴 - 가족), 글꼴 이름, textPosition가run.getFontFamily는() 나는 단락에 의한 .DOCX 파일 단락을 읽고 싶어 나는에 대한 글꼴 - 가족, 글꼴 크기, 여백, 정렬, 색상 등을 확인 할 아파치 POI

FileInputStream fis = new FileInputStream("D:/test3.docx"); 
XWPFDocument docx = new XWPFDocument(fis); 
List<XWPFParagraph> paragraphList = docx.getParagraphs(); 
for (int i = 0; i < paragraphList.size(); i++) { 
      System.out.println("paragraph " + i + " is:: " + paragraphList.get(i).getText()); 
      for (XWPFRun run : paragraphList.get(i).getRuns()) { 
       System.out.println("paragraph :: run text is:: " + run.text()); 
       System.out.println("paragraph :: run color is:: " + run.getColor()); 
       System.out.println("paragraph :: run font-famyly is:: " + run.getFontFamily()); //It always return null; why? 
       System.out.println("paragraph :: run font-name is:: " + run.getFontName()); //It always return null; why? 
       System.out.println("paragraph :: run text position is:: " + run.getTextPosition()); //It always return -1; why? 
       System.out.println("paragraph :: run font-size is:: " + run.getFontSize()); 
       System.out.println("paragraph :: run IsBold:: " + run.isBold()); 
       System.out.println("paragraph :: run IsItalic:: " + run.isItalic()); 

      }} 

그러나의 font : 이것은 내 .DOCX 파일의 예는 다음과 같습니다

Sample of .docx file

그리고 이것은 내 코드입니다 항상 null입니다. 나는이 작업을 수행하는 또 다른 코드 샘플이 있습니다

  XWPFStyles styles = docx.getStyles(); 
     for (int i = 0; i < paragraphList.size(); i++) { 
      System.out.println("paragraph " + i + " styleID is:: " + paragraphList.get(i).getStyleID()); 
      if (paragraphList.get(i).getStyleID() != null) { 
       String styleid = paragraphList.get(i).getStyleID(); 
       XWPFStyle style = styles.getStyle(styleid); 
       if (style != null) { 
        System.out.println("style name is:: " + style.getName()); 
        if (style.getName().startsWith("heading")) { 
         System.out.println("This part of text is heading!!"); 
        } 
       } 

      } 
     } 

을하지만 스타일이 제목을 제외하고 일반적으로 null입니다.

답변

0

아파치 POI는 .docx 파일의 document.xml 부분을 구문 분석합니다. run.getFontFamily()을 실행하면 글꼴 패밀리가 실행의 실행 속성에있는 경우에만 글꼴 패밀리가 반환됩니다. 그렇지 않은 경우는 null를 돌려줍니다. 예를 들어,이 샘플을 실행

<w:r> 
    <w:rPr> 
     <w:lang w:val="en-US"/> 
    </w:rPr> 
    <w:t>The quick brown fox jumps over the lazy dog.</w:t> 
</w:r> 

이 그 글꼴 가족이 <w:rPr> 실행 속성 태그에 지정된 가지고 생각. 이와 같은 경우에는 계층 구조를 올라가서이 실행 문단에 스타일이 있는지 확인해야합니다. <w:Pr> 단락 속성에도 스타일이 없으면 문서에 기본 설정된 글꼴 모음이 적용됩니다. 문서 기본값은 styles.xml 파일에 지정되어 있습니다.