среда, 21 августа 2019 г.

Как добавить в Spring Boot приложение шрифты для библиотеки jasperreports. How to add fonts into Spring Boot application for the jasperreports library

Один из непростых квестов, с которыми мне пришлось столкнуться в последнее время - добавление китайских шрифтов для создания документов с помощью библиотеки jasperreports.
Решил так:

1. Скачал китайский true type шрифт ARIALUNI.TTF вот отсюда: https://community.jaspersoft.com/sites/default/files/files/Report24775-eastAsian.zip

2. Добавил в каталог resources проекта файл шрифтов, а также следующие файлы:
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<fontFamily name="ARIALUNI">
<normal><![CDATA[fonts/ARIALUNI/ARIALUNI.TTF]]></normal>
<pdfEncoding><![CDATA[Identity-H]]></pdfEncoding>
<exportFonts/>
</fontFamily>
</fontFamilies>

net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.ireportfamily1565796714618=fonts/fontsfamily1565796714618.xml

Место размещения файлов должно быть следующим:


3. Проверил доступность шрифтов для библиотеки jasperreports:
import net.sf.jasperreports.extensions.ExtensionsEnvironment;
import net.sf.jasperreports.engine.fonts.FontFamily;
public class Application {
public static void main(String args[]) {
List<FontFamily> families = ExtensionsEnvironment.getExtensionsRegistry().getExtensions(FontFamily.class);
System.out.println("Available fonts: " + families);
}
}

Как добавить шрифты в docker-контейнер. How to add fonts into docker container


Вариант 1: добавляем пакет MS Core Fonts:
# Base OS layer
FROM openjdk:8-jdk-alpine
# Install packages
RUN apk --no-cache add curl ttf-dejavu msttcorefonts-installer fontconfig \
&& update-ms-fonts \
&& fc-cache -f
view raw Dockerfile hosted with ❤ by GitHub
Вариант 2: добавляем отдельно ttf-файл шрифтов:
FROM openjdk:8-jdk-alpine
# Install font file
RUN mkdir -p /usr/share/fonts/truetype/myfont
COPY MYFONT.TTF /usr/share/fonts/truetype/myfont
RUN fc-cache -fv
view raw Dockerfile hosted with ❤ by GitHub
Проверяем доступность шрифтов в системе:
import java.awt.GraphicsEnvironment;
public class Application {
public static void main(String args[]) {
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
System.out.println("Avialable fonts:");
for (String fontName : env.getAvailableFontFamilyNames()) {
System.out.println(fontName);
}
}
}