第 1 课
装好 Docling,用命令行把 PDF 转成 Markdown,并对比开关 OCR
用 uv 或 pip 安装 docling 2.148.0(Linux 无显卡用 CPU 版 torch),确认版本;下载官方技术报告 PDF,用 docling convert 转成 Markdown,再关 OCR、图片改占位符,看耗时从 48.89 秒降到 9.74 秒、体积从 570 KB 降到 29 KB。
课程目录第 1 / 3 课
学习位置仅保存在当前浏览器,有效期 180 天。
装好 Docling,用命令行把 PDF 转成 Markdown,并对比开关 OCR
本课对照的官方页面:Installation 、Quickstart 、CLI reference 、GitHub:docling-project/docling 。测试环境:2026-11-08,Asia/Shanghai,Linux x86_64 云主机(8 核、无 GPU),Python 3.12.15,docling 2.148.0(2026-11-05 发布),torch 2.15.0 CPU 版。下面所有「对照结果」都是这台机器的真实输出,只做了节选。
Docling 是 IBM Research 发起、现由 LF AI & Data 基金会托管的 MIT 开源文档解析工具(GitHub 约 7 万星)。它在本机用版面分析模型和 TableFormer 表格模型读懂 PDF 的标题层级、阅读顺序和表格,再统一成 DoclingDocument,导出 Markdown、JSON、HTML 等格式。本课先把它装好,用命令行把官方技术报告 PDF 转成 Markdown,并对比开、关 OCR 的耗时。
第 1 步:建虚拟环境并安装(Linux 用 CPU 版 torch)
官方安装页的写法是直接 pip install docling。如果你的 Linux 机器没有 NVIDIA 显卡,官方建议加 PyTorch CPU 源,省掉几 GB 的 CUDA 依赖。本课用 uv 建 Python 3.12 虚拟环境(用 pip 也一样):
mkdir -p ~/docling-lab && cd ~/docling-lab
uv venv .venv -p 3.12
source .venv/bin/activate
uv pip install docling --extra-index-url https://download.pytorch.org/whl/cpu --index-strategy unsafe-best-match
只用 pip 的写法(与官方安装页一致):
python3 -m venv .venv && source .venv/bin/activate
pip install docling --extra-index-url https://download.pytorch.org/whl/cpu
macOS(Apple 芯片)和 Windows 直接 pip install docling 即可。uv 用户加了 CPU 源后要带上 unsafe-best-match 这个索引策略,否则 uv 只认第一个源里的 torch 版本,可能解析失败。
对照结果(节选;测试机网络较快,约 4 秒装完 103 个包,其中 torch 约 200 MB,你的耗时取决于网络):
Resolved 103 packages in 842ms
Downloading torch (199.8MiB)
...
+ docling==2.148.0
+ docling-core==2.106.0
+ docling-ibm-models==4.0.4
+ docling-parse==7.24.2
装完的虚拟环境约 1.6 GB,请预留磁盘。
第 2 步:确认版本
docling --version
对照结果:
Docling version: 2.148.0
Docling Core version: 2.106.0
Docling IBM Models version: 4.0.4
Docling Parse version: 7.24.2
Python: cpython-312 (3.12.15)
Platform: Linux-6.12.94+-x86_64-with-glibc2.41
新版命令行把转换放进了 convert 子命令。运行 docling -h 能看到三个子命令:convert(本地转换)、options(查看某个引擎可用的参数)和 convert-remote(交给 docling-serve 服务转换)。官方 Quickstart 里不带子命令的旧写法仍然可用,但本课统一写 docling convert,和 docling convert -h 的帮助对得上。
第 3 步:准备一份 PDF
用官方 README 里的示例文档,也就是 Docling 自己的技术报告(arXiv 2408.09869,9 页,带图和表):
curl -L -o 2408.09869.pdf https://arxiv.org/pdf/2408.09869
ls -lh 2408.09869.pdf
对照结果:
-rw-r--r-- 1 box box 5.4M Nov 8 00:08 2408.09869.pdf
为什么先下载,而不是直接把 URL 交给 Docling?官方示例确实可以写 URL。但 Docling 会先解析域名,拒绝解析到内网或保留网段的地址(防 SSRF)。如果你在开了 Clash 之类「TUN / Fake-IP」模式的代理环境里,域名会被解析成 198.18.x.x 这类保留地址,Docling 就报 URL is not allowed。测试机正是这种环境,所以本课统一先用 curl 下载到本地再转换。
第 4 步:第一次转换(默认开 OCR)
mkdir -p out
time docling convert 2408.09869.pdf --output out
ls -lh out
第一次运行会自动从 Hugging Face 下载两个模型:版面分析模型 docling-layout-heron 和 docling-models(含 TableFormer)。以后会复用缓存,不再下载。
对照结果(节选):
INFO docling.models.utils.hf_model_download: Downloaded model docling-project/docling-layout-heron ... in 5.67 sec.
INFO docling.models.utils.hf_model_download: Downloaded model docling-project/docling-models ... in 3.99 sec.
INFO docling.pipeline.base_pipeline: Processing document 2408.09869.pdf
WARNING docling.models.stages.ocr.rapid_ocr_model: RapidOCR returned empty result!
INFO docling.document_converter: Finished converting document 2408.09869.pdf in 48.89 sec.
real 0m56.734s
-rw-r--r-- 1 box box 570K Nov 8 00:09 2408.09869.md
两个提示不用慌:HF_TOKEN 警告只是说匿名下载限速;RapidOCR returned empty result 是因为这页的位图区域里没有可识别文字。
第 5 步:看一眼输出的 Markdown
head -c 1200 out/2408.09869.md
对照结果(图片的 base64 已省略):

## Docling Technical Report
## Version 1.0
Christoph Auer MaksymLysak Ahmed Nassar Michele Dolfi ...
## Abstract
This technical report introduces Docling, an easy to use, self-contained, MITlicensed open-source package for PDF document conversion. ...
标题、摘要、章节都变成了 Markdown 标题,正文按阅读顺序排好。文件有 570K,是因为默认把图片以 base64 嵌进了 Markdown。
第 6 步:关掉 OCR、图片只留占位符
这份技术报告是「电子版」PDF,文字本来就能直接取出来,不需要 OCR。扫描件、拍照件才需要 OCR。再跑一次:
time docling convert 2408.09869.pdf --no-ocr --image-export-mode placeholder --output out6
ls -lh out6
grep -c "<!-- image -->" out6/2408.09869.md
对照结果:
INFO docling.document_converter: Finished converting document 2408.09869.pdf in 9.74 sec.
real 0m16.386s
-rw-r--r-- 1 box box 29K Nov 8 00:11 2408.09869.md
5
| 跑法 | 转换耗时 | Markdown 大小 |
|---|---|---|
| 默认(OCR 开,图片 base64 内嵌) | 48.89 秒 | 570 KB |
| 关 OCR,图片用占位符 | 9.74 秒 | 29 KB |
9 页文档,关 OCR 后快了约 5 倍,文件缩到原来的约二十分之一;5 张图在正文里只留下一行 HTML 注释形式的 image 占位(就是上面 grep 数出来的 5 处)。想把图片单独存成 PNG,把占位模式换成 referenced。实测输出目录最好写绝对路径(见下方代码块):
docling convert 2408.09869.pdf --no-ocr --page-range 1-3 --image-export-mode referenced --output "$PWD/out-ref"
find out-ref | head -4
对照结果:
out-ref
out-ref/2408.09869.md
out-ref/2408.09869_artifacts
out-ref/2408.09869_artifacts/image_000001_48a04bd....png
图片存进 2408.09869_artifacts 文件夹,Markdown 里写的是图片的绝对路径。如果输出目录写成相对路径 out-ref,2.148.0 实测会把图片放进 out-ref/out-ref/ 这一层嵌套目录,Markdown 里的链接按当前目录计算,移动文件夹后容易断链。
常见坑
- 没有 GPU 也能跑:本课全程 CPU。帮助里设备参数默认
auto,有 CUDA 或 Apple MPS 会自动用上。 - 扫描件要开 OCR:默认 OCR 引擎是自带的 RapidOCR。中文扫描件可以按
docling convert -h里的示例指定中文语言(见下方代码块),本课没有中文扫描件,未实测。 - URL 被拒:见第 3 步,代理 Fake-IP 环境先下载再转换。
docling convert scan.pdf --ocr-engine rapidocr --ocr-lang ch --output out-ocr
小结
你已经装好 Docling 2.148,用 docling convert 把一份 9 页带图带表的 PDF 转成了 Markdown,知道了关 OCR、图片占位能大幅提速瘦身。下一课只转指定页、导出 JSON 和表格 CSV,并改用 Python API。
