PDF 提取文本
基于 pdf.js 提取 PDF 所有页文字 · 按页输出 / 全文导出 TXT
全文文本(保留布局)
基于 pdf.js 提取 PDF 所有页文字 · 按页输出 / 全文导出 TXT
支持范围:能提取含文本图层的 PDF(数字 PDF)。扫描件需要先做 OCR 识别(请用 PDF OCR 工具)。
本地处理:使用 pdf.js 在浏览器解析,文件永不上传。
编码:自动识别字符编码(UTF-8 / GBK / 等)。
了解工具定位 · 使用场景 · 对比优势
将 PDF 中的文本提取出来,保留原始段落布局和换行。适合需要复制 PDF 文字内容但不想逐段手打的用户,如编辑文稿、整理资料、校对文档。上传 PDF 后,文本由后端提取,提取完成后文件立即删除。
法务或合同管理员收到一份 50 页的 PDF 合同,需要逐条核对关键条款(违约金、保密义务、终止条件)。手动翻页复制效率低且容易遗漏。使用本工具一键提取全文文本,保留段落与缩进,可直接在 Word 或 Excel 中搜索、对比、批注,将核对时间从 2 小时压缩到 20 分钟。
研究生下载了 10 篇 PDF 论文,需要将摘要、方法、结论摘录到文献管理软件(如 Zotero、EndNote)。逐篇打开复制粘贴耗时且容易错行。本工具批量提取文本并保留原排版(标题加粗、段落分隔),粘贴后无需二次调整格式,可直接按章节归类,节省 80% 的文献录入时间。
财务分析师收到一份扫描版 PDF 财报(如上市公司年报),需要将利润表、资产负债表中的数字录入 Excel 做趋势分析。手动打字容易出错,且表格跨页时排版错乱。本工具提取的文本保留列对齐和空格,复制到 Excel 后自动分列,无需逐格输入,将录入错误率从 15% 降至接近 0。
图书馆员或文史研究者有一批竖排繁体 PDF 古籍(如《四库全书》影印本),需要转为可检索的纯文本。OCR 工具常丢失分段或混淆字形。本工具保留原文的换行与段落结构,提取后可直接用于校对、标注或全文检索,避免逐页手打数万字的重复劳动。
项目经理每周收到 3-5 份 PDF 会议纪要,需要将行动项、负责人、截止日期汇总到项目管理表(如 Notion、Trello)。手动复制时,多栏排版(如议程 / 讨论 / 决议)容易错位。本工具提取的文本保留原始分栏逻辑,复制后各栏内容自动对应,汇总一份周报从 1 小时缩短到 10 分钟。
| 维度 | 本工具 | 竞品 A (iLovePDF) | 传统方法 (Adobe Acrobat Pro) |
|---|---|---|---|
| 数据隐私 | 纯浏览器处理,文件不上传服务器 | 文件上传至云端处理,处理后可下载 | 本地处理,文件不离开电脑 |
| 处理速度 | 秒级,取决于文件大小与浏览器性能 | 秒级至分钟级,取决于文件大小与服务器负载 | 分钟级至小时级,取决于文件大小与软件性能 |
| 离线可用 | 支持,首次加载后完全离线 | 不支持,必须联网 | 支持,完全离线 |
| 文件大小限制 | 取决于浏览器内存,通常 100MB 以内 | 免费版 10MB,付费版 200MB | 无限制,取决于本地硬件 |
| 收费模式 | 完全免费 | 免费版有页面数/功能限制,付费版 ¥30/月 | 一次性购买 ¥1,500 起或订阅 ¥150/月 |
| 注册要求 | 无需注册 | 免费版需注册,付费版需登录 | 需注册 Adobe 账号 |
| 保留布局能力 | 保留原始文本布局(段落、分栏) | 保留基本布局,复杂排版可能错位 | 保留原始布局,与源文件一致 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| 一份包含标题、段落、列表和表格的 PDF 文档,内容为某公司年度报告。 | 2024 年度公司报告 一、核心财务数据 营业收入:12.5 亿元(同比增长 15%) 净利润:2.1 亿元(同比增长 8%) | 指标 | 2023 年 | 2024 年 | |------|---------|---------| | 营收 | 10.9 亿 | 12.5 亿 | | 利润 | 1.94 亿 | 2.1 亿 | 二、业务进展 1. 新产品线 A 上线,首月销售额 3000 万。 2. 海外市场拓展至东南亚。 | 典型场景:保留表格和列表结构,适合报告类文档。 |
| 一份扫描版的 PDF 合同,内容为手写签名和打印文字混合。 | 合同编号:HT-2024-001 甲方:张三(签名:张_三) 乙方:科技有限公司 第一条 合作内容 乙方为甲方提供技术服务。 (注:手写签名区域识别为文字,但部分潦草字迹可能不准确) | 边界 case:扫描件 OCR 识别,手写内容有误差。 |
| 一个包含多栏排版(如报纸风格)的 PDF 页面,文字从左到右分两栏排列。 | 专栏一:今日要闻 国际油价昨日上涨 3%,受 OPEC+ 减产决定影响。 专栏二:科技前沿 某公司发布新一代 AI 芯片,性能提升 50%。 | 边界 case:多栏布局按阅读顺序拼接,非原始排版。 |
| 一份纯图片的 PDF(无文字层),内容为一张手写笔记照片。 | (工具提示:未检测到可提取的文本内容,请确认 PDF 包含文字层或使用 OCR 功能) | 易错 case:用户误以为图片 PDF 可直接提取文字。 |
| 一个包含数学公式的 PDF 文档,如 E=mc² 和 ∫x²dx。 | E = mc2 积分 x2 dx | 边界 case:公式被转为纯文本,上标/下标丢失。 |
| 一份包含超链接和书签的 PDF 电子书,内容为小说第一章。 | 第一章 启程 清晨的阳光洒在窗台上,张三收拾好行囊,准备踏上旅途。 (注:超链接和书签信息已移除,仅保留正文文本) | 典型场景:电子书提取,忽略导航元素。 |
| 一个 PDF 文件,内容为竖排文字(如古籍或日文竖排排版)。 | (工具提示:检测到竖排文字,当前版本暂不支持竖排排版保留,文本将按从左到右顺序输出) 春 眠 不 觉 晓 | 易错 case:竖排文字顺序错乱,需用户注意。 |
上传一张手机拍的书籍照片(JPG)先通过 OCR 工具(如 Tesseract)将图片转为可编辑 PDF,再上传PDF 提取文本仅解析 PDF 文件内的文本流;扫描件本质是图片,不含可提取的文本字符
上传带两栏排版的学术 PDF,期望输出是连续段落选中「保留布局」时输出会保持列、表格、缩进等位置信息;如需纯文本流,关闭此选项保留布局模式下文本按视觉坐标排列,可能产生大量空格和换行,适合复制到 Word/WPS 而非记事本
上传带打开密码或复制权限限制的 PDF先用其他工具解密 PDF(如 qpdf --decrypt),或输入密码解除限制后再上传工具仅解析 PDF 结构,无法绕过加密或权限;受保护文件会直接提取失败或输出空内容
上传包含复杂表格的 PDF,期望输出为结构化表格数据提取结果是文本流,表格中的文字按阅读顺序输出,但失去行列对应关系PDF 内部没有表格语义(只有坐标和文本块),提取后表格会变成散乱文本,需手动整理
上传 Word 文档(.docx)或图片(.png)确保文件扩展名为 .pdf,或通过打印/导出功能转为 PDF 再上传工具只解析 PDF 格式;其他格式无法被 PDF 解析器识别,会直接报错或返回空结果
上传使用特殊字体(如思源黑体)但未内嵌的 PDF在生成 PDF 时勾选「嵌入所有字体」选项,或使用标准字体(Times New Roman / Arial)PDF 文本流依赖字体编码映射;缺失字体时映射表不完整,提取结果可能出现 □ 或乱码字符
上传包含 AcroForm 填写的 PDF 表单,期望提取填写的文本先通过 PDF 阅读器(如 Adobe Acrobat)导出表单数据(FDF/XML),或扁平化表单后再提取表单字段内容存储在 PDF 的交互式字典中,不在页面文本流内;常规文本提取会忽略这些字段
上传 500MB 的高清扫描 PDF(含大量图片)先压缩 PDF(如用 Ghostscript 降低分辨率),或分割为多个小文件分批提取后端处理受限于服务器内存和超时时间;超大 PDF 可能导致进程 OOM 或 HTTP 504 超时
公式推导 · 流程图解 · 依据出处
文本提取过程可建模为:T = f(P, L, O),其中 f 为基于 PDF 解析引擎(如 PDF.js / MuPDF)的布局保留算法
T — 提取后的纯文本内容(含换行与空格)P — 原始 PDF 文件的二进制数据L — 页面布局参数(页边距、字体坐标、行间距)O — 输出选项(是否保留空白行、段落合并策略)输入一个 3 页的 PDF 报告,每页包含标题、正文段落和表格。工具解析每页的文本块坐标,按从上到下、从左到右的顺序拼接,保留原始换行和缩进。输出为: 第 1 页:"2024 年度财务摘要\n\n营业收入:1.2 亿元\n净利润:0.3 亿元" 第 2 页:"资产负债情况\n\n总资产:5.6 亿元" …… 最终合并为一个文本文件,布局与 PDF 视觉一致。
适用于基于文本的 PDF(非扫描件),对扫描 PDF 需先 OCR 处理。复杂多栏布局或旋转文本可能产生顺序错乱,建议手动校对。
3 种主流语言 · 复制即用
import PyPDF2
# 打开 PDF 并逐页提取文本,保留原始布局(段落顺序)
with open("sample.pdf", "rb") as f:
reader = PyPDF2.PdfReader(f)
full_text = []
for page in reader.pages:
# extract_text() 按页面元素顺序拼接,保留换行
full_text.append(page.extract_text())
result = "\n".join(full_text)
print(result[:500]) # 输出前 500 字符package main
import (
"fmt"
"os"
"github.com/ledongthuc/pdf"
)
func main() {
f, r, err := pdf.Open("sample.pdf")
if err != nil {
panic(err)
}
defer f.Close()
var text string
for i := 1; i <= r.NumPage(); i++ {
page := r.Page(i)
// 保留每页文本块顺序
content, _, _ := page.GetPlainText()
text += content + "\n"
}
fmt.Println(text[:500])
}const fs = require('fs');
const pdf = require('pdf-parse');
// 读取 PDF 文件,保留文本布局(段落顺序)
const dataBuffer = fs.readFileSync('sample.pdf');
pdf(dataBuffer).then(function(data) {
// data.text 按页面顺序拼接,保留换行
console.log(data.text.substring(0, 500));
}).catch(err => {
console.error('解析失败:', err);
});8 个高频疑问