2010-07-28 9 views
6

Attualmente sto lavorando a un progetto Java con l'uso di apache poi. Ora nel mio progetto voglio convertire il file doc in file pdf. La conversione è stata eseguita correttamente, ma ottengo solo testo in pdf, non uno stile di testo o il colore del testo. Il mio file pdf si presenta come un nero & bianco. Mentre il mio file doc è colorato e ha uno stile di testo diverso.Apache POI HWPF - problema nel file convert in pdf

Questo è il mio codice,

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

ti prego, aiutami.

Thnx in anticipo.

risposta

4

Se si guarda Apache Tika, c'è un buon esempio di lettura di alcune informazioni di stile da un documento HWPF. Il codice in Tika genera HTML basato sui contenuti HWPF, ma dovresti trovare qualcosa di molto simile per il tuo caso.

La classe Tika è https://svn.apache.org/repos/asf/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/WordExtractor.java

Una cosa da notare su documenti di Word è che tutto in un unico viaggio carattere ha la stessa formattazione applicata ad esso. Un paragrafo è quindi costituito da una o più serie di caratteri. Alcuni stili vengono applicati a un paragrafo e altre parti vengono eseguite nelle esecuzioni. A seconda della formattazione che ti interessa, potrebbe essere sul paragrafo o sulla corsa.

3

Se si utilizza WordExtractor, verrà visualizzato solo il testo. Prova a utilizzare la classe CharacterRun. Otterrai stile insieme al testo. Si prega di fare riferimento al seguente codice di esempio.

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