Как изменить кодировку шрифта при конвертации 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.