QuestPDF在64位Amazon Linux的.NET Core环境中文本不显示问题求助
解决QuestPDF在Amazon Linux环境下文本不显示的问题
你遇到的问题大概率是Linux服务器缺少默认字体导致的——Windows系统默认预装了大量常用字体,但无GUI的Amazon Linux服务器通常不会自带这些字体,而QuestPDF依赖SkiaSharp渲染文本,SkiaSharp需要系统有可用字体才能正常输出文本内容(图片渲染不依赖字体,所以能正常显示)。以下是几种可行的解决方法:
方法1:安装系统字体包
Amazon Linux属于RHEL兼容发行版,你可以通过包管理器安装常用字体包:
- 对于Amazon Linux 2,执行:
sudo yum install fontconfig liberation-fonts - 对于Amazon Linux 2023,执行:
sudo dnf install fontconfig liberation-fonts
fontconfig是SkiaSharp依赖的字体配置工具,liberation-fonts是一套开源的通用字体,能覆盖大部分文本渲染需求。安装完成后重启你的.NET应用,应该就能正常显示文本了。
方法2:嵌入自定义字体到应用
如果不想依赖系统字体(比如服务器权限受限,或者需要特定字体样式),可以将字体文件嵌入到你的项目中,让QuestPDF直接使用内嵌字体:
- 下载你需要的字体文件(比如Roboto、Arial等,确保字体文件格式为TTF或OTF)。
- 将字体文件添加到你的.NET项目中,右键文件→属性,设置复制到输出目录为「始终复制」或「如果较新则复制」。
- 在应用启动时注册字体:
// 假设字体文件放在项目根目录,输出后路径为当前目录下的字体文件 QuestPDF.Drawing.FontManager.RegisterFontFromFile("Roboto-Regular.ttf"); QuestPDF.Drawing.FontManager.RegisterFontFromFile("Roboto-Bold.ttf"); // 如果需要粗体样式 - 在TextStyle中指定使用该字体:
column.Item().Text("SKIN SCAN RESULTS", TextStyle.Default.Size(20).SemiBold().Color("#0DD0D9").FontFamily("Roboto"));
这样无论服务器环境有没有预装字体,QuestPDF都能使用你内嵌的字体渲染文本。
方法3:检查SkiaSharp版本兼容性
确认你安装的SkiaSharp.NativeAssets.Linux.NoDependencies版本与QuestPDF 2022.2.6依赖的SkiaSharp主包版本一致。QuestPDF 2022.2.6通常依赖SkiaSharp 2.88.x系列,如果你安装的NativeAssets版本不匹配,可能会导致渲染异常。可以在NuGet包管理器中查看并调整版本,保持两者版本统一。
内容的提问来源于stack exchange,提问作者Muhammad Azim
相关产品推荐
相关产品推荐

