我将Java 11 Corretto+Spring Boot与Apache POI结合使用,但在AWS Lambda上使用时遇到了问题.如果我以"普通"API运行,效果很好,但在AWS lambda中运行servless时失败.
try (ByteArrayOutputStream out = new ByteArrayOutputStream(); SXSSFWorkbook workbook = new SXSSFWorkbook(1000)) {
SXSSFSheet sheet = workbook.createSheet("test"); //error here!!
} ...
原因:java.lang.错误:可能的致命错误:没有物理字体
我试图修复字体,但不知道如何继续
@PostConstruct
public void loadFonts() {
URL configURL = getClass().getClassLoader().getResource("fontconfig.properties");
String path = configURL != null ? configURL.getPath() : null;
Properties props = System.getProperties();
LOGGER.info("Loading font config file: {}", path);
props.put("sun.awt.fontconfig", path);
String[] fonts;
try {
GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
} catch (Throwable ex) {
LOGGER.warn("Reloading Fonts");
}
try {
fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
for (String font : fonts) {
LOGGER.info("Available Font: {}", font);
}
} catch (Throwable ex) {
LOGGER.error("Could not load Fonts");
}
}
配置文件:
version=1
sequence.allfonts=default
在AWS Lambda上运行时,它会向日志(log)输出一些字体,因此我不明白为什么会出现此错误:
2022-05-31 16:00:14 INFO Starting Lambda Container Handler 2022-05-31 16:00:18 INFO Loading font config file: /var/task/fontconfig.properties 2022-05-31 16:00:18 INFO Available Font: Dialog 2022-05-31 16:00:18 INFO Available Font: DialogInput 2022-05-31 16:00:18 INFO Available Font: Monospaced 2022-05-31 16:00:18 INFO Available Font: SansSerif 2022-05-31 16:00:18 INFO Available Font: Serif
知道如何添加物理字体吗?为什么POI不能使用输出到日志(log)中的可用字体?
EDIT:
`props.setProperty("java.awt.headless", "true");`