2012-02-13 32 views
6

Estoy evaluando apache poi como una opción para escribir archivos docx. Lo específico que estoy buscando es generar contenido en el archivo docx en diferentes idiomas (hindi/marathi para ser específico). Estoy frente a la siguiente cuestión:Apache POI - Problema de salida de Docx

Cuando el archivo docx se escribe el texto "Hindi/marathi" es visible como cuadrados, aunque el tipo de letra "Arial Unicode MS" lo soporta. El punto es que cuando marcamos las casillas, MS Word muestra la fuente como "Cailbri", aunque he establecido explícitamente la fuente como "Arial Unicode MS". Si selecciono los cuadros en MS Word y luego cambio la fuente a "Arial Unicode MS", las palabras hindi/marathi son visibles correctamente. ¿Alguna idea de por qué sucede esto? Tenga en cuenta que estoy usando una versión de desarrollo de PDI ya que la versión estable anterior no era compatible con la configuración de familias de fuentes. Aquí está la fuente:

import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import org.apache.poi.xwpf.usermodel.XWPFDocument; 
import org.apache.poi.xwpf.usermodel.XWPFParagraph; 
import org.apache.poi.xwpf.usermodel.XWPFRun; 

public class CreateDocumentFromScratch 
{ 

    public static void main(String[] args) 
    { 
     XWPFDocument document = new XWPFDocument(); 

     XWPFParagraph paragraphTwo = document.createParagraph(); 
     XWPFRun paragraphTwoRunOne = paragraphTwo.createRun();  
     paragraphTwoRunOne.setFontFamily("Arial Unicode MS"); 
     paragraphTwoRunOne.setText("नसल्यास"); 


     XWPFParagraph paragraphThree = document.createParagraph(); 
     XWPFRun paragraphThreeRunOne = paragraphThree.createRun(); 
     paragraphThreeRunOne.setFontFamily("Arial Unicode MS"); 
     paragraphThreeRunOne.setText("This is nice"); 

     FileOutputStream outStream = null; 
     try { 
      outStream = new FileOutputStream("c:/will/First.doc"); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 

     try { 
      document.write(outStream); 
      outStream.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

Cualquier ayuda será apreciada.

+0

Proporcione la versión exacta de POI y MS Word: parece que el problema no ocurre con las versiones de POI recientes. –

+1

Probé tu código con POI API 3.11 y funcionó bien. Usé MS Word 2013 para abrir el archivo .doc – esprittn

Respuesta

1

Para resucitar una publicación muy antigua; ¿Puede el OP confirmar la versión de MS Office que se está utilizando? El problema parece ser que MS Office 2003 se ejecuta en Windows XP. Pero también podría estar en una versión de sistema operativo más alta.

Parece que MS Word aplica la fuente Mangal para escritura Hindi [Estándar de codificación: Indic: Hindi ISCII 57002 (Devanagari)]. El siguiente enlace explica esto:

https://support.office.com/en-ca/article/Choose-text-encoding-when-you-open-and-save-files-60d59c21-88b5-4006-831c-d536d42fd861

solución sugerida: el Panel de control de Windows XP, seleccione Opciones regionales y de idioma. Seleccione idiomas Marque la casilla "Instalar archivos de escritura compleja y de idiomas de derecha a izquierda (incluyendo tailandés).

Reiniciar PC.

Sin embargo, no se observó tal problema al abrir el archivo con versiones de LibreOffice 4.3.5.2 de . ventanas, y LibreOffice 4.2.7.2 en Linux (Ubuntu)

utilizado las siguientes bibliotecas: poi-3.10-FINAL-20140208.jar, poi-OOXML-3.10-FINAL-20140208.jar,
poi-OOXML -schemas-3.10-FINAL-20140208.jar, xmlbeans-2.3.0.jar, dom4j-1.6.1.jar, stax-api-1.0.1.jar

Cuestiones relacionadas