UOS(基于 RHEL 7)/ .NET Core 应用 / DevExpress 报表打印中文缺失问题
问题现象
服务器环境:统信 UOS(基于 RHEL 7)/ .NET Core 应用 / DevExpress 报表打印
打印预览时发现一个奇怪的现象:
-
姓名→ 显示为姓(“名”丢了) -
名名名名名名名→ 显示为名(连续相同字符只显示一个) -
名称名词名表→ 显示为名称名词名表(非连续字符正常)
libgdiplus 版本 4.2 在渲染连续相同字符时存在 Bug。当渲染“名名名名名名名”时,它错误地合并了相同的字符,导致只显示一个“名”。而“名称名词名表”因为字符不完全相同,所以能完整显示。
升级到 libgdiplus 6.2 后,问题解决!
一、安装 libgdiplus 6.2
1.1 安装编译依赖
sudo yum install -y autoconf automake libtool \glib2-devel cairo-devel \libjpeg-turbo-devel libpng-devel libtiff-devel \giflib-devel libX11-devel \fontconfig-devel freetype-devel \libexif-devel
.2 下载源码
cd /root
wget https://dl.winehq.org/mono/sources/libgdiplus/libgdiplus-6.2.tar.gz
1.3 编译安装
tar -zxvf libgdiplus-6.2.tar.gz
cd libgdiplus-6.2
autoreconf -fi
./configure --prefix=/usr
make
sudo make install
1.4 验证版本
pkg-config --modversion libgdiplus
# 输出:6.2 ✅
其他:
sudo cat /proc/$(pgrep -f "WebApi.dll" | tail -1)/environ | tr '\0' '\n' | grep -i libgidplus
# 输出:LIBGIDPLUS_FALLBACK_FONT=Noto Sans CJK SC ✅
[Unit]
Description=6.5web
After=network.target[Service]
WorkingDirectory=/var/www/6.5web
ExecStart=/bin/bash -c 'LIBGIDPLUS_FALLBACK_FONT="Noto Sans CJK SC" FONTCONFIG_PATH=/etc/fonts /usr/bin/dotnet /var/www/6.5web/WEBLAS.dll --urls=http://0.0.0.0:8001'
Restart=always
RestartSec=10
SyslogIdentifier=6.5web
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false[Install]
WantedBy=multi-user.target