Apache POI - проблема с выходом Docx - PullRequest
6 голосов
/ 13 февраля 2012

Я оцениваю 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();
        }
    }

}

Любая помощь будет оценена.

1 Ответ

1 голос
/ 04 мая 2015

воскресить очень старый пост; ОП может подтвердить версию MS Office, которая используется? Проблема, кажется, с MS Office 2003, работающим на Windows XP. Но тогда это может быть и на более высокой версии ОС.

Похоже, что MS Word применяет шрифт Mangal для хинди-скрипта [Стандарт кодировки: Indic: Hindi ISCII 57002 (Devanagari)]. Следующая ссылка объясняет это:

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

...