ChatGPT 读 PDF 的真实流程是:上传 → 在服务端跑一个 PDF parser 抽取文本层 → 把抽到的文本拼到 prompt 里发给模型。模型本身不会看像素、不会跑 OCR、不会读元数据。所以”读不出内容”几乎总是发生在抽取那一步——文件没有文本层、太大被截断、被加密阻止访问。
按命中率,下面 5 个原因覆盖了 95% 以上情形。
常见原因
按命中率从高到低:
1. PDF 是扫描件(纯图片,无文本层)
扫描的合同、拍照的发票、把图片塞进 PDF 的电子书——这些 PDF 打开能看到字,但里面没有可抽取的文本流,parser 抽出来是空字符串。模型只能干瞪眼。
如何判断:用 Preview / Acrobat 打开 PDF,按 Cmd+A 选中所有内容再 Cmd+C 复制,粘贴到记事本。
- 能粘出文字 → 有文本层,问题在别处
- 粘出来全是空白或乱码 → 是扫描件,必须先 OCR
2. 文件太大被截断 / 触发上传上限
ChatGPT 单文件官方上限是 ~512 MB(Plus),但实际抽取容量受单对话总 token 上限约束。粗略估算:超过 50 页的 PDF 容易在中段被截断;100+ 页的几乎必然只读到前 30–40%。
模型读了前面没看到你问的内容时,会回答”文件里没有这部分”——其实是没读到。
如何判断:问”请列出文件的目录 / 标题层级”。如果只列了前几节,就是被截断。
3. PDF 有密码 / DRM / 复制限制
带密码的 PDF 可以上传,但 parser 不会去解密,直接返回”无法读取”。某些出版社 DRM 保护的电子书也类似。
如何判断:本地打开看是否弹密码框,或菜单 → 文件属性 → 安全性 → 看是否有”密码保护”或”禁止复制”标记。
4. 文本编码异常 / 含大量公式 / 老 PDF
某些老软件生成的 PDF 把字体嵌入但没保留编码映射,抽出来是乱码 ASCII 串。数学论文里大量 LaTeX 公式 → 抽出来全是 \frac{}{}。表格大量合并单元格 → 顺序错乱。
如何判断:让模型”复述文件第 1 页第一段”。复述出乱码 / 缺字 = 编码问题。
5. 单对话已经塞太多文件
ChatGPT 单次对话能挂的文件总量有限(约 10 个),且 token 总和受模型上下文约束。第 6 个 PDF 上传后,前几个的内容可能被挤出 context。
如何判断:开新对话只上传这一个 PDF 试。能读 = 是堆积问题。
最短修复路径
按耗时从短到长:
Step 1:30 秒确认是不是扫描件
用 Preview 打开 PDF → Cmd+A → Cmd+C → 粘到记事本。
- 全空白 → 扫描件,跳 Step 2 OCR
- 有文本 → 跳 Step 3 看大小
Step 2:先 OCR 再上传
免费 / 简单方案:
- macOS:把 PDF 拖进 Preview → 工具栏 → “Export As” → 选 “PDF” → 勾”Apply OCR”(macOS 14+)
- 在线:ilovepdf.com/ocr_pdf / Adobe Acrobat web
- 专业:ABBYY FineReader(贵但精度最高,适合中英混排)
- 本地命令行:
ocrmypdf input.pdf output.pdf -l chi_sim+eng(开源,准确率不错)
OCR 完拿处理后的 PDF 重新上传。注意:OCR 不是完美的,长公式 / 手写 / 模糊扫描可能识别不准,导出 .txt 再人工校对一遍最稳。
Step 3:拆 / 压
如果 PDF 大于 50 页:
# macOS:用 pdftk 拆
brew install pdftk-java
pdftk input.pdf cat 1-30 output part1.pdf
pdftk input.pdf cat 31-60 output part2.pdf
或直接在 Preview 里:选中页面缩略图 → 右键”Export selected pages”。
把每一段单独传,让模型分段总结,最后让它把所有总结再合并成一份全文摘要。
Step 4:去密码再上传
- macOS Preview:打开 PDF(输入密码)→ File → Export as PDF → 不勾”Encrypt”
- 在线:smallpdf.com/unlock-pdf(注意隐私,机密文件别用)
- 命令行:
qpdf --decrypt --password=YOUR input.pdf out.pdf
Step 5:编码 / 复杂排版问题——转纯文本贴
如果 PDF 抽不出干净文本,最后手段:
- Preview 选中文本复制到 .txt
- 用 Pandoc /
pdftotext转 Markdown - 直接把内容粘到对话框(小于 4000 字符的直接粘,长的拆几次粘)
模型读纯文本比读复杂 PDF 准多了。
Step 6:开新对话单独传
如果对话历史已经堆了好几个文件,开个新对话只挂这一个 PDF。
预防建议
- 扫描件先本地 OCR 再上传——不要等到出错才补救
- 200 页大文档拆成 30–40 页一段,分段总结再合并
- 关键结论另存笔记——对话结束后 context 可能丢
- 含敏感信息的合同 / 财报,OCR 前先脱敏
- 长文档分析放在 Projects 里,可以挂持久参考文件不占单次 context