You need to enable JavaScript to run this app. 在Linux Docker容器中运行Telerik Reporting生成PDF无文字如何解决
优惠活动
大模型
产品
解决方案
定价
更多

在Linux Docker容器中运行Telerik Reporting生成PDF无文字如何解决

解决方案

1. 开启System.Drawing.Common Unix运行支持

.NET Core 3.1配套的System.Drawing.Common库默认在非Windows环境下禁用部分GDI+功能,需显式开启兼容开关,在程序入口(如Program.cs的Main方法最开头)添加以下代码:

AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);

也可在项目根目录新建runtimeconfig.template.json文件,添加配置实现全局生效:

{
  "configProperties": {
    "System.Drawing.EnableUnixSupport": true
  }
}

2. 补充Dockerfile字体缓存刷新与权限配置

当前的Dockerfile安装字体后没有刷新系统字体缓存,也没有配置字体文件的读取权限,导致Telerik无法读取到安装的字体,修改后的Dockerfile参考如下:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
RUN sed -i'.bak' 's/$/ contrib/' /etc/apt/sources.list
RUN apt-get update && apt-get install -y --no-install-recommends \
    ttf-mscorefonts-installer \
    fontconfig \
    libc6-dev \
    libgdiplus \
    libx11-dev \
    && rm -rf /var/lib/apt/lists/*
# 强制刷新系统字体缓存
RUN fc-cache -fv
# 给字体目录配置全局读权限
RUN chmod -R 755 /usr/share/fonts/truetype/msttcorefonts

3. 显式给Telerik指定字体查找路径

避免系统字体查找逻辑异常,可在程序启动时手动给Telerik Reporting指定字体目录,代码如下:

// 路径对应Docker中微软字体的默认安装路径,可根据实际情况调整
Telerik.Reporting.Processing.FontRepository.Instance.AddFontPath("/usr/share/fonts/truetype/msttcorefonts");

4. 确认报表使用的字体已正确安装

如果你的报表使用了ttf-mscorefonts-installer包以外的字体,需要手动将对应字体文件复制到容器的字体目录,再刷新缓存。可在容器中执行fc-list命令查看所有已安装的字体,确认报表用到的字体是否在列表中。

内容的提问来源于stack exchange,提问作者Feras Salim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 11:54:03