运行 在 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 文件添加到资源文件夹中,这样就可以了!
我正在使用此代码将 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 文件添加到资源文件夹中,这样就可以了!