Шрифты для генерации отчетов в PDF

Jmix 1.3.5
Windows 10
Jdk Liberika 17.0.3.1

Есть собственный TTF шрифт, установленный в систему.
MS Word и LibreOffice его видят и можно назначить его тексту.

Если создать отчет с шаблоном DOCX и с использованием этого шрифта, то при выводе в PDF шрифт не находится - получается “##########################”, а журнале сообщения:

org.docx4j.fonts.IdentityPlusMapper      : - - No physical font for: My font
org.docx4j.fonts.RunFontSelector         : Font 'My font' is not mapped to a physical font.

Если использовать штатные виндовые шрифты (Arial, Calibri, Symbols, …), то текст отображается нормально.

Скажите, пожалуйста, куда еще подложить шрифт или какую настройку еще можно сделать?

Нашел проблему
В описании шрифта есть 3 значения
image

При определении физ.шрифтов в хеш заносится первое значение

PhysicalFonts.getPhysicalFont()
FontTriplet triplet = (FontTriplet)fontInfo.getFontTriplets().get(0);

А из документа приходит название, которое в описании шрифта 3е
image

И при формировании PDF шрифт не находится.

Может быть есть какая-то возможность смапить или еще как-то подставить нужное имя шрифта?

А по-моему не все шрифты можно в PDF вставить. В свойствах PDF файла ваш шрифт присутствует? Т.е. может быть он там есть, но не отображается по каким-нибудь лицензионным ограничениям. Или при генерации PDF должно в какой-нибудь лог поругаться, что этот шрифт нельзя использовать. Но это всё не точно…

Да, не все можно вставить. doc4j отбрасывает часть шрифтов, установленных в системе при составлении хэша. В моем случае, шрифты не отбрасываются, а добавляются в хэш, но название в хэше не соответствует названию в документе.
На форумах есть примеры, как использовать это шрифт, но поскольку, doc4j завернут в jmix, то надо искать какой-то еще способ, чтобы пробравшись сквозь недра jmix каким-то образом заставить doc4j использовать нужный шрифт.
Может можно как-то переключить генерацию DOCX в PDF не через doc4j, а через Либру?

Это легко, см. Output Format Compliance Matrix.
Вам нужно выставить свойство jmix.reports.use-office-for-document-conversion = true.

1 симпатия

@krivopustov Константин, спасибо! Этот вариант работает.
Также мне удалось заставить работать и doc4j.
При запуске приложения (т.е. до первого запуска отчета) разместил код:

        try {
            PhysicalFonts.discoverPhysicalFonts();
            PhysicalFonts.put("Libre Barcode 39", PhysicalFonts.get("Libre Barcode 39 Regular"));
            PhysicalFonts.put("Libre Barcode 39 Text", PhysicalFonts.get("Libre Barcode 39 Text Regular"));
        } catch (Exception e) {
            throw new RuntimeException("PhysicalFonts.discoverPhysicalFonts", e);
        }

Т.е. найденные шрифты добавил в хэш с нужными идетификаторами.

1 симпатия