Windows容器部署文档转PDF服务日文显示为空方框如何解决
Windows容器中日文转PDF显示空方框修复方案
安装MS Mincho、MS Gothic等日文字体后仍然显示空方框,是Windows Server Core 2019容器的字体加载机制限制导致的,和字体文件本身无关,按以下步骤修复即可:
- 不要直接把字体文件复制到
C:\Windows\Fonts目录就算完成安装,Server Core容器默认不会自动扫描该目录注册新字体,必须手动写入对应的注册表项才能让系统识别到MS Mincho、MS Gothic这类日文字体 - 当前使用的20210209版本的4.7.2 runtime基础镜像存在已知bug,内置的字体fallback链缺失日文字体映射,就算字体安装成功,渲染组件找不到对应字符的字体映射时仍然会输出空方框
具体修复步骤
1. 修正Dockerfile中的字体安装逻辑
准备好合法授权的msmincho.ttc、msgothic.ttc字体文件放到构建上下文的fonts目录,同时在该目录下创建字体注册用的注册表文件fonts.reg,内容如下:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts] "MS Mincho & MS PMincho (TrueType)"="msmincho.ttc" "MS Gothic & MS PGothic & MS UI Gothic (TrueType)"="msgothic.ttc" [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink] "Microsoft Sans Serif"="msgothic.ttc,MS Gothic" "Tahoma"="msgothic.ttc,MS Gothic" "Segoe UI"="msgothic.ttc,MS Gothic"
在Dockerfile中添加以下构建步骤完成字体安装和注册:
# 复制字体文件到系统字体目录 COPY fonts/*.ttc C:/Windows/Fonts/ # 导入字体注册表配置 COPY fonts/fonts.reg C:/Windows/Temp/ RUN regedit /s C:/Windows/Temp/fonts.reg # 给普通运行用户授予字体读取权限 RUN icacls C:/Windows/Fonts/*.ttc /grant "Users:(R)"
2. 补全GDI+多语言渲染依赖
如果使用System.Drawing.Common或者其他基于GDI+的组件做文档解析和PDF渲染,需要安装Server Core镜像默认缺失的字体支持可选组件:
RUN dism /online /enable-feature /featurename:ServerCoreFonts /all /norestart
3. 替换存在bug的基础镜像版本
去掉基础镜像tag中固定的20210209版本标记,使用当前最新补丁版的ltsc2019 .NET Framework 4.7.2镜像即可,固定旧版本镜像无法获得后续的字体渲染相关bug修复。
验证方法
构建完成后进入容器,执行以下PowerShell命令确认字体被系统正确识别:
[System.Drawing.Text.InstalledFontCollection]::new().Families | Where-Object Name -match 'MS (Mincho|Gothic)' | Select-Object Name
命令输出能看到MS Mincho、MS Gothic字体条目时,再执行文档转PDF任务即可正常显示日文字符,不会再出现空方框。
内容的提问来源于stack exchange,提问作者Dmitry Senin
相关产品推荐
相关产品推荐

