2010-07-28 104 views
6

我目前正在使用apache poi工作Java項目。 現在在我的項目中,我想將doc文件轉換爲pdf文件。轉換成功完成,但我只以pdf格式獲取文本,而不是任何文本樣式或文本顏色。 我的pdf文件看起來像一個黑色&白色。雖然我的文檔文件是彩色的,並有不同風格的文字。Apache POI HWPF - 將doc文件轉換爲pdf的問題

這是我的代碼,

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

有一點需要注意的Word文檔的是,一切都在任意一個字符運行應用了相同的格式。段落因此由一個或多個字符運行組成。一些樣式適用於段落,其他部分則在運行中完成。取決於你對格式的興趣,因此可能在段落或跑步上。

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; 
     } 
    } 
} 
相關問題