惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Exploit Database - CXSecurity.com
F
Fortinet All Blogs
U
Unit 42
F
Full Disclosure
雷峰网
雷峰网
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
罗磊的独立博客
D
DataBreaches.Net
C
Check Point Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
O
OpenAI News
C
CXSECURITY Database RSS Feed - CXSecurity.com
aimingoo的专栏
aimingoo的专栏
S
Security @ Cisco Blogs
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
SegmentFault 最新的问题
NISL@THU
NISL@THU
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Hacker News
The Hacker News
Webroot Blog
Webroot Blog
Security Latest
Security Latest
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Google DeepMind News
Google DeepMind News
酷 壳 – CoolShell
酷 壳 – CoolShell
N
News | PayPal Newsroom
P
Proofpoint News Feed
B
Blog RSS Feed
MongoDB | Blog
MongoDB | Blog
C
Cybersecurity and Infrastructure Security Agency CISA
N
News and Events Feed by Topic
Google Online Security Blog
Google Online Security Blog
H
Help Net Security
Spread Privacy
Spread Privacy
T
Threat Research - Cisco Blogs
GbyAI
GbyAI
I
Intezer
Application and Cybersecurity Blog
Application and Cybersecurity Blog
M
MIT News - Artificial intelligence
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
IT之家
IT之家
MyScale Blog
MyScale Blog
腾讯CDC

博客园 - Charltsing

C# 预处理器指令语言 - 完整语法速查 LoggerMessage:编写高性能的 .NET 日志 PDFImageViewer v2.1 PDF查看图像和无损导出工具,一键转换单图PDF为JBig2黑白PDF。兼谈PDF内嵌图像。 PDF的色彩空间 25 个使用.NET 10 的性能技巧 为什么 PDF 编辑这么难? Unicode、UTF-8、UTF-16 如何直接编辑Github的Readme.md文件 自动导入工程项目属性,Directory.Build.props 和 Directory.Build.targets 新版 C# 高效率编程指南 C# 内联数组(Inline Array):高性能数组的新选择 如何在 .NET 中使用 SIMD .NET异步编程进阶:从语法糖到高性能架构的核心突破 C# 中的安全零拷贝 使用UnsafeAccessor 访问私有字段 C# 12与.NET 8实战指南:20个提升代码质量的最佳实践 C# Net9的模块初始化器(Module Initializer) ECMA-335 CLI 规范附录 C#中避免GC压力和提高性能的8种技术 函数内联 硬件内在函数 官方:oPDF v2.1免费版,专业的PDF水印分析处理工具,无损去除水印,通杀八类PDF水印。它是PDFCommander 万能PDF水印删除工具的升级版。 C#自动引用Debug | Release版本的dll
PDFontFixer v1.5 免费版,解决PDF文档复制粘贴乱码的问题,修复PDF文档字体的Unicode映射。
Charltsing · 2026-03-18 · via 博客园 - Charltsing

一直以来,经常会有人问我为什么PDF文档中的内容能看到,也能复制,但是粘贴就会乱码。

例如,一个红楼梦的样本文件,如果我打开文档之后,复制文本,粘贴到记事本,就会发现乱码

1

那么,是什么原因造成的乱码呢?我用AI分析这个文档,看一下字符是如何被渲染到页面上面的。

首先,我们用oPDF,看一下文档的内容流,你会看到类似的操作符

image

 这段指令的意思是,使用C0_0字体,渲染0003字符到指定位置。AI分析结果如下:

<C0003> Tj
    │
    ▼
/C0_0 (10 0 R) ──Type0字体──┐
    │                          │
    ├─ /Encoding /Identity-H  → CID = 0x0003 = 3
    │
    └─ /DescendantFonts → (31 0 R) (字体类型:CIDFontType0)
                            │
                            ├─ /CIDSystemInfo → Identity
                            │
                            └─ /FontDescriptor → (32 0 R)
                                                    │
                                                    └─ /FontFile3 → (20 0 R)
                                                                        │
                                                                        ▼
                                                                ┌───────────────┐
                                                                │ CFF数据流      │
                                                                │               │
                                                                │ CharStrings   │
                                                                │   [0] .notdef │
                                                                │   [1] CID 1   │
                                                                │   [2] CID 2   │
                                                                │   [3] CID 3 ★ │ ← 字形轮廓数据在这里!
                                                                │   ...         │
                                                                └───────────────┘

通过分析,我们知道了0003字符是从字体文件 /FontFile3 中读取字形,并渲染的。所以我们可以正确的看到这个字。

那么,为什么复制粘贴就乱码了呢?这就要提到一个字体中的概念----Unicode映射。字体文件的本质就是矢量绘图,而复制粘贴需要知道文字的Unicode码,把这个码放到剪贴板里面,其它的软件才会知道是什么字。正规的字体文件,都会带一个Unicode映射表,这个表会告诉软件字体中的第几个字对应的是Unicode中的哪一个字的编码。然后我们才能正确地复制粘贴。

所以,PDF文档为什么复制粘贴之后就会乱码的原因,想必你也清楚了。正是由于某些PDF文档在制作的时候,有意将Unicode映射表删掉了,造成我们无法得知复制的字对应的是Unicode的哪一个字,所以无法复制粘贴文档中的文本。这是一个很简单,也很有效的文档反拷贝手段。

为了解决这个问题,我写了一个软件PDFontFixer,采用OCR识别PDF文档中的字体里面的每一个字形,得到对应的Unicode编码,再将这些编码做成ToUnicode映射表,保存到PDF文档的字体里。这样,我们就可以正常复制粘贴文本了。

修复PDF字体缺映射

 2

1

相关的软件和测试文档在蓝奏云下载,密码:73t8 。 2026.5.15更新到 v1.5版。修改快捷键,可以输入空格。

有问题可以与作者联系 QQ:564955427,Email:liucq@163.com