2010-07-28 31 views
6

Actualmente estoy trabajando en el proyecto Java con el uso de apache poi. Ahora en mi proyecto quiero convertir el archivo doc a un archivo pdf. La conversión se realizó con éxito, pero solo recibo texto en formato PDF, sin ningún estilo de texto o color de texto. Mi archivo pdf se ve como un negro & blanco. Si bien mi archivo de documento está coloreado y tiene un estilo de texto diferente.Apache POI HWPF - problema en convertir el archivo doc a pdf

Este es mi código,

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

por favor ayúdame.

Thnx por adelantado.

Respuesta

4

Si observa Apache Tika, hay un buen ejemplo de cómo leer información de estilo de un documento HWPF. El código en Tika genera HTML basado en los contenidos de HWPF, pero debería encontrar que algo muy similar funciona para su caso.

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

Una cosa a tener en cuenta sobre documentos de texto es que todo en una sola sesión de caracteres tiene el mismo formato que se le aplica. Por lo tanto, un Párrafo está compuesto por uno o más Tramos de caracteres. Algunos estilos se aplican a un párrafo y otras partes se realizan en las ejecuciones. Dependiendo de qué formato le interese, puede estar en el párrafo o la ejecución.

3

Si usa WordExtractor, obtendrá solo texto. Intenta usar la clase CharacterRun. Obtendrás estilo junto con texto. Por favor, consulte el siguiente código de muestra.

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