ChatGPT 看 PDF 的方式跟你不一样。在 Free、Go、Plus、Pro 这几档套餐上,PDF 的处理是纯文本的:解析器先把可选中的文本层抽出来,建一个私有语义索引,然后模型从这个索引里检索片段来回答。一旦文本层是坏的——扫描页根本没文本、多栏排版抽取顺序乱、表格被压扁成一串连排数字、嵌入子集字体解码成乱码、整页是图片——模型总结的就是噪声,答案自然错。图片和图表则被直接丢掉(截至 2026 年 6 月,只有 ChatGPT Enterprise 的 “Visual Retrieval with PDFs” 功能能在对话里读图表)。
这一个事实会彻底改变你的排查顺序:绝大多数”ChatGPT 把我的 PDF 分析错了”其实是抽取失败,不是推理失败。 先验证抽出来的文本,确认输入没问题之后,再去动模型和 prompt。
一句话总结
- ChatGPT 读的是文本层,不是页面本身。没文本层(扫描 / 拍照 PDF)= 没内容进得了模型。
- 它不会可靠地自动 OCR 扫描件,Free/Go/Plus/Pro 上还会忽略嵌入的图片 / 图表。这些都得在上传之前处理好。
- 大文件:上限是单文件 512 MB、200 万 token(截至 2026 年 6 月)。超过约 200 万 token 的尾部会被悄悄丢掉,所以一份 3000 页的报告会显得”只读了一半”。
- 收益最高的两步——给扫描件做 OCR、把复杂表格本地转成 Markdown——能解决大约 70% 的情况。
- 不用命令行、30 秒先试的办法: 用 Chrome 或 Edge 打开这份 PDF,
Print->Save as PDF,再上传。浏览器会用一层干净的文本层重写文件,常常能救活那种被 ChatGPT 以No text could be extracted from this file拒收的 PDF。 - 验证修好没:让 ChatGPT 原文引一句话,再在原始 PDF 里用 Ctrl+F 搜,搜得到就是真修好了。
常见原因
按命中率从高到低:
1. 扫描页没文本层
最常见。来自手机拍照、纸质文件扫描的 PDF 看起来正常,实际每页是一张大图,没有任何”文本”可以被抽取。模型只看到 “[image]” 和空白,回”该页没有内容”。
如何判断:阅读器(Preview / Adobe)里逐页试鼠标拖选文字。选不中 = 没文本层 = 扫描页。
2. 多栏 / 复杂排版抽取顺序错
学术论文 / 杂志双栏 PDF,抽取器经常按 z-order(左到右、上到下)扫,把左栏第一段拼上右栏第一段——句子被打乱。
如何判断:让它”原文引第 3 页第 1 段”,引出来的内容句子拼接奇怪 / 主谓不连贯 = 抽取顺序错。
3. 表格被压扁丢行列
PDF 的表格只是绘制的线条 + 文本框,抽取器把行列结构丢了,输出变成一串没结构的数字。“Q1 营收 100, Q2 200” 可能被抽成 “Q1 营收 Q2 100 200”。
如何判断:表格相关问题答错 / 数字对错位 = 这条。让它”逐行抽取 Table 2 的所有行”输出结构混乱 = 验证。
4. 嵌入字体 / 非标 CID 抽出乱码
中文 PDF / 数学公式 / 特殊字体经常用 embedded subset font + 非标 CID 映射。抽取出来变 ”���” 或者英文字母替代汉字。
如何判断:让它原文引一段,输出明显乱码 / 字符替换 = 字体问题。
5. 巨型 PDF 超出 200 万 token 索引,尾部被丢
ChatGPT 不会把整份大 PDF 装进上下文。它建的是语义索引(截至 2026 年 6 月,单文件上限 200 万 token),每次检索只拉相关片段——大约每轮 11 万 token——进模型。超过 200 万 token 上限的部分会被悄悄忽略。一份 3000 页的法律文书体积可能远低于 512 MB 上限,但最后三分之一从没被索引,所以模型对前几章答得很自信,对后面却一片空白。
如何判断:让它”列出每一章及其页数”对照实际目录,明显缺尾几章 = 索引被截断了。
6. 加密 / 受保护 PDF 抽不出来
带 password 或 DRM 的 PDF 上传后能看到文件但抽取失败。模型答”无法访问此文件内容”。
如何判断:本地用 qpdf --is-encrypted 检查 = 加密。
7. 图片 / 图表内容完全被忽略
在 Free、Go、Plus、Pro 上,PDF 处理是纯文本的——图表、流程图、扫描进来的图片根本不会被读。模型从没看到它们,自然引用不了。只有 ChatGPT Enterprise 的 “Visual Retrieval with PDFs” 功能(截至 2026 年 6 月仅 Enterprise 可用,Free、Plus、Pro、Team、Edu 都没有)才能在普通上传里读懂图表里的数字和示意图。
如何判断:明明图表里有数字,回答却完全没提,而且问”Figure 3 说明了什么”只能瞎猜或拒答 = 这张图从没被读过。
值得知道的当前上限(2026 年 6 月)
下面这些数字常常是”只读一半”或”被拒收”的隐形元凶。全部数据截至 2026 年 6 月。
| 上限 | 数值 | 触顶时会怎样 |
|---|---|---|
| 单文件大小 | 512 MB | 直接拒绝上传 |
| 索引上限(文本 / PDF) | 单文件 200 万 token | 超过约 200 万 token 的尾部被悄悄丢弃 |
| 每轮检索量 | 每次查询约拉 11 万 token | 长文档靠片段回答,不是看全文 |
| 可靠处理体积 | 建议控制在约 25 MB 以内 | 更大也能上传,但建索引时容易出问题 |
| 每条消息文件数 | 10 个(Plus 及以上) | 第 11 个附件被忽略 |
| 上传频率 Free | 约 3 个 / 天 | 再传被拦 |
| 上传频率 Plus | 最高 80 个 / 3 小时 | 超额后被限流 |
| 上传频率 Team/Enterprise | 最高 160 个 / 3 小时 | 超额后被限流 |
来源:OpenAI 文件上传 FAQ 及 OpenAI 公布的各档套餐上限。
动手前先确认
- 确认问题出在哪里:是 Project、Custom GPT 还是普通对话。PDF 走的都是同一条纯文本管线,但 Project 会把文件在整个项目里持续保留,这会改变某条具体消息实际挂载的是什么。
- 复现前把当前对话复制一份,避免清掉历史影响下次诊断。
- 确认订阅:Free、Go、Plus、Pro、Team、Enterprise 共用 512 MB / 200 万 token 上限,但只有 Enterprise 能在对话里读图表。
需要收集的信息
- PDF 类型(数字原生 / 扫描 / 混合)、总页数、文件大小(MB)。
- 是否含中文 / 数学公式 / 表格 / 图表 / 双栏排版。
- 完整 prompt 文案 + 错误回答截图;具体哪几页 / 哪个表 / 哪个数字错。
- 当前模型 + 上传方式(对话 / Project / Custom GPT)。
最短修复路径
按收益从高到低,前 2 步通常修 70% 问题。
Step 0:不用命令行、30 秒就能试的办法
装任何工具之前,先试一下”浏览器重写”。用 Chrome 或 Edge 打开这份 PDF,按 Print,选 Save as PDF(或 Microsoft Print to PDF),保存后上传这个新文件。浏览器会用一层干净、单流的文本层重新渲染文档,常常能修好那种被 ChatGPT 以 No text could be extracted from this file 拒收、或者抽出来一团乱的 PDF。这招只在原文件本来就有一些真实文本层时管用(它没法凭空给纯扫描件造出文字——那种情况直接看 Step 2),但试错成本为零,能解决相当一部分排版 / 编码类问题。
Step 1:逐页验证文本可选中
在本地 PDF 阅读器(macOS Preview / Adobe / 浏览器)打开:
- 翻到内容错的那几页
- 尝试鼠标拖选文字
- 能选中 = 有文本层;不能 = 扫描页 / 位图
或者命令行批量检查:
# 提取文本,看每页字数
pdftotext -layout your.pdf - | wc -l
# 或者用 Python
pip install pdfplumber
python -c "import pdfplumber; pdf = pdfplumber.open('your.pdf'); print([len(p.extract_text() or '') for p in pdf.pages])"
输出页字符数都是 0 / 个位 = 扫描或抽取坏。
Step 2:自己给扫描页跑 OCR
Free/Go/Plus/Pro 上 ChatGPT 不会可靠地 OCR 扫描件——它指望的是现成的文本层。本地用 ocrmypdf(基于 Tesseract)补一层。扫描质量很关键:尽量 300 DPI 以上、高对比、页面摆正。
# 安装 ocrmypdf
brew install ocrmypdf # macOS
sudo apt install ocrmypdf # Ubuntu/Debian
# OCR(中英文)
ocrmypdf input.pdf output.pdf --language eng+chi_sim
# 已有残缺 / 损坏文本层时,强制干净重做
ocrmypdf input.pdf output.pdf --force-ocr --deskew --language eng+chi_sim
上传 output.pdf,“该页看不到任何内容”这种回答就消失了。
Step 3:高质量结构化抽取转 Markdown
复杂表格、公式、多栏排版要用懂版面的抽取器,不能靠裸 pdftotext。下面这些工具产出的 Markdown 会保留表格结构和阅读顺序:
# Marker(CPU / GPU 都可)— 公式、版面还原都强
pip install marker-pdf
marker_single input.pdf --output_dir ./output --max_pages 300
# 输出 output/input/input.md
# 或者 Docling(IBM)— 输出干净的 Markdown/HTML,表格还原度业界最佳
pip install docling
docling input.pdf --to md --output ./output
上传生成的 Markdown,而不是 PDF。检索质量和表格准确度都会飞跃,因为模型现在索引的是干净的结构化文本,而不是一串乱掉的字符流。
什么时候用哪个抽取器(截至 2026 年 6 月):
| 工具 | 最适合 | 说明 |
|---|---|---|
ocrmypdf(Tesseract) | 扫描 / 纯图片页 | 原地补文本层,仍是 PDF |
| Docling(IBM) | 密集表格、多栏论文 | 自带 TableFormer 模型,表格准确度领先(2026 年基准约 88% F1);纯 Python 安装;输出 Markdown/HTML/JSON |
Marker(marker-pdf) | 数学公式、高保真版面 | 输出 Markdown;GPU 快很多,CPU 也能跑;公式最强 |
| MinerU | 复杂 / HTML 渲染表格、中英混排文档 | 2026 年新出的开源选项,速度快,复杂表格处理好 |
pdfplumber | 定点抽单个表格转 CSV | 可脚本化,表格抽取精确 |
| Adobe Acrobat OCR | 一次性、不想用命令行 | 图形界面;纸质扫描 OCR 稳 |
如果是”从这些表格里答题”的 RAG 场景,Docling 是最稳的默认选项;公式或版面保真最重要时再上 Marker。这几个工具偶尔都会把多级标题判断错,所以长文档转完后先抽查一下章节顺序再信它。
Step 4:表格单独显式抽取
直接给 ChatGPT 的 prompt:
The document contains a table on page 12. Extract that table:
- Quote the exact title / caption
- Quote every column header in order
- Quote each data row verbatim, row by row
- Format as Markdown table
强制结构化抽取 → 模型不能再”压扁成 prose”。
Step 5:巨型 PDF 切成 30-50 页一段
如果怀疑是触了 200 万 token 索引上限(见上面”巨型 PDF”那条),就把文档切开,让每一段都被完整索引,检索时也少了互相干扰的片段:
# 按页数固定切
qpdf --split-pages=30 large.pdf part-%d.pdf
# 按章节切(如果有书签)
pdftk full.pdf cat 1-46 output ch1.pdf
pdftk full.pdf cat 47-92 output ch2.pdf
每段独立上传、独立查询。这样能保证尾部章节确实被索引,而不是超过 200 万 token 上限后被丢掉。
Step 6:加密 PDF 先解密
# 你有密码
qpdf --decrypt --password=YOURPASSWORD encrypted.pdf decrypted.pdf
上传 decrypted.pdf。
Step 7:含关键图表的页转图给 vision 看
抽取层抽不出图表 → 把那几页转 PNG / JPG 上传给 vision 读:
# pdftoppm(PDF → 图)
pdftoppm -r 200 -png mypdf.pdf page
# 输出 page-1.png, page-2.png, ...
把关键页的图传给 ChatGPT,让 vision 直接读图。比让它读坏抽取强。
怎么确认已经修好
- 开新对话上传 OCR / Markdown 后的版本,问同一题,引用的原文 + 页码能在 PDF 里 Ctrl+F 找到 = 真修好。
- 让它原文引第 50 页一句话,对比原始 PDF 那一句字一字对得上 = 抽取无损。
- 让同事用相同 OCR / 转换流程跑一份再上传,结果一致 = 流程稳定。
如果还是没修好
- 把 PDF 切到最小:保留出问题那 1-3 页,转 Markdown 上传,看深度能不能拉起来。
- 换抽取工具:依次试 Marker、Docling、Adobe Acrobat,对比各自产出的 Markdown,上传最干净的那份。
- 重要场景换平台。Claude(Opus 4.7 / Sonnet 4.6)在标准定价下就有 100 万 token 上下文,中等大小的 PDF 可以直接装进上下文,而不是藏在检索后面;Gemini 3.1 Pro 同样提供 100 万 token;Google 的 NotebookLM 专为带引用的文档问答而做。
- 准备好原 PDF + 抽取后的 Markdown + 错误回答截图 + 期望内容,去 help.openai.com 提工单。
预防建议
- 上传前永远做一次健全检查:让 ChatGPT “原文引第 3 页一句话”。引不出就先修抽取。
- 优先用数字原生 PDF(直接从 Word / LaTeX / Pages 导出),少用”打印—扫描”链路。
- 高 stakes 分析(财务、合规、合同)一律本地先转 Markdown 再上传,不要直接上传 PDF。
- 表格 / 数字密集的页提前转 CSV / Markdown,分析准确度跨数量级提升。
- 200 页只读一章 → 提前本地切出那一章,不要全传。
常见问题
怎么修 “No text could be extracted from this file”?
这个报错说明解析器没找到可用的文本层。按顺序两个快办法:(1) 用 Chrome 或 Edge 打开 PDF,用 Print -> Save as PDF 重存一份(Step 0)——这会重建一层干净文本层,常常立刻就好;(2) 如果是真扫描件,本地跑 ocrmypdf(Step 2)补一层真正的文本,再上传。两招都不行,文件多半是加密的(qpdf --is-encrypted)或已损坏。
明明那页有字,ChatGPT 为什么说没内容?
那一页几乎肯定是扫描进来的图片,没有文本层。ChatGPT 读的是抽出来的文本,不是像素,而且在 Free/Go/Plus/Pro 上它不会可靠地 OCR 扫描件。本地跑 ocrmypdf(Step 2)补上文本层再上传即可。
ChatGPT 能接受多大的 PDF?
单文件 512 MB,外加单文件 200 万 token 的索引上限(截至 2026 年 6 月)。一份 PDF 可能体积过关却超 token 上限,这时尾部会被悄悄丢掉。想索引稳,文件尽量控制在约 25 MB 以内,超长文档先切分。
ChatGPT 为什么忽略我 PDF 里的图表?
在 Free、Go、Plus、Pro 上,PDF 处理是纯文本的——嵌入的图片和图表根本不读。只有 ChatGPT Enterprise 的 “Visual Retrieval with PDFs” 功能才能在普通上传里读图表。消费档套餐想让它读某张图,就用 pdftoppm 把那页导成 PNG,当图片上传,让 vision 直接读(Step 7)。
PDF 看着没问题,为什么表格里的数字是错的?
PDF 表格只是画出来的线条加一堆散落的文本框。抽取器经常丢掉行列网格,把单元格压成一串连排,于是数值落进了错的列。本地用 Marker、Docling 或 pdfplumber 把表格转成 Markdown 或 CSV,上传这份而不是原 PDF。
大文件或扫描件是不是干脆换个工具更好?
重要文档的话,是的。Claude(Opus 4.7 / Sonnet 4.6)和 Gemini 3.1 Pro 都提供 100 万 token 上下文窗口,中等大小的文件能直接装进上下文,而不是藏在检索索引后面;NotebookLM 则专为带引用的文档问答而做。只要喂给 ChatGPT 的是干净的结构化文本,它本身没问题。
相关阅读
标签: #ChatGPT #ChatGPT 文件 #排查 #排查 #PDF 分析