Apache POI HWPF - проблема при конвертации doc файла в pdf - PullRequest
6 голосов
/ 28 июля 2010

В настоящее время я работаю над проектом Java с использованием apache poi.Теперь в моем проекте я хочу конвертировать файл DOC в файл PDF.Преобразование выполнено успешно, но я получаю только текст в формате PDF, а не текстовый стиль или цвет текста.Мой 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();  
             }  
 }  

, пожалуйста, помогите мне.

Спасибо заранее.

Ответы [ 2 ]

4 голосов
/ 07 апреля 2011

Если вы посмотрите на Apache Tika, есть хороший пример чтения информации о стиле из документа HWPF. Код в Tika генерирует HTML на основе содержимого HWPF, но вы должны обнаружить, что что-то очень похожее работает для вашего случая.

Класс Тика https://svn.apache.org/repos/asf/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/WordExtractor.java

Одна вещь, которую следует отметить в документах Word, это то, что ко всем в одном символьном прогоне применяется одинаковое форматирование. Таким образом, абзац состоит из одного или нескольких наборов символов. Некоторые стили применяются к абзацу, а другие части выполняются на ходу. В зависимости от того, какое форматирование вас интересует, оно может быть в абзаце или в прогоне.

3 голосов
/ 13 марта 2012

Если вы используете 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;
        }
    }
}
...