Jasper 在 openjdk:15-alpine 中声明时报告字体问题

Jasper Reports fonts problem when stating in openjdk:15-alpine

我知道有很多类似的问题,但我没有找到确切的案例

我有:

  1. Spring 启动应用程序
  2. pom.xml
<dependency>
  <groupId>net.sf.jasperreports</groupId>
  <artifactId>jasperreports</artifactId>
  <version>6.17.0</version>
</dependency>

<dependency>
  <groupId>net.sf.jasperreports</groupId>
  <artifactId>jasperreports-fonts</artifactId>
  <version>6.17.0</version>
</dependency>
  1. src/main/resources/jasperreports_extension.属性
net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.myfamily=fonts/myfamily.xml

  1. src/main/resources/fonts/myfamily.xml
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
    <fontFamily name="Tahoma">
        <normal><![CDATA[fonts/Tahoma/tahoma.ttf]]></normal>
        <pdfEncoding><![CDATA[Cp1251]]></pdfEncoding>
        <pdfEmbedded><![CDATA[true]]></pdfEmbedded>
        <exportFonts/>
        <locales>
            <locale><![CDATA[ru_RU]]></locale>
        </locales>
    </fontFamily>
</fontFamilies>

  1. src/main/resources/fonts/Tahoma/tahoma.ttf

一切正常!使用 ADOPT-OPEN 在本地启动时JDK-15(大写抱歉)

在服务器上启动时出现问题,在 docker 我的应用程序在 openjdk:15-alpine 中启动,默认情况下只包含一些字体 https://wiki.alpinelinux.org/wiki/Fonts

我遇到了两个错误 第一次打时:

java.lang.UnsatisfiedLinkError: /opt/openjdk-15/lib/libfontmanager.so: Error loading shared library libfreetype.so.6: No such file or directory (needed by /opt/openjdk-15/lib/libfontmanager.so)

并且当第二次点击时(每次都出现以下错误)有趣的是为什么总是第一次出现错误但第二次和其他时候出现另一个错误

java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.engine.util.JRStyledTextParser] with root cause

我尝试了一些解决方案

  1. 将 JAVA_OPT 添加到 docker 容器
-Djava.awt.headless=true 
  1. 添加了对docker容器的依赖
RUN apk update && apk upgrade \
   && apk add --no-cache ttf-dejavu

对我有用!!! (但不是我的情况,因为我不想添加其他依赖项,这可能会导致在服务器上部署我的应用程序时出现更多问题)

  1. 切换到另一个 jdk(不是 alpine)有效,但我的情况也不是这样,因为我必须使用 alpine 版本

  2. 将pdf编码切换为

<pdfEncoding><![CDATA[Identity-H]]></pdfEncoding>
  1. 尝试添加 default.jasperreports.properties

net.sf.jasperreports.default.font.name=Tahoma
net.sf.jasperreports.default.pdf.font.name=Tahoma
net.sf.jasperreports.default.pdf.encoding=Cp1252
net.sf.jasperreports.default.pdf.embedded=false

这里我遇到了另一个 NPE 错误,用谷歌搜索了一下,只是找到了一个摆脱默认属性的答案,没有人解决这个问题

那么如何处理 ALPINE 中的这些错误 JDK ?

实际上Alex K在上面提到的安装一些字体包是没有办法的。

我最终在创建没有任何文本、任何形式、任何字体的空 Jasper 模板时弄明白了。并且出现了同样的问题。

而且我不得不从 Jasper 迁移到 iText 库,因为对我来说,由于 ci/cd 和部署设置

,保留 jdk alpine 版本更为重要