← 返回博客列表
问题排查阅读约 4 分钟

SVG转PDF字体变了、缺字或变成图片,原因是什么?

针对中文和品牌字体,说明为什么浏览器预览正常而PDF变样,以及转曲、图片PDF和字体检查各适合什么场景。

本文目录

Advertisement

SVG 转 PDF 后字体变了,通常不是“转换分辨率不够”,而是字体资源没有跟着 SVG 一起进入输出流程。SVG 中的 font-family 往往只记录字体名称,真正的字体文件仍在电脑、网站 CDN 或设计工具里。浏览器能找到字体时预览正常,换一台设备或进入 PDF 生成器后就可能被替换。

中文、日文和品牌字体更容易暴露这个问题,因为基础 PDF 字体覆盖范围有限,直接写入可能缺字。

先分清四种现象

现象常见原因
字体样式变了指定字体不可用,回退到系统字体
文字位置错了替代字体字宽不同,换行和基线随之变化
出现方框或空白PDF 字体不包含对应字符
文字看起来正常但不能选中页面已按图片方式写入 PDF

最后一种不一定是错误。为了避免中文乱码,转换器可能主动选择图片 PDF,用浏览器已经渲染好的画面换取显示稳定。

为什么同一份SVG在自己电脑上正常

下面这段代码并没有携带字体:

xml
<text font-family="My Brand Sans" font-size="28">新品发布</text>

如果你的电脑安装了 My Brand Sans,浏览器会直接调用;别人没有安装时,只能使用后备字体。即使 SVG 写了 @font-face,远程字体仍可能因为跨域、权限、链接失效或网络环境加载失败。

排查时可以打开浏览器开发者工具:

  1. 在 Network 中筛选 Font,查看是否有 404、403 或 CORS 错误。
  2. 在元素样式中确认最终实际使用的是哪一种字体。
  3. 用无痕窗口或另一台没有安装设计字体的设备重新打开。
  4. 对比文字宽度、换行、基线和字重。

如果 SVG 预览阶段已经替换字体,后面的 PDF 设置无法把原字体“找回来”。

中文内容为什么经常输出为图片PDF

将中文作为真正的 PDF 文本写入,需要字体文件、字符映射和嵌入支持,还要满足字体授权。只使用 Helvetica、Times 等基础字体无法覆盖中文字符。

SVG2IMG 检测到非 ASCII 文字或自定义字体后,会让浏览器完成排版,再把结果以图片写入 PDF。目标分辨率为 300 DPI;页面很大时,为控制浏览器内存,最长边受 4096 像素限制,有效 DPI 会相应下降。

图片 PDF 的特点:

  • 能保留浏览器实际显示的中文和日文
  • 文字不能搜索、复制或逐字选择
  • 阅读器无法把文字当作正常文本提供无障碍访问
  • 放大后的精细度取决于像素数量

三种处理方法怎么选

方法一:关键文字转曲

适合 Logo、包装标题、海报主标题、短标签。转曲后每个字变成路径,不再依赖字体,且可以保留矢量边缘。

不适合长正文,因为路径数量会迅速增加,也失去文本编辑能力。建议保留一份未转曲的设计源文件。

方法二:使用标准字体

英文技术图、流程图、简单标注可以选常见的 Helvetica、Arial、Times、Courier 或通用 sans-serif。这能降低替换风险,但仍要实际检查输出,字体名称本身不等于已经嵌入。

方法三:接受图片PDF

如果任务是“让客户看到和预览一致的版面”,图片 PDF 往往最稳妥,特别适合中文图表、单页说明、审批稿和带滤镜的视觉设计。

如果任务要求复制文字、全文搜索、屏幕阅读器或长期文档归档,就不应把整页正文做成图片。此时应在专业排版软件中正确嵌入字体并生成 PDF。

不要用错误方法补救

把页面尺寸放大不会解决缺字。提高像素数只能让已经成功渲染的文字更清楚,无法加载的字体仍然不存在。

直接把文件名从 .svg 改成 .pdf 也没有意义。字体嵌入需要真实字体文件、许可和 PDF 库支持,不是改扩展名可以完成的。

在线下载一个同名字体也存在风险:可能版本不同、字重不全,甚至没有文档嵌入许可。品牌项目应从设计规范或正版字体包确认来源。

下载前检查清单

  • 预览中的字体、字重和换行是否与设计稿一致
  • 短小关键文字是否已经转曲
  • 中文正文是否允许变成不可搜索的图片
  • 小字号在 100% 显示时是否清楚
  • 在另一台设备上打开 PDF 是否一致
  • 字体许可是否允许交付、嵌入或转曲
  • 是否保留了可编辑的 SVG 和原始字体资料

可以在 SVG转PDF工具 中分别比较自动模式和“保持外观”模式。若最终只是网页插图或 PPT 图片,使用 SVG转PNG工具 会让文件用途更明确。

将文章中的方法用于实际文件

使用本地浏览器工具转换 SVG,无需上传文件。

打开转换器