Я оцениваю apache poi как вариант для записи файлов docx. Конкретная вещь, которую я ищу, - генерировать контент в файле docx на разных языках (точнее, хинди / маратхи). Я сталкиваюсь со следующей проблемой:
Когда файл docx записывается, текст «хинди / маратхи» отображается в виде квадратных прямоугольников, даже если шрифт «Arial Unicode MS» поддерживает это. Дело в том, что когда мы устанавливаем флажки, 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();
}
}
}
Любая помощь будет оценена.