简介:本资源是一套完整的Windows系统标准字体集合,适用于UI设计师、前端开发人员、文档排版工程师及系统运维人员,用于字体替换、界面适配、多语言显示测试或离线环境字体部署。压缩包内含160个文件,其中159个为TrueType格式(.ttf)字体文件,覆盖简体中文常用字体如宋体(simsunb.ttf)、黑体(simhei.ttf)、楷体(simkai.ttf)、仿宋(simfang.ttf)及微软现代字体(malgun.ttf、malgunbd.ttf等),另含1个XML配置文件,便于批量导入或字体元数据解析。整体包体大小为106.14MB,结构简洁,开箱即用。目前已有2604人学习下载,可直接提取使用,无需额外安装或注册,特别适合需要快速获取稳定、兼容性良好的Windows原生字体资源的开发者与设计人员。
1. Windows 字体安装:别再双击就点“安装”——90% 的人装完发现软件里根本找不到
你有没有试过从网上下了一套「超酷手写体」,双击.ttf文件,点「安装」,弹窗一闪而过,任务栏右下角还跳了个小提示说「字体已安装」?结果打开 Photoshop、Word 或 VS Code 写 CSSfont-family的时候,死活搜不到那个名字——连带整个项目 UI 预览错乱,调试半小时才发现是字体压根没进系统级注册表。这不是玄学,是 Windows 字体加载机制的「黑匣子」:它分用户级和系统级两条路径,注册表键值有缓存,字体文件名和内部 Family Name 不一致时还会静默失败。这套机制在 Win10/Win11 上差异微妙,尤其遇到.otf混.ttf、带可变轴(Variable Font)的字体、或中文名含空格/括号的包,翻车率直线上升。本文不是讲怎么下载字体,而是带你亲手把一套字体资源——无论它是单个.ttf、一个 ZIP 包、还是 GitHub 上的开源字体仓库——真正「落进系统骨髓里」:让 Word 能选、CSS 能认、PowerShell 能查、甚至重启后依然稳如磐石。适合所有需要稳定复现字体环境的场景:UI 设计师交付规范、前端开发者本地调试多字体 fallback、自动化测试截图统一渲染、或者某高校实验室跑图像生成模型时确保中文字体不崩框。
2. 准备工作:看清字体类型、确认系统位数、避开隐藏陷阱
Windows 字体支持不是「有文件就能用」,它对文件格式、签名、权限、甚至存放路径都有隐性要求。装之前必须做三件事:确认字体真实类型、核对系统架构、清理历史残留。这步省了,后面每一步都在给错误埋雷。
2.1 判定字体文件真实格式:别信后缀,要看二进制头
.ttf和.otf后缀能被任意修改,但文件开头 4 字节是铁证。用 PowerShell 一行命令即可验证:
Get-ChildItem "C:\fonts\*.ttf", "C:\fonts\*.otf" | ForEach-Object { $bytes = Get-Content $_.FullName -Encoding Byte -TotalCount 4 $header = [System.BitConverter]::ToString($bytes).Replace("-", "") $type = switch ($header) { "00010000" { "TrueType Collection (TTC)" } "4F54544F" { "OpenType (OTF, CFF-based)" } "74727565" { "TrueType (TTF, glyf-based)" } "774F4632" { "WOFF2 (Web font, not installable)" } default { "Unknown / Corrupted" } } Write-Host "$($_.Name): $type (Header: $header)" }提示:
774F4632是 WOFF2,浏览器可用但不能双击安装到 Windows 系统字体库;若看到这个,立刻停手——你需要的是.ttf或.otf源文件,不是 Web 打包版。很多 GitHub 字体仓库(如google/fonts)会同时提供ofl/(源码)和hinted/(Web 优化)目录,务必进ofl/下载。
2.2 核对系统架构与字体兼容性:32 位字体在 64 位系统上可能“隐身”
Windows 10/11 默认 64 位系统,但字体注册表路径分两套:
- 32 位应用读取:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Fonts - 64 位应用读取:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
如果误装了仅支持 32 位的旧字体(极少见),或手动改注册表时路径写错,会导致「部分软件能看到,部分看不到」。验证方法:打开注册表编辑器(regedit),导航至上述两个路径,对比Fonts键下的条目数量。正常情况下,64 位系统应优先向后者写入,且条目数 ≥ 前者。
2.3 清理历史残留:字体卸载≠文件删除,注册表项可能滞留
Windows 卸载字体时,有时只删文件,不删注册表项;有时删了注册表,但C:\Windows\Fonts目录下残留同名.ttf副本。这些残留会干扰新安装,导致「安装成功但不生效」。执行以下清理脚本(管理员权限运行):
# 1. 列出 Fonts 目录下所有字体文件(排除快捷方式和非字体) $fontFiles = Get-ChildItem "$env:windir\Fonts" -File | Where-Object { $_.Extension -in @(".ttf", ".otf", ".ttc", ".fon") -and $_.Attributes -notmatch "ReparsePoint" # 排除符号链接 } # 2. 查询注册表中已注册的字体名(Family Name,非文件名!) $regKeys = @( "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts", "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Fonts" ) $registeredNames = @() foreach ($key in $regKeys) { if (Test-Path $key) { $registeredNames += Get-ItemProperty $key | Get-Member -MemberType NoteProperty | ForEach-Object { $_.Name } } } # 3. 找出「文件存在但未注册」或「已注册但文件丢失」的异常项(输出供人工核对) Write-Host "`n=== 异常字体检查报告 ===" $fontFiles | ForEach-Object { $fileNameNoExt = $_.BaseName if ($registeredNames -notcontains $fileNameNoExt) { Write-Host "⚠️ 文件存在但未注册: $($_.Name)" } } # 注册表项未对应文件的情况需手动比对,此处略(因涉及字符串匹配Family Name,非文件名)注意:此脚本不自动删除任何内容,只输出可疑项。人工确认后,再决定是否删除
Fonts目录下孤立文件,或手动清理注册表冗余项(操作注册表前务必备份)。
3. 安装字体:三种可靠方式对比——双击安装最危险,PowerShell 最可控
Windows 提供至少五种字体安装方式,但只有三种经实战验证稳定:系统 API 调用(PowerShell)、字体文件拖入 Fonts 文件夹、以及通过控制面板「字体设置」界面导入。双击安装(即 ShellExecute)看似简单,实为最大隐患源——它绕过权限校验、不反馈注册表写入结果、且对多文件批量处理极不友好。
3.1 推荐方案:PowerShell 调用 GDI+ API(零依赖、可回滚、支持批量)
这是最接近「底层安装」的方式,直接调用 Windows GDI+ 的AddFontResource,并强制刷新字体缓存。优点:不依赖 GUI、可写入日志、失败立即报错、支持.ttf/.otf/.ttc全格式。
# 保存为 Install-Font.ps1,以管理员身份运行 param( [Parameter(Mandatory)][string[]]$FontPaths, [switch]$ForceRefresh ) Add-Type @" using System; using System.Runtime.InteropServices; public class FontInstaller { [DllImport("gdi32.dll")] public static extern int AddFontResource(string lpszFilename); [DllImport("gdi32.dll")] public static extern bool RemoveFontResource(string lpszFilename); [DllImport("user32.dll")] public static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); public const uint WM_FONTCHANGE = 0x001D; public const IntPtr HWND_BROADCAST = (IntPtr)0xffff; } "@ $installedCount = 0 foreach ($path in $FontPaths) { if (-not (Test-Path $path)) { Write-Error "文件不存在: $path" continue } $result = [FontInstaller]::AddFontResource($path) if ($result -eq 0) { Write-Warning "安装失败(GDI+ 返回0): $path — 可能是权限不足或文件损坏" continue } # 复制到 Fonts 目录(确保系统级持久化) $destPath = "$env:windir\Fonts\$((Get-Item $path).Name)" if (-not (Test-Path $destPath)) { try { Copy-Item $path $destPath -Force Write-Host "✅ 已复制到 Fonts 目录: $((Get-Item $path).Name)" } catch { Write-Warning "⚠️ 复制到 Fonts 失败,但 GDI+ 已加载: $path" } } $installedCount++ } if ($installedCount -gt 0 -or $ForceRefresh) { # 强制广播字体变更消息(关键!否则部分应用不刷新) [FontInstaller]::PostMessage([FontInstaller]::HWND_BROADCAST, [FontInstaller]::WM_FONTCHANGE, [IntPtr]::Zero, [IntPtr]::Zero) Write-Host "`n🔄 字体缓存已刷新,系统级生效。" } Write-Host "`n总计成功安装: $installedCount 个字体文件"使用示例:
# 安装单个 .\Install-Font.ps1 -FontPaths "C:\downloads\NotoSansCJKsc-Regular.ttf" # 安装整个文件夹(自动过滤字体格式) $fonts = Get-ChildItem "C:\fonts\" -Include "*.ttf","*.otf","*.ttc" .\Install-Font.ps1 -FontPaths $fonts.FullName参数说明:
-ForceRefresh强制发送WM_FONTCHANGE消息,即使没新安装也刷新;-FontPaths支持数组,天然适配批量;脚本内Copy-Item步骤确保文件物理落盘,避免仅内存加载(重启失效)。
3.2 备选方案:拖放 Fonts 文件夹(GUI 友好,但需手动刷新)
将.ttf/.otf文件直接拖入C:\Windows\Fonts文件夹,Windows 会自动调用AddFontResource并复制文件。但关键缺陷在于:它不会自动广播WM_FONTCHANGE消息。结果就是——文件在 Fonts 目录里,注册表也有条目,但 Word、Chrome 等进程仍用旧缓存,直到你手动重启它们或注销重登。
补救操作(必须做):
- 按
Win + R输入shell:fonts回车,打开 Fonts 文件夹; - 在空白处右键 → 「新建」→ 「文本文档」,命名为
refresh.txt; - 删除该文档(触发一次 Explorer 重绘);
- 最关键的一步:按
Ctrl + Shift + Esc打开任务管理器 → 找到「Windows 资源管理器」→ 右键「重新启动」。
这一连串操作本质是重启
explorer.exe,它会重新加载字体缓存并广播变更。比注销更快,且不影响当前打开的文档。
3.3 控制面板安装(最慢但最稳妥,适合单字体验证)
路径:设置 → 个性化 → 字体 → 点击「添加字体」按钮→ 选择文件。此方式由系统 Settings App 调用标准 API,会完整走注册表写入 + 缓存刷新流程,失败时给出明确错误(如“字体已存在”、“签名无效”)。缺点是每次只能选一个文件,无批量支持。建议作为最终验证手段:当你用 PowerShell 安装后,在此处搜索字体名,若出现则 100% 系统级生效。
4. 验证与排查:字体到底装没装上?三个层级的硬核检测法
装完不是终点,是验证起点。很多问题不是没装上,而是「装上了但没被正确识别」。必须分三层验证:系统级(注册表)、进程级(当前应用缓存)、渲染级(实际显示效果)。漏一层,就可能上线后才发现 PDF 导出缺字。
4.1 系统级验证:查注册表 + 查 Fonts 目录 + 查字体 Family Name
字体在系统中的唯一标识是Family Name(字体族名),不是文件名。例如NotoSansCJKsc-Regular.ttf的 Family Name 是Noto Sans CJK SC,而SimSun.ttc的 Family Name 是SimSun。注册表中存储的就是这个 Family Name。
# 1. 查注册表(64位主路径) $regPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" if (Test-Path $regPath) { Get-ItemProperty $regPath | Get-Member -MemberType NoteProperty | ForEach-Object { $name = $_.Name if ($name -match "Noto|思源|微软雅黑|PingFang") { # 按需替换关键词 Write-Host "🔍 注册表中找到: $name" } } } # 2. 查 Fonts 目录物理文件 Get-ChildItem "$env:windir\Fonts" | Where-Object { $_.Name -match "Noto|Source|MSYH" # 同样按需替换 } | ForEach-Object { Write-Host "📁 Fonts 目录存在: $($_.Name)" } # 3. 用 PowerShell 获取真实 Family Name(需 .NET 5+,Win11 自带) try { Add-Type -AssemblyName System.Drawing $font = [System.Drawing.Text.PrivateFontCollection]::new() $font.AddFontFile("C:\fonts\NotoSansCJKsc-Regular.ttf") $family = $font.Families[0].Name Write-Host "🏷️ 文件真实 Family Name: $family" } catch { Write-Warning "无法读取 Family Name(.NET 版本低或文件损坏)" }关键逻辑:Family Name 必须与你在 CSS 或 Word 中输入的名字完全一致(包括空格、大小写、中英文标点)。例如
Noto Sans CJK SC≠NotoSansCJKsc≠Noto Sans CJK SC Regular。
4.2 进程级验证:强制刷新当前应用字体缓存
即使系统级安装成功,已运行的应用(如 VS Code、Chrome、Photoshop)仍持有旧字体列表缓存。它们不会主动监听WM_FONTCHANGE,除非你手动触发。
- VS Code:
Ctrl+Shift+P→ 输入Developer: Reload Window→ 回车 - Chrome / Edge:地址栏输入
chrome://restart(Edge 为edge://restart)→ 回车,浏览器自动重启 - Word / Excel:关闭所有 Office 窗口,再重新打开(Office 不支持热重载字体)
- PowerShell / CMD:关闭当前窗口,新开一个——因为字体列表在进程启动时加载
血泪经验:某跨平台系统部署时,前端工程师在 Chrome 里看到字体正常,但 Electron 封装的桌面端却显示方块。最后发现 Electron 主进程未收到
WM_FONTCHANGE,必须在app.whenReady()后手动调用webContents.executeJavaScript('document.fonts.load("12px Noto Sans CJK SC")')强制加载。
4.3 渲染级验证:用最小 HTML + CSS 实测,绕过所有中间层
写一个极简 HTML,只引用目标字体,用@font-face显式声明,并强制font-display: swap避免 FOIT(Flash of Invisible Text)干扰判断:
<!DOCTYPE html> <html> <head> <style> @font-face { font-family: 'Noto Sans CJK SC'; src: local('Noto Sans CJK SC'), local('NotoSansCJKsc-Regular'); font-weight: 400; font-style: normal; font-display: swap; } body { font-family: 'Noto Sans CJK SC', sans-serif; font-size: 24px; } </style> </head> <body> <p>测试中文:你好,世界!</p> <p>Test English: Hello, World!</p> <p>测试数字与符号:1234567890 !@#$%^&*()</p> </body> </html>验证步骤:
- 用 Edge 或 Chrome 打开此 HTML(禁用所有插件);
- 按
F12打开 DevTools →Elements面板 → 选中<p>元素 → 右侧Computed标签页 → 找font-family属性,确认显示为'Noto Sans CJK SC'; - 切换到
Rendering标签页(需在 DevTools 设置中启用「Rendering」面板)→ 勾选「Paint flashing」→ 刷新页面,观察文字区域是否绿色闪烁(表示 GPU 渲染正常); - 截图保存,用画图工具放大 400%,检查「你好」二字边缘是否平滑(无锯齿)、字重是否均匀(无发虚)。
避坑 / 常见问题 / 排查
现象:DevTools 显示font-family是目标字体,但文字仍是默认宋体
原因:字体文件虽注册,但@font-face中src: local(...)的名称与注册表 Family Name 不一致;或字体文件本身不包含所请求的 Unicode 区块(如只含拉丁字母,无中日韩汉字)
解决:用 FontDrop 网站上传字体文件,查看其「Supported Unicode Ranges」,确认是否包含CJK Unified Ideographs;同时用上一节 PowerShell 脚本查真实 Family Name,严格按该名称写local('...')
现象:HTML 中英文正常,但中文显示方块(□□□)
原因:Windows 字体回退机制触发,因目标字体未覆盖全部中文字形,系统尝试用其他字体渲染,但那些字体未安装或被禁用
解决:在 CSS 中显式指定 fallback 链:font-family: 'Noto Sans CJK SC', 'Microsoft YaHei', 'SimSun', sans-serif;,并确保Microsoft YaHei(微软雅黑)已启用(Win10/11 默认启用)
现象:PowerShell 安装脚本返回 ✅,但Get-ChildItem "$env:windir\Fonts"找不到文件
原因:脚本中Copy-Item步骤因权限不足失败(UAC 未提升),但AddFontResource成功(内存加载)
解决:务必以「管理员身份运行 PowerShell」;或改用robocopy替代Copy-Item(自带权限提升):
robocopy "$sourceDir" "$env:windir\Fonts" "*.ttf" "*.otf" /njh /njs /nc /ns /r:0 /w:0 > $null现象:字体在 Word 中可选,但在 PowerPoint 中灰色不可用
原因:PowerPoint 使用独立字体缓存,且对可变字体(Variable Font)支持较弱;或字体文件被标记为「仅限屏幕显示」(Embedding bits = 2)
解决:用 FontForge 打开字体 →Element → Font Info → TTF Instructions→ 检查fsType字段,若为0x0002(Restricted License Embedding),需联系字体作者获取可嵌入版本;临时方案:在 PowerPoint 中插入文本框后,右键「字体」→ 手动输入 Family Name(绕过下拉列表)
现象:安装后系统变慢,鼠标移动卡顿
原因:安装了含数千字形的超大字体(如Noto CJK全集 1GB+),Windows 字体枚举耗尽 CPU
解决:卸载非必要字体;或使用fontutil工具精简字体子集(如只保留 GB2312 常用字);终极方案:改用 Web Font 方案,按需加载。
5. 高级技巧:批量管理字体、制作可分发安装包、应对 CI/CD 自动化
当字体需求从「个人备用」升级到「团队协作」或「产品交付」,手动安装就不可持续。你需要可复现、可审计、可回滚的字体工程化方案。核心思路:把字体当作「基础设施代码」来管理。
5.1 用 Chocolatey 管理字体:像装软件一样装字体(推荐给 DevOps)
Chocolatey 是 Windows 的包管理器,已收录 200+ 开源字体包(如noto-fonts-cjk、source-code-pro)。优势:版本锁定、依赖自动解析、choco install一行搞定、choco uninstall一键清理。
# 1. 安装 Chocolatey(管理员 PowerShell) Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) # 2. 安装 Noto CJK 字体(自动下载、校验、安装、刷新) choco install noto-fonts-cjk -y # 3. 查看已安装字体包 choco list --local-only | findstr "font" # 4. 卸载(彻底清理注册表+文件) choco uninstall noto-fonts-cjk -y参数说明:
-y跳过确认;noto-fonts-cjk包实际安装NotoSansCJKsc、NotoSerifCJKsc、NotoSansMonoCJKsc三个家族;Chocolatey 包内部已封装WM_FONTCHANGE广播逻辑,无需额外操作。
5.2 制作自解压字体安装包:给设计师/客户一键交付
用 7-Zip 创建自解压模块(SFX),打包字体 + 安装脚本 + 清单文件,双击即完成静默安装。比 MSI 更轻量,无权限弹窗。
制作步骤:
- 新建文件夹
font-installer,放入:- 所有
.ttf/.otf文件 install.bat(内容如下)font-list.txt(记录安装的字体名,用于卸载)
- 所有
- 用 7-Zip 选中该文件夹 → 右键「添加到压缩包」→ 格式选
7z→ 勾选「创建自解压模块」→ 「SFX 选项」→ 「解压后运行」填install.bat - 生成
fonts-installer.exe,交付给用户。
install.bat内容:
@echo off setlocal enabledelayedexpansion :: 静默复制字体到 Fonts 目录 for %%f in (*.ttf *.otf) do ( copy /y "%%f" "%windir%\Fonts\" >nul echo ✅ 已安装: %%f ) :: 刷新字体缓存(调用 PowerShell) PowerShell -Command "[System.Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null; $f=[System.Drawing.Text.PrivateFontCollection]::new(); $f.AddFontFile('%cd%\NotoSansCJKsc-Regular.ttf') | Out-Null; exit 0" >nul 2>&1 :: 发送系统广播(兼容旧版) PowerShell -Command "[System.Runtime.InteropServices.Marshal]::GetHINSTANCE((Add-Type -MemberDefinition '[DllImport(\"user32.dll\")]public static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);' -Name User32 -PassThru).GetMethod('PostMessage')).ToString() | Out-Null; [User32]::PostMessage(-1, 0x001D, 0, 0)" >nul 2>&1 echo. echo 🎉 字体安装完成!请重启正在使用的软件。 pause注意:此脚本假设字体文件在同一目录,且至少有一个
.ttf文件名为NotoSansCJKsc-Regular.ttf(用于触发 .NET 加载)。实际使用时需按需修改。
5.3 CI/CD 中自动化字体安装:GitHub Actions / Azure Pipelines 实战
在构建前端项目、生成 PDF 报告或跑 UI 自动化测试时,必须确保构建机预装指定字体。以 GitHub Actions 为例:
# .github/workflows/build.yml name: Build with Custom Fonts on: [push, pull_request] jobs: build: runs-on: windows-latest steps: - name: Checkout code uses: actions/checkout@v4 # 关键步骤:安装字体 - name: Install Noto CJK Fonts run: | # 下载字体 ZIP(从 GitHub Release 或私有 CDN) Invoke-WebRequest -Uri "https://github.com/google/fonts/releases/download/ofl-20230801/NotoSansCJKsc.zip" -OutFile "noto.zip" # 解压 Expand-Archive noto.zip -DestinationPath noto-fonts # 安装(调用我们前面写的 PowerShell 脚本) Set-Location noto-fonts/ofl/noto-sans-cjk-sc powershell -ExecutionPolicy Bypass -File "${{ github.workspace }}/scripts/Install-Font.ps1" -FontPaths "*.ttf" shell: pwsh - name: Build Frontend run: npm ci && npm run build避坑点:GitHub Actions 的
windows-latest是 Server 2022,无 GUI,故必须用 PowerShell API 安装(不能拖放);且需Set-Location切换到字体目录,因Install-Font.ps1依赖相对路径。
6. 终极验证:用 PowerShell 一行命令,查清系统里所有「真·可用」字体
装完字体,最踏实的验证不是打开 Word 看一眼,而是用系统原生命令,把所有被 Windows 认证为「可用」的字体 Family Name 全部列出来——不含缓存、不靠 GUI、不拼运气。这行命令,我从某高校实验室部署图像生成服务时开始用,至今五年没翻过车。
# 一行命令,输出所有系统级可用字体 Family Name(去重、排序、高亮常用中文字体) Add-Type -AssemblyName System.Drawing $fonts = [System.Drawing.Text.InstalledFontCollection]::new() $names = @() foreach ($family in $fonts.Families) { $names += $family.Name } $names | Sort-Object -Unique | ForEach-Object { if ($_ -match "Noto|Source|Microsoft|Sim|Kai|Fang|Ping") { Write-Host "🇨🇳 $($_)" -ForegroundColor Green } else { Write-Host $_ } }为什么这比「看 Fonts 文件夹」更准?
InstalledFontCollection是 .NET 封装的 GDI+ 枚举接口,它只返回AddFontResource成功且通过字体验证(checksum、table integrity)的字体;Fonts文件夹里可能有损坏文件、未注册的副本、或被禁用的字体(右键属性勾选了「隐藏」);- 此命令结果与 Word/PowerPoint 下拉菜单完全一致,因为 Office 底层也调用同一 GDI+ API。
执行后你会看到什么?
- 绿色高亮的
🇨🇳 Noto Sans CJK SC、🇨🇳 Microsoft YaHei、🇨🇳 SimSun—— 这些是你能放心写进 CSSfont-family的名字; - 如果
Noto Sans CJK SC没出现,说明安装失败,立刻回溯 PowerShell 安装脚本的输出日志; - 如果出现
NotoSansCJKsc-Regular(带连字符)而非Noto Sans CJK SC(带空格),说明字体文件内部 Family Name 写错了,需用 FontForge 修正。
从那以后我每次给某跨平台系统部署字体,都强制走一遍这个命令,再截个图发给前端同学——不是为了炫技,是让所有人对「字体到底在不在」这件事,达成零歧义共识。
希望帮到你。
本文还有配套的精品资源,点击获取