2010-07-28 2 views
6

현재 Apache poi를 사용하여 Java 프로젝트를 진행 중입니다. 내 프로젝트에서 doc 파일을 pdf 파일로 변환하고 싶습니다. 변환은 성공적으로 완료되었지만 텍스트 스타일이나 텍스트 색상이 아닌 pdf로 된 텍스트 만 가져옵니다. 내 PDF 파일이 검은 색으로 보입니다. & 흰색입니다. 내 문서 파일은 색칠되어 있고 다른 텍스트 스타일을 사용합니다. Apache POI HWPF - pdf로 변환하는 doc 파일의 문제

POIFSFileSystem fs = null; 
Document document = new Document(); 

try { 
    System.out.println("Starting the test"); 
    fs = new POIFSFileSystem(new FileInputStream("/document/test2.doc")); 

    HWPFDocument doc = new HWPFDocument(fs); 
    WordExtractor we = new WordExtractor(doc); 

    OutputStream file = new FileOutputStream(new File("/document/test.pdf")); 

    PdfWriter writer = PdfWriter.getInstance(document, file); 

    Range range = doc.getRange(); 
    document.open(); 
    writer.setPageEmpty(true); 
    document.newPage(); 
    writer.setPageEmpty(true); 

    String[] paragraphs = we.getParagraphText(); 
    for (int i = 0; i < paragraphs.length; i++) { 

     org.apache.poi.hwpf.usermodel.Paragraph pr = range.getParagraph(i); 
     // CharacterRun run = pr.getCharacterRun(i); 
     // run.setBold(true); 
     // run.setCapitalized(true); 
     // run.setItalic(true); 
     paragraphs[i] = paragraphs[i].replaceAll("\\cM?\r?\n", ""); 
    System.out.println("Length:" + paragraphs[i].length()); 
    System.out.println("Paragraph" + i + ": " + paragraphs[i].toString()); 

    // add the paragraph to the document 
    document.add(new Paragraph(paragraphs[i])); 
    } 

    System.out.println("Document testing completed"); 
} catch (Exception e) { 
    System.out.println("Exception during test"); 
    e.printStackTrace(); 
} finally { 
       // close the document 
    document.close(); 
      } 
} 

좀 도와주세요, 내 코드입니다.

Thnx.

답변

4

Apache Tika를 보면 HWPF 문서에서 몇 가지 스타일 정보를 읽는 좋은 예가 있습니다. Tika의 코드는 HWPF 내용을 기반으로 HTML을 생성하지만 사용자는 매우 유사한 기능을 제공합니다.

티카 클래스는 하나 개의 문자 실행의 모든이에 적용되는 동일한 서식을 가지고 있다는 것입니다 워드 문서에 대해주의 할 https://svn.apache.org/repos/asf/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/WordExtractor.java

한 가지입니다. 단락은 하나 이상의 문자 실행으로 구성됩니다. 일부 스타일은 단락에 적용되고 다른 부분은 실행 중에 수행됩니다. 어떤 서식 지정 관심사에 따라 따라서 단락이나 실행에있을 수 있습니다.

3

WordExtractor를 사용하면 텍스트 만 표시됩니다. CharacterRun 클래스를 사용해보십시오. 텍스트와 함께 스타일을 얻을 수 있습니다. 다음 샘플 코드를 참조하십시오.

Range range = doc.getRange(); 
for (int i = 0; i < range.numParagraphs(); i++) { 
    org.apache.poi.hwpf.usermodel.Paragraph poiPara = range.getParagraph(i); 
    int j = 0; 
    while (true) { 
     CharacterRun run = poiPara.getCharacterRun(j++); 
     System.out.println("Color "+run.getColor()); 
     System.out.println("Font size "+run.getFontSize()); 
     System.out.println("Font Name "+run.getFontName()); 
     System.out.println(run.isBold()+" "+run.isItalic()+" "+run.getUnderlineCode()); 
     System.out.println("Text is "+run.text()); 
     if (run.getEndOffset() == poiPara.getEndOffset()) { 
      break; 
     } 
    } 
}