2010-07-28 10 views
6

Ich arbeite derzeit Java-Projekt mit der Verwendung von Apache Poi. Jetzt in meinem Projekt möchte ich doc-Datei in PDF-Datei konvertieren. Die Konvertierung wurde erfolgreich durchgeführt, aber ich erhalte nur Text in PDF, keine Textsorte oder Textfarbe. Meine PDF-Datei sieht wie ein schwarzes & weiß aus. Während meine Doc-Datei farbig ist und einen anderen Textstil aufweist.Apache POI HWPF - Problem beim Konvertieren von doc-Datei in pdf

Dies ist mein Code,

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(); 
      } 
} 

mir bitte helfen.

Thnx im Voraus.

Antwort

4

Wenn Sie Apache Tika betrachten, gibt es ein gutes Beispiel für das Lesen einiger Stilinformationen aus einem HWPF-Dokument. Der Code in Tika generiert HTML basierend auf den HWPF-Inhalten, aber Sie sollten feststellen, dass etwas sehr ähnliches für Ihren Fall funktioniert.

Die Tika-Klasse ist https://svn.apache.org/repos/asf/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/WordExtractor.java

Eine Sache, über Word-Dokumente zu beachten ist, dass alles in einem Character Run die gleiche Formatierung angewandt wird. Ein Absatz besteht daher aus einem oder mehreren Charakterläufen. Einige Stile werden auf einen Absatz angewendet und andere Teile werden auf den Läufen ausgeführt. Abhängig davon, welche Formatierung Sie interessiert, kann es sich daher um den Absatz oder den Lauf handeln.

3

Wenn Sie WordExtractor verwenden, erhalten Sie nur Text. Versuchen Sie es mit CharacterRun Klasse. Sie werden Stil mit Text bekommen. Bitte beachten Sie folgenden Beispielcode.

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; 
     } 
    } 
}