为有中文需求的客户提供多渠道中文技术支持.

Thu Sep 11, 2025 8:18 am

您好,

关于您此前反馈的“Microsoft YaHei Mono”和“Aa白桃糖果奶酪体”字体未能被正确使用的问题,我们的开发团队已完成了原因定位,并对产品内部相关代码进行了修正。目前,该修复版本已进入测试阶段。待测试验证通过后,我们将第一时间通知您。
Sincerely,
Talia
E-iceblue support team
User avatar

talia.liu
 
Posts: 331
Joined: Mon Apr 14, 2025 3:33 am

Mon Sep 15, 2025 3:44 am

请问这些不能识别的字体有什么共性吗? 更多的其它字体有测试吗?

xyzxyzxyz
 
Posts: 64
Joined: Fri Dec 27, 2024 1:10 pm

Mon Sep 15, 2025 8:38 am

您好,

字体文件中包含多种类型的内部数据表,这些表共同决定了字体的显示效果及功能特性。在先前出现问题的字体中,都存在一类特殊的表未被支持。在本次修复中,我们已针对该类型字体表新增了兼容性支持。例如windows 字体库的常用字体我们都是兼容的,但由于字体类型及内部结构极其多样,如果你们在使用中有其它特殊字体存在问题,你可以提供下字体,我们进一步确认。
Sincerely,
Talia
E-iceblue support team
User avatar

talia.liu
 
Posts: 331
Joined: Mon Apr 14, 2025 3:33 am

Tue Sep 16, 2025 5:34 am

talia.liu wrote:您好,

字体文件中包含多种类型的内部数据表,这些表共同决定了字体的显示效果及功能特性。在先前出现问题的字体中,都存在一类特殊的表未被支持。在本次修复中,我们已针对该类型字体表新增了兼容性支持。例如windows 字体库的常用字体我们都是兼容的,但由于字体类型及内部结构极其多样,如果你们在使用中有其它特殊字体存在问题,你可以提供下字体,我们进一步确认。


届时,能否提供一个简短的代码片段用来测试系统+自定义字体文件夹内的所有字体是否能正常加载并显示?

xyzxyzxyz
 
Posts: 64
Joined: Fri Dec 27, 2024 1:10 pm

Tue Sep 16, 2025 10:09 am

您好,

待包含相关修复的新版本发布后,我们将为您提供简单的测试代码及配套测试文件,供您参考验证使用。
Sincerely,
Talia
E-iceblue support team
User avatar

talia.liu
 
Posts: 331
Joined: Mon Apr 14, 2025 3:33 am

Thu Sep 18, 2025 9:35 am

您好,

感谢您的耐心等待。
很高兴通知您我们最新发布的Spire.Pdf.11.9.8 已经修复了问题SPIREPDF-7706,现在在windows和docker 等环境下可以正确调用“Microsoft YaHei Mono”和“Aa白桃糖果奶酪体”等字体。
Spire.Pdf.11.9.8 下载:https://www.e-iceblue.cn/Downloads/Spire-PDF-NET.html
NuGet:
https://www.nuget.org/packages/Spire.PDF/11.9.8
https://www.nuget.org/packages/Spire.PDFfor.NETStandard/11.9.8
附上我的测试项目供您测试参考:https://www.e-iceblue.com/downloads/demo/PDF7706Demo.zip
期待您的测试反馈。
Sincerely,
Talia
E-iceblue support team
User avatar

talia.liu
 
Posts: 331
Joined: Mon Apr 14, 2025 3:33 am

Thu Sep 18, 2025 11:29 am

测试了一下,在win10下使用 ver11.9.8 版本,用下面的代码,Microsoft YaHei Mono字体仍然使用的错误的字体名:微软雅黑
但是如果使用自定义字体文件夹函数加载字体生成的文件中字体名是正确的, 在最新版的spire.doc组件下另存Pdf也有相同的问题,使用自定义文件夹也不行!
但问题是 Microsoft YaHei Mono字体是windows10及以上系统内置的字体,不需要安装,本应该直接就生效,貌似好多系统内置的一些字体无法加载,这本身并不需要权限
建议能提供一个将(所有系统内置字体+所有自定义文件夹内字体)遍历打印并输出的代码来方便测试(不能加载的字体回显异常信息)!

Code: Select all
using System;
using System.IO;
using System.Drawing;
using Spire.Pdf;
using Spire.Pdf.Graphics;

Environment.CurrentDirectory = @"C:\Users\Administrator\Desktop";
// Spire.Pdf
var pdf = new PdfDocument();
var page = pdf.Pages.Add();
var trueTypeFont = new PdfTrueTypeFont("甜蜜早安吻", 12f, PdfFontStyle.Regular, true);
page.Canvas.DrawString("Hello China, 你好 中国!", trueTypeFont, PdfBrushes.Black, new PointF(10, 30));
var trueTypeFont2 = new PdfTrueTypeFont("Microsoft YaHei Mono", 12f, PdfFontStyle.Regular, true);
page.Canvas.DrawString("Hello China, 你好 中國!", trueTypeFont2, PdfBrushes.Black, new PointF(10, 50));

pdf.SaveToFile("Spire.Pdf.pdf", Spire.Pdf.FileFormat.PDF);
Console.WriteLine("Spire.Pdf create!");


xyzxyzxyz
 
Posts: 64
Joined: Fri Dec 27, 2024 1:10 pm

Fri Sep 19, 2025 4:28 am

您好,

感谢您的反馈。
需要说明的是,Microsoft YaHei Mono 并非 Windows 系统的内置字体。您可以参考微软官方文档:
https://learn.microsoft.com/en-us/typography/font-list/microsoft-yahei
若要在 Spire 组件中调用该字体,请确保其已"为所有用户安装"。
扫描 Windows 内置字体目录和自定义字体文件夹判断字体是否可用,请参考以下代码:
Code: Select all
 static void all_fonts()
{
    // 1. 要扫描的目录
    string[] systemFontDirs = { @"C:\Windows\Fonts" };
    string[] customFontDirs = { @"FONT" };          //自定义字体文件夹,例如 @"D:\myFonts"

    const string reportFile = "font_report_spire.txt";
    string[] ext = { ".ttf", ".ttc", ".otf", ".otc" };

    var allDirs = systemFontDirs.Concat(customFontDirs).Where(Directory.Exists).ToArray();
    var sb = new StringBuilder();
    int total = 0, ok = 0, err = 0;

    foreach (var file in allDirs.SelectMany(d =>
                 ext.SelectMany(e =>
                     Directory.EnumerateFiles(d, $"*{e}", SearchOption.AllDirectories))))
    {
        total++;
        try
        {
            PdfTrueTypeFont tf = PdfTrueTypeFont.FromFontFile(file, 20f);
            bool isInstalledForAllUsers = file.StartsWith(@"C:\Windows\Fonts\", StringComparison.OrdinalIgnoreCase);

            var flag = isInstalledForAllUsers ? "[全局]" : "[当前用户]";
            var line = $"[OK ]  {tf.Name}  ←  {file}";
            Console.WriteLine(line);
            sb.AppendLine(line);
            ok++;
        }
        catch (Exception ex)
        {
            var line = $"[ERR]  {ex.Message}  ←  {file}";
            Console.WriteLine(line);
            sb.AppendLine(line);
            err++;
        }
    }

    var summary = $"\n========== 统计 ==========\n总计:{total}  成功:{ok}  失败:{err}";
    Console.Write(summary);
    sb.Append(summary);
    File.WriteAllText(reportFile, sb.ToString(), Encoding.UTF8);
    Console.WriteLine($"\n报告已写入 {Path.GetFullPath(reportFile)}");
}
Sincerely,
Talia
E-iceblue support team
User avatar

talia.liu
 
Posts: 331
Joined: Mon Apr 14, 2025 3:33 am

Fri Sep 19, 2025 7:50 am

运行上面的代码, 有两个问题:
1. Microsoft YaHei Mono我的几台电脑上都是默认存在的,并没有安装过, 另外执行代码后的列表里,从系统字体文件夹中没有发现这个字体, 但该字体确实是存在的,我已经打开windows下的Fonts文件夹看过了
2. 输出日志列表中有下面的字体出错
[ERR] The TTC font is invalid. ← C:\Windows\Fonts\cambria.ttc
[ERR] The TTC font is invalid. ← C:\Windows\Fonts\mingliub.ttc
[ERR] The TTC font is invalid. ← C:\Windows\Fonts\msgothic.ttc
[ERR] The TTC font is invalid. ← C:\Windows\Fonts\msjh.ttc
[ERR] The TTC font is invalid. ← C:\Windows\Fonts\msyh.ttc
[ERR] The TTC font is invalid. ← C:\Windows\Fonts\msyhbd.ttc
[ERR] The TTC font is invalid. ← C:\Windows\Fonts\msyhl.ttc
[ERR] The TTC font is invalid. ← C:\Windows\Fonts\simsun.ttc
[ERR] The TTC font is invalid. ← C:\Windows\Fonts\Sitka.ttc
[ERR] The TTC font is invalid. ← C:\Windows\Fonts\SitkaB.ttc
[ERR] The TTC font is invalid. ← C:\Windows\Fonts\SitkaI.ttc
[ERR] The TTC font is invalid. ← C:\Windows\Fonts\SitkaZ.ttc

关于msyh mono字体是否是系统内置: 下面是gpt的回答:
https://chatgpt.com/s/t_68cd0c168acc819 ... 29662ee89e

另外, 在最新版的spire.doc组件下另存Pdf也有相同的问题,使用自定义文件夹也不行!

xyzxyzxyz
 
Posts: 64
Joined: Fri Dec 27, 2024 1:10 pm

Fri Sep 19, 2025 10:41 am

您好,

感谢您的耐心反馈。
Doc字体错误记录在问题SPIREDOC-11527 中,我们的开发人员已经完成了调查,正在调整内部代码。本次修复包含的仅是Spire.PDF中的问题。
关于 Microsoft YaHei Mono 字体在系统字体文件夹下的使用问题,根据我本地在 Windows 11 环境下的测试(如图所示),需要单独为所有用户安装 Microsoft YaHei Mono 字体后,才能正常使用。昨天提供给您的链接中,目录 PDF7706\windows_test\bin\Debug\net8.0\ 下包含我在 Windows 系统下测试生成的 PDF 文件结果,其中 Microsoft YaHei Mono 字体已得到正常应用。我们怀疑该问题可能与系统的环境有较大关系,您可以将详细的系统版本信息通过截图发给我们吗?如果方便的话,你可以添加我们的QQ:2181348176 或微信:19382257383,我们可以远程在下你的环境。
本地环境.png
Sincerely,
Talia
E-iceblue support team
User avatar

talia.liu
 
Posts: 331
Joined: Mon Apr 14, 2025 3:33 am

Mon Sep 22, 2025 12:53 am

系统版本如下图, 用你的测试文件夹中的msyh mono字体, 结合自定义文件夹函数是可以成功的, 但问题是系统Fonts目录中已经有该字体了
w.png

xyzxyzxyz
 
Posts: 64
Joined: Fri Dec 27, 2024 1:10 pm

Mon Sep 22, 2025 3:00 am

您好,

感谢您的反馈。
根据我们的进一步调查,Microsoft YaHei Mono 虽然是微软官方字体,但并未包含在 Windows 的默认安装包中,而是作为可选功能或通过其他微软产品更新(如 Office、Visual Studio 等)提供。这可能是造成不同系统中该字体安装状态存在差异的原因。
同时我们还发现:C:\Windows\Fonts 虽然是系统的全局字体仓库,但该目录下的字体并非都是为"所有用户"安装的。这个目录实际上是一个集中管理的字体视图,而并非单纯的物理存储位置。
我们在测试环境中进行了验证:当选择”安装“Microsoft YaHei Mono 字体时,虽然该字体会显示在 C:\Windows\Fonts 目录中,但通过查看其属性可以发现,实际文件存储在用户目录下(如 C:\Users[用户名]\AppData\Local\Microsoft\Windows\Fonts)。这也解释了为何通过代码扫描 C:\Windows\Fonts 目录可能无法准确检测到该字体。
请问您能否在您的环境中通过查看字体属性,确认该字体的实际安装路径呢?如果并非在C:\Windows\Fonts 下,你可以重新为所有用户安装再此确保字体安装在C:\Windows\Fonts 下。
font存储位置.png
Sincerely,
Talia
E-iceblue support team
User avatar

talia.liu
 
Posts: 331
Joined: Mon Apr 14, 2025 3:33 am

Mon Sep 22, 2025 7:13 am

感谢您的解释, 确实如此那个, msyh mono字体所在的位置如下, 看来要把用户字体目录手动添加进去了
C:\Users\XXX\AppData\Local\Microsoft\Windows\Fonts

xyzxyzxyz
 
Posts: 64
Joined: Fri Dec 27, 2024 1:10 pm

Mon Sep 22, 2025 10:06 am

您好,

感谢您的反馈。
此外,很高兴通知您,我们最新发布的Spire.Barcode 7.4.1版本已修复了"Microsoft YaHei Mono"和"Aa白桃糖果奶酪体"字体无法正常调用的问题。欢迎下载更新并进行测试。
网站下载:https://www.e-iceblue.cn/Downloads/Spire-Barcode-NET.html
Sincerely,
Talia
E-iceblue support team
User avatar

talia.liu
 
Posts: 331
Joined: Mon Apr 14, 2025 3:33 am

Tue Sep 23, 2025 12:26 am

请问Spire.Barcode有设置自定义字体文件夹的函数了吗?这个功能在docker上很有必要,因为如果不添加该功能,就要把字体打包进镜像,不方便

xyzxyzxyz
 
Posts: 64
Joined: Fri Dec 27, 2024 1:10 pm

Return to 中文技术支持