我正在评估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();
}
}
}
任何帮助将不胜感激。
请提供POI和MS Word的确切版本 - 似乎这个问题在最近的POI版本中不会发生。 – 2015-04-18 10:16:30
我用POI API 3.11试过了你的代码,它工作正常。我用MS Word 2013打开.doc文件 – esprittn 2015-05-03 06:18:27