You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core部署Azure Linux App Service后PDF生成对齐问题求助

解决Azure Linux App Service上SautinSoft.Document DOCX转PDF字体缺失问题

核心原因

Azure Linux App Service默认未预装Windows常用字体(如宋体、微软雅黑等),SautinSoft.Document转换时找不到对应字体,会自动使用系统默认替代字体,进而引发排版错位问题。

具体解决方案

1. 打包字体到应用程序

  • 将所需字体文件(如simsun.ttf、msyh.ttc)添加到项目,设置复制到输出目录为「始终复制」。
  • 在代码中指定字体搜索路径,让组件加载本地字体:
// 指向项目根目录下的Fonts文件夹
string fontFolder = Path.Combine(AppContext.BaseDirectory, "Fonts");
FontSettings.Default.FontsSources.Add(new FontFileSource(Directory.GetFiles(fontFolder)));

2. 在Azure Linux环境安装系统字体

通过SSH终端或自定义启动脚本安装字体:

  • 连接App Service SSH终端,执行命令安装开源中文字体:
sudo apt-get update
sudo apt-get install -y fonts-wqy-microhei fonts-wqy-zenhei
  • 若需Windows字体,手动上传字体文件到/usr/share/fonts目录后,执行更新缓存命令:
sudo fc-cache -fv

3. 配置字体 fallback 映射

若无法安装目标字体,可指定替代字体保障排版一致性:

// 映射缺失字体到可用替代字体
FontSettings.Default.FontReplacements.Add(new FontReplacement("宋体", "Noto Sans CJK SC"));
FontSettings.Default.FontReplacements.Add(new FontReplacement("微软雅黑", "Noto Sans CJK SC"));

4. 验证字体加载状态

转换前添加日志输出,确认字体是否被正确识别:

foreach (var font in FontSettings.Default.GetAvailableFonts())
{
    Console.WriteLine($"可用字体:{font.FamilyName}");
}

注意事项

  • 确保使用的字体具备合法授权,避免版权风险。
  • 若用自定义启动脚本,需在Azure门户的App Service配置中设置启动命令,例如:bash ./install-fonts.sh && dotnet YourApp.dll
  • 可通过Kudu站点检查应用目录下的字体文件是否存在,或通过SSH终端执行fc-list命令查看系统已安装字体。

内容的提问来源于stack exchange,提问作者Suresh Sankar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 09:37:10