运行 在 Docker 上使用 Opensagres 和 Apache poi 将 DOCX 转换为 PDF 会导致缺少符号

DOCX to PDF conversion using Opensagres and Apache poi results in missing symbols when running on Docker

我正在使用此代码将 docx 转换为 pdf:

try {
        PdfOptions options = PdfOptions.create();
        PdfConverter.getInstance().convert(firstDoc, out, options);
    } catch (IOException ex) {
        throw new IllegalArgumentException("Conversion failed.");
    }
    return prepareResponseEntity(out);

它在 Windows 上运行良好,但是当它在 docker 上运行 运行 时,转换会跳过“ąčęėįšųūž”和西里尔字母等符号。

我尝试将字体嵌入到模板中。将 .docx 模板更改为 Liberation 字体“sans”并导入其“ttf 文件”,但没有任何效果。我无法安装微软字体,因为这个应用程序用于商业目的。

我有哪些选择?

我找到了解决方案:

try {
        PdfOptions options = PdfOptions.create();
        options.fontProvider((familyName, encoding, size, style, color) -> {
            try {
                BaseFont baseFont = BaseFont.createFont("fonts/LiberationSans-Regular.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
                return new Font(baseFont, size, style, color);
            } catch (Exception e) {
                throw new IllegalArgumentException("Font was not found" + e);
            }
        });
        PdfConverter.getInstance().convert(firstDoc, out, options);
    } catch (IOException ex) {
        throw new IllegalArgumentException("Conversion failed");
    }
    return prepareResponseEntity(out);

您还需要将您的字体 .ttf 文件添加到资源文件夹中,这样就可以了!