使用openhtmltopdf的AutoFont添加PDF字体失败,求解决方案
openhtmltopdf 字体未应用问题排查与解决
问题现象
使用openhtmltopdf的AutoFont类加载Roboto字体目录,控制台显示字体已加载,但生成的PDF未应用该字体。
排查与解决步骤
验证HTML模板的CSS字体引用
确保HTML中的font-family属性值与AutoFont.toCSSEscapedFontFamily(fonts)生成的字体族名完全匹配。可以先将fontFamily变量打印到控制台,比如输出为Roboto,则CSS中需设置:body { font-family: 'Roboto', sans-serif; }同时检查是否有其他CSS规则(如内联样式、优先级更高的选择器)覆盖了字体设置。
确认字体文件有效性
检查/Users/fabio/Downloads/Roboto/目录下的字体文件是否完整(包含Regular、Bold等所需变体),且为openhtmltopdf支持的TrueType(.ttf)或OpenType(.otf)格式,避免使用损坏的字体文件。调整FastMode设置
builder.useFastMode()可能会影响字体的解析逻辑,尝试注释掉该行代码后重新生成PDF,看字体是否正常应用。手动添加字体(备选方案)
若AutoFont自动加载存在问题,可尝试手动指定字体文件,替代AutoFont相关代码:// 替换AutoFont相关代码 builder.useFont(new File("/Users/fabio/Downloads/Roboto/Roboto-Regular.ttf"), "Roboto"); builder.useFont(new File("/Users/fabio/Downloads/Roboto/Roboto-Bold.ttf"), "Roboto", PdfRendererBuilder.FontStyle.BOLD); builder.useFont(new File("/Users/fabio/Downloads/Roboto/Roboto-Italic.ttf"), "Roboto", PdfRendererBuilder.FontStyle.ITALIC);这种方式更直接可控,能确保字体被正确注册。
检查字体加载日志
可以开启openhtmltopdf的调试日志,查看字体加载和匹配的详细过程,定位是否存在字体匹配失败的情况。
内容的提问来源于stack exchange,提问作者Fabio Ebner
相关产品推荐
相关产品推荐

