2012-02-13 124 views
6

我正在评估apache poi作为编写docx文件的选项。我正在寻找的具体事情是在不同语言的docx文件中生成内容(具体而言,印地语/马拉地语)。我面临以下问题:Apache POI - Docx输出问题

当docx文件被写入时,即使字体“Arial Unicode MS”支持它,“Hindi/Marathi”文本也可以作为方框显示。重点是,当我们检查框时,MS Word将字体显示为“Cailbri”,即使我已明确将字体设置为“Arial Unicode MS”。如果我选择MS Word中的框,然后将字体更改为“Arial Unicode MS”,则可以正确显示印地文/马拉地语单词。任何想法为什么发生这种情况请注意我使用POI的开发版本,因为之前的稳定版本不支持设置字体系列。这里是来源:

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

} 

任何帮助将不胜感激。

+0

请提供POI和MS Word的确切版本 - 似乎这个问题在最近的POI版本中不会发生。 – 2015-04-18 10:16:30

+1

我用POI API 3.11试过了你的代码,它工作正常。我用MS Word 2013打开.doc文件 – esprittn 2015-05-03 06:18:27

回答

1

复活一个很旧的帖子; OP可以确认正在使用的MS Office的版本吗?问题似乎是在Windows XP上运行的MS Office 2003。但是,它也可能在更高版本的操作系统上。

看来,MS Word应用Mangal字体的印地文脚本[编码标准:印度语印地语ISCII 57002(梵文)]。下面的链接解释这一点:

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

建议的解决方法: 在Windows XP控制面板中选择区域和语言选项。选择语言。勾选“安装复杂脚本和从右到左的语言(包括泰国)文件。

重新启动电脑。

但是,使用LibreOffice的版本4.3.5.2在打开文件时没有观察到这样的问题,Windows和LibreOffice的4.2.7.2在Linux(Ubuntu的)

使用下列库: 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