Aspose.Words转PDF中文乱码主因是字体未嵌入且未配置中文字体回退,需显式设置FontSettings并注册中文字体路径;License必须在Document创建前全局调用一次;Linux需安装libgdiplus及libc6-dev。

Aspose.Words 转 PDF 时中文乱码怎么办
默认不嵌入字体,中文会直接变方框或空白。这不是编码问题,是字体缺失导致的渲染失败。
- 必须显式设置
FontSettings并启用中文字体回退(fallback):调用FontSettings.SubstitutionSettings配置DefaultFontName为"SimSun"或"Microsoft YaHei" - 若文档含多种中文字体(如黑体、楷体),需提前注册对应本地字体文件:
FontSettings.SetFontsFolder指向含.ttf的目录,否则Document.Save("out.pdf")仍可能丢字 - Windows 系统下可跳过注册,直接依赖 GDI+ 自动匹配;Linux/macOS 必须手动指定字体路径,否则一律 fallback 到 Times New Roman —— 这是乱码主因
License 验证失败报错 Aspose.Words.LicenseException: SetLicense() must be called before using Aspose.Words
不是没调用 SetLicense,而是调用时机或路径不对。该异常几乎都发生在多线程或 ASP.NET Core 启动阶段。
-
License.SetLicense()必须在任何Document实例创建前执行,且仅需一次 —— 放在Program.cs最顶部或静态构造函数里最稳妥 - 传入的 license 文件路径如果是相对路径,会以当前工作目录(
Environment.CurrentDirectory)为基准,而非项目根目录;建议用Assembly.GetExecutingAssembly().Location反推绝对路径 - 免费版有“评估模式”水印,但不会抛此异常;一旦报这个错,99% 是
SetLicense被跳过、捕获了异常却没处理,或被放在了异步初始化逻辑里
转 PDF 后表格/页眉页脚错位或截断
本质是 Word 布局与 PDF 渲染引擎对“页面边界”“自动换行”“浮动对象”的解释不一致,尤其在复杂样式文档中。
- 禁用自动缩放:
PdfSaveOptions中设UseBookFoldPrintingSettings = false,并关闭OptimizeOutput = true(后者会合并相邻文本块,破坏表格边框对齐) - 页眉页脚内容若含图片或文本框,务必检查其
LayoutFlow属性是否为LayoutFlow.Horizontal;垂直排版(如竖写)目前不被 PDF 导出完全支持 - 表格跨页断裂时,不要依赖
AllowAutoFit,改用Table.AutoFitBehavior(TableAutoFitBehavior.FixedColumnWidths)配合显式设置列宽,避免导出时重排
Linux 容器里 Aspose.Words.Save() 报 System.DllNotFoundException: libgdiplus
不是组件版本问题,是底层图形库缺失。Aspose.Words 在无 GUI 环境下仍需 libgdiplus 渲染字体度量和矢量图形。
- Dockerfile 中必须安装:
apt-get install -y libgdiplus libc6-dev(Debian/Ubuntu)或yum install -y libgdiplus(CentOS/RHEL) - 不能只装
libgdiplus,libc6-dev提供关键符号,缺它会导致运行时报undefined symbol: FT_Get_Var_Blend_Coordinates - Alpine 镜像不兼容 —— Aspose.Words 不支持 musl libc,强行运行会 SegFault;必须切到 Debian 或 Ubuntu 基础镜像
字体注册、License 加载顺序、Linux 图形依赖这三处,漏一个就卡住。其他细节再调也没用。










