一、问题描述
在使用 Matplotlib 生成 SVG 图像并插入 Word 后,导出 PDF 时出现异常现象:
-
图像显示正常 ✔
-
Word 内文本正常 ✔
-
但 PDF 中,如图2所示:
-
❌ "参考文献"等文字无法搜索
-
❌ 甚至影响后续页面文本的可检索性。从而导致毕业论文pdf版本知网查重,会把参考文献当成正文去查重,导致查重率过高。
-
📷 二、问题现象示例
图1

图2
示例说明:
- 插入 SVG 图像(图1)后,后续"参考文献"无法被 PDF 搜索,如图2所示
解决方案:
- 删除某张图后问题消失
🔍 三、排查过程(关键发现)
通过逐步排查,得到以下结论:
1️⃣ 不是字体问题
-
使用黑体(SimHei)正常
-
其他黑体文本可搜索
-
仅特定位置出问题
👉 排除:字体本身问题
2️⃣ 不是字符编码问题
验证方式:
-
复制"参考文献"到记事本 ✔ 正常
-
粘贴到新 Word ✔ 正常
-
新文档导出 PDF ✔ 可搜索
👉 排除:Unicode/编码问题
3️⃣ 定位到具体污染源
通过逐步删除内容发现:
❗ 删除第4章中的某张图 → 全文恢复正常
👉 说明:
问题源于该 SVG 图像
🧠 四、根本原因分析(核心)
🚨 本质问题
SVG 中的中文仍以
<text>形式存在,并指定了 SimHei 字体,Word 无法正确解析,导致 PDF 文本层损坏
🔬 SVG 内部结构(问题版本)
<text font-family="SimHei">参考趋势</text>
Word 处理过程
Word 会:
-
解析字体(SimHei)
-
计算字宽
-
重新排版
但 Word 对 SVG 中文支持存在缺陷:
-
字宽计算错误 ❌
-
baseline 错误 ❌
-
fallback 不稳定 ❌
💥 最终导致
SVG中文text → Word解析错误 → layout污染 → PDF文本层异常
表现为:
-
图像正常 ✔
-
PDF不可搜索 ❌
-
甚至影响后续页面 ❌
🔥 五、关键对比(为什么英文正常)
| 情况 | 结果 |
|---|---|
| SVG + 英文 | ✔ 正常 |
| SVG + 中文(text) | ❌ 异常 |
| SVG + 中文(path) | ✔ 正常 |
✅ 六、最终解决方案
🥇 方案一(推荐):将文字转为路径
在 Matplotlib 中加入:
import matplotlib as mpl
mpl.rcParams['svg.fonttype'] = 'path'
✔ 完整推荐配置
import matplotlib as mpl
mpl.rcParams.update({
'font.family': 'sans-serif',
'font.sans-serif': ['SimHei'], # 中文显示
'axes.unicode_minus': False,
'svg.fonttype': 'path', # 关键:文字转路径
})
import matplotlib.pyplot as plt
📌 原理
| 原方式 | 修改后 |
|---|---|
<text>(依赖字体) |
<path>(纯图形) |
| Word解析字体 | Word不再解析 |
| ❌ 容易出错 | ✔ 完全稳定 |
🧪 七、验证方法
生成 SVG 后:
👉 用记事本打开,搜索:
<text
判断标准
| 结果 | 说明 |
|---|---|
没有 <text> |
✔ 已修复 |
存在 <text> |
❌ 仍有风险 |
⚠️ 八、常见坑(重要)
❗ 1. rcParams 未生效
原因:
-
在
import pyplot之后设置 -
或 Notebook 未重启
❗ 2. Jupyter 未重启
👉 必须执行:
Restart Kernel
否则配置不生效
❗ 3. 使用旧 SVG 文件
👉 一定要:
-
删除旧文件
-
重新生成
❗ 4. 图像来自复制粘贴
不要:
复制 → 粘贴到Word ❌
要:
插入 → 图片 → 文件 ✔
🧰 九、备用方案
✔ 方案2:使用 PNG(最稳定)
plt.savefig("xxx.png", dpi=300)
优点:
-
Word完全兼容
-
不影响PDF
✔ 方案3:使用英文标签
👉 已验证有效,但不适合中文论文
🎯 十、最终结果
经过修复后:
-
✔ SVG 插入 Word 正常
-
✔ PDF 可搜索
-
✔ 不再影响后续页面
-
✔ 中文正常显示
-
✔ 无需更换字体

图3
🧾 十一、总结
本问题的根因不是字体或编码,而是:
Matplotlib 生成的 SVG 中中文以
<text>形式存在,Word 无法正确解析,导致 PDF 文本层损坏。解决方法是:
👉 将 SVG 中的文字转为路径(
svg.fonttype='path')
🚀 十二、经验总结(强烈建议)
以后统一规范:
| 场景 | 推荐 |
|---|---|
| Word插图 | PNG |
| 需要矢量 | SVG + path |
| 避免问题 | 不用中文text SVG |