2010-07-28 18 views
6

Obecnie pracuję nad projektem Java z wykorzystaniem Apache Poi. Teraz w moim projekcie chcę przekonwertować plik doc do pliku pdf. Konwersja zakończyła się pomyślnie, ale otrzymuję tylko tekst w formacie PDF, a nie tekstowy lub tekstowy. Mój plik PDF wygląda jak czarny & biały. Podczas gdy mój plik doc jest kolorowy i ma inny styl tekstu.Apache POI HWPF - problem z konwersją pliku doc ​​do pdf

To jest mój kod,

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

proszę mi pomóc.

Thnx z góry.

Odpowiedz

4

Jeśli spojrzeć na Apache Tika, istnieje dobry przykład czytania pewnych informacji o stylu z dokumentu HWPF. Kod w Tika generuje HTML na podstawie zawartości HWPF, ale powinieneś zauważyć, że coś bardzo podobnego działa w twoim przypadku.

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

Jedną rzeczą, aby pamiętać o dokumentach słowo jest, że wszystko w każdym pojedynczym przejeździe postać ma takie samo formatowanie zastosowane do niego. Akapit składa się zatem z jednego lub więcej przebiegów postaci. Niektóre stylizacje są stosowane do akapitu, a inne części są wykonywane w seriach. W zależności od tego, jakie formatowanie Cię interesuje, może to być akapit lub przebieg.

3

Jeśli używasz WordExtractor, otrzymasz tylko tekst. Spróbuj użyć klasy CharacterRun. Otrzymasz styl wraz z tekstem. Proszę zapoznać się z poniższym Kodem przykładowym.

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; 
     } 
    } 
} 
Powiązane problemy