我正在評估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