Как изменить кодировку шрифта при конвертации docx -> pdf с docx4j?

Когда я конвертирую документ в формате docx в pdf, мои национальные символы преобразуются в знаки "#".
Есть ли способ установить кодировку шрифта для документов PDF?

Я использовал xdocreport в прошлом, и он может справиться с этим, но у меня были проблемы с изображениями, верхними и нижними колонтитулами.

Docx4j удается это сделать, но не шрифты. После преобразования шрифты имеют кодировку ANSI, а я хотел бы иметь Windows-1250. Есть ли возможность установить это?

2 ответа

Решение

Моя проблема была - не хватает правильных шрифтов True Type на сервере Linux. Шрифты по умолчанию были вставлены вместо (без моих кодовых страниц).

Я решил проблему с установкой шрифтов MS Windows по умолчанию через ttf-mscorefonts-installer

На Debian:

apt-get install ttf-mscorefonts-installer

У меня та же проблема, и я обнаружил, что, как вы сами упомянули, проблема со шрифтом. Шрифт в системе должен поддерживать вашу кодировку.

Например: для документов, использующих шрифт "Arial", немецкие символы умлаут отображаются как "?".

Я нашел другое решение переопределить кодировку шрифта PDF следующим образом:

    //
    // read template
    //
    File docxFile = new File(System.getProperty("user.dir") + "/" + "Test.docx");
    InputStream in = new FileInputStream(docxFile);

    // 
    // prepare document context
    //
    IXDocReport report = XDocReportRegistry.getRegistry().loadReport(in, TemplateEngineKind.Velocity);
    IContext context = report.createContext();
    context.put("name", "Michael Küfner");

    // 
    // generate PDF output
    //
    Options options = Options.getTo(ConverterTypeTo.PDF).via(ConverterTypeVia.XWPF);
    PdfOptions pdfOptions = PdfOptions.create();
    pdfOptions.fontEncoding("iso-8859-15");
    options.subOptions(pdfOptions);     


    OutputStream out = new FileOutputStream(new File(docxFile.getPath() + ".pdf"));
    report.convert(context, options, out);

Попробуйте установить атрибут в pdfOptions.fontEndcoding (в моем случае "iso-8859-15") в соответствии с вашими потребностями.

Установка этого значения в "UTF-8", швы которого являются значениями по умолчанию, привела к той же проблеме со специальными символами.

Еще одна вещь, которую я нашел:

При использовании шрифта "Calibri", который используется по умолчанию для Word 2007/2010, проблема не возникала даже при использовании кодировки UTF-8. Возможно, встроенный шрифт Type-1 Arial в iText, который используется для создания PDF-файлов, не поддерживает кодировку UTF-8.

Другие вопросы по тегам