R 导出 PDF 时中文不显示 不依赖 showtext** 的最简方案(用 extrafont 把系统 TTF 真正灌进 PDF 内核)

R 导出 PDF 时中文不显示,99% 是因为:

  1. PDF 设备默认用 Helvetica 等西文字体
  2. 这些字体没有中文字形,于是变成空白或方框;
  3. 你虽然指定了"宋体/微软雅黑",但 R 找不到对应字体文件,或者名字写错。

下面给出Windows 7/10 通用不依赖 showtext 的最简方案(用 extrafont 把系统 TTF 真正灌进 PDF 内核)。


1. 一次性准备字体(仅需第一次)

r 复制代码
install.packages("extrafont")   # 如已装可跳过
library(extrafont)
font_import()                   # 把系统所有 TTF 注册到 R
loadfonts(device = "pdf")       # 生成字体映射表

这一步会拷几百 MB,耗时 2-3 分钟,以后永远不用再跑


2. 查看可用中文名

r 复制代码
fonts()                         # 列出已注册字体
## 找到 "SimSun", "MicrosoftYaHei", "STKaiti" 等

3. 画图时显式指定字体

r 复制代码
library(ggplot2)
library(extrafont)

p <- ggplot(mtcars, aes(wt, mpg)) +
  geom_point() +
  labs(title = "汽车重量与油耗关系",
       x = "重量(千磅)", y = "每加仑英里数") +
  theme(text = element_text(family = "SimSun"))   # 关键行

ggsave("my_plot.pdf", p, width = 6, height = 4, device = cairo_pdf)
  • family = "SimSun" 必须和 fonts()完全一致(大小写敏感)。
  • cairo_pdf 比默认 pdf() 对 TTF 更宽容;Win7 需保证 R ≥ 4.0 且已装 Rtools

4. 检查 PDF

用 Adobe Reader / SumatraPDF 打开,中文应正常显示;

若仍方框,99% 是字体名写错或注册表没刷新,重启 R 再跑 loadfonts() 即可。


一句话

PDF 不显示中文 = 字体没灌进去

一次 extrafont::font_import() + 画图 family = "SimSun" + cairo_pdf 即可永绝后患。

相关推荐
鹿鸣天涯28 分钟前
网络安全等级保护测评高风险判定实施指引(试行)--2020与2025版对比
开发语言·php
好好学习啊天天向上29 分钟前
多维c++ vector, vector<pair<int,int>>, vector<vector<pair<int,int>>>示例
开发语言·c++·算法
星河队长31 分钟前
C#实现智能提示输入,并增色显示
开发语言·c#
song85460113441 分钟前
uniapp如何集成第三方库
开发语言·uni-app
weixin_贾1 小时前
水文气象领域的时间序列分析:从Pytorch/R入门到Transformer/Mamba精通
pytorch·r语言·transformer·水文气象·时间序列
梵得儿SHI1 小时前
Java IO 流深度解析:对象流与序列化机制(ObjectInputStream/ObjectOutputStream)
java·开发语言·rpc·序列化·对象流·对象与字节流的转换·java对象流
想不明白的过度思考者1 小时前
Rust——Tokio的多线程调度器架构:深入异步运行时的核心机制
开发语言·架构·rust·多线程
百炼成神 LV@菜哥1 小时前
记类成员变量 vs 方法中的变量
java·开发语言
贝西奇谈1 小时前
JavaScript DOM节点操作详解
开发语言·javascript·php
学习编程的Kitty1 小时前
JavaEE初阶——多线程(4)线程安全
java·开发语言·jvm