Docling 是開源文件解析工具,能把 PDF、Word、Excel 與簡報轉成 Markdown、HTML 或結構化資料。處理雙欄 PDF、掃描文件或表格時,除了辨識文字,還需要還原閱讀順序與欄位關係,轉換後的內容才適合交給 AI 分析。
Microsoft MarkItDown 也能轉換文件。Docling 值得評估的地方,是可以保留文件階層與來源位置,並調整圖片文字辨識(OCR)、圖片與表格的處理方式。一般文件若已能順利轉換,繼續使用 MarkItDown 也合理;需要更細緻的解析與檢查時,再增加 Docling 這套流程。
Docling 是什麼
Docling 由 IBM Research Zurich 的 AI for knowledge 團隊發起,目前是 LF AI & Data Foundation 的專案。程式碼採 MIT 授權,使用到的模型則要分別查看模型授權。它主要用在文件搜尋、資料分析與 RAG 知識庫的資料前處理,可以在終端機透過命令列介面(CLI)轉換文件,也能用 Python API 整合到程式。 官方專案 列有功能與授權資訊。

RAG 是先搜尋相關文件,再讓語言模型依據搜尋結果回答問題的做法。Docling 負責把原始文件整理好,後續的向量化、資料庫、搜尋與回答仍需另外串接;安裝 Docling 不會直接得到聊天介面。
文件解析時,Docling 會建立 DoclingDocument,記錄文字、表格、圖片與章節關係;資料可取得時,也能保留頁碼和座標等來源資訊。這讓程式除了讀取一段文字,也能知道它屬於哪個章節、出自原文件哪裡。 文件資料模型 說明了這些欄位。
支援哪些檔案格式
| 類別 | 常見輸入 | 處理時的重點 |
|---|---|---|
| PDF 與掃描圖 | PDF、PNG、JPEG、TIFF | 文字層、版面分析與 OCR 是不同工作 |
| Office 文件 | DOCX、PPTX、XLSX | 抽取內容與結構,不保證重現原始外觀 |
| 網頁與文字 | HTML、Markdown、CSV | 原本有結構的資料可直接利用 |
| 其他文件 | EPUB、Apple Pages、部分 XML 格式 | 依格式使用對應解析器;Pages 需 format-iwork 擴充 |
音訊與影片也有對應處理流程,但會涉及語音辨識等額外模型。本文集中在 PDF 與辦公文件,完整清單以 支援格式 為準;能接受某個副檔名,不代表所有內嵌物件與排版都能完整保留。
Docling 與 MarkItDown 的差別
MarkItDown 是微軟開源的 Python 工具,以把多種文件轉成 Markdown 為主要用途,同樣會保留標題、清單、表格與連結。本站的 MarkItDown 教學 有安裝、Office 文件轉換與延伸應用,可以搭配閱讀。
| 比較項目 | MarkItDown | Docling |
|---|---|---|
| 主要產物 | 以 Markdown 為核心 | 先建立 DoclingDocument,再匯出不同格式 |
| 文件結構 | 保留 Markdown 能表達的重要結構 | 另有文件階層、閱讀順序與可取得的來源位置 |
| PDF 處理 | 內建轉換器,可另接 Azure 服務 | 提供版面、表格、OCR 與其他解析流程 |
| 掃描與圖片文字 | 可用 OCR 外掛搭配視覺模型,或 Azure 服務 | 可選 EasyOCR、Tesseract、OcrMac 等引擎 |
| 本機與雲端 | 內建轉換可本機執行;Azure 整合另計費 | 支援本機模型;遠端模型需另外啟用 |
| 適合先評估的需求 | 多格式轉 Markdown、既有簡單轉檔流程 | 複雜 PDF、表格抽取、需追溯來源的文件處理 |
MarkItDown 的 官方文件 已列出 OCR 外掛、Azure Document Intelligence 與 Azure Content Understanding,因此不能把差異簡化成「只有 Docling 能 OCR」。比較時也要固定條件:MarkItDown 內建轉換、外接付費服務與 Docling 本機流程,成本和資料流向都不同。
選擇工具時,先看文件種類與需要保留的資訊。如果只是把 Word、HTML 或 Excel 文字交給 AI,現有 MarkItDown 輸出正確就能繼續用。若經常遇到 PDF 欄位交錯、需要匯出表格,或回答必須能回到原頁面,Docling 的資料模型較符合這類需求。這是功能定位的比較,不代表已用相同文件證明哪個工具準確率較高。
安裝 Docling
截至 2026 年 9 月 8 日, 最新正式版為 2.126.0 ,需要 Python 3.10 以上。以下以 Python 3.12 建立獨立環境,固定 Docling 版本,方便對照參數;指令與程式依官方文件和該版本原始碼整理,未包含本機速度或辨識準確率實測。
交給 Agent 的安裝與轉換提示詞
使用具備檔案讀寫與終端機執行權限的 Agent(例如 Claude Code、Codex)時,可把下列整段文字貼進對話,將來源檔案改成 PDF 的完整路徑。提示詞已包含環境檢查、安裝、轉換與驗收要求,不必逐條輸入後面的指令;套件或模型尚未備妥時,提示詞要求 Agent 先確認下載需求。這是依本文流程整理的任務範本,並非 Docling 官方提示詞。
請使用 Docling 完成以下 PDF 的本機轉換。
來源檔案:[貼上 PDF 的完整路徑]
輸出資料夾:來源檔案旁新建 docling-output
處理範圍:前 3 頁;不足 3 頁就處理全部頁面
目標:Markdown、Docling JSON、圖片與表格 CSV
先檢查作業系統、Python、Docling 版本與可用資源。
路徑未填、找不到檔案或沒有終端機權限時,
請指出缺少的條件,等待補充。
缺少 Docling 時,使用獨立虛擬環境,
依官方文件準備 docling[easyocr]==2.126.0。
首次轉換可能下載版面、表格或 OCR 模型;
安裝或下載前,列出所需套件、模型、預估下載量、
記憶體需求、執行範圍與風險,取得同意再執行。
無法可靠估算的數值請標示未知。
檢查指定頁面是否有可用文字層。
文字型 PDF 使用 --no-ocr;掃描頁使用 EasyOCR,
語言設為 ch_tra,en,需要整頁辨識時使用
--ocr-mode full_page。依已安裝版本的 --help
確認 docling convert 參數,不要猜測旗標。
使用標準處理流程,一次只執行一份轉換。
保留來源檔案,輸出重名時另建資料夾。
圖片另存並保留相對引用,表格透過 Python API
匯出 CSV;只安裝本次流程需要的相依套件。
不額外載入大型語言模型,也不擴大頁數或批次範圍。
完成後檢查文字是否空白、圖片連結是否有效,
並對照原頁面的閱讀順序與表格欄位。
列出輸出檔案的完整路徑、實際處理頁數、
使用版本與 OCR 設定,以及錯誤和待人工核對處。
無法對照原頁面時,明確列為未驗證。
在輸出資料夾保存可重跑的指令或 Python 腳本。
以實際執行結果回報,失敗時保留錯誤訊息。
官方文件:
https://docling-project.github.io/docling/
預設先處理前 3 頁,適合確認輸出是否符合用途。完成後可沿用產生的指令或腳本,指定新的頁數範圍;一般聊天介面若沒有檔案與執行工具,只能提供操作建議,不能代替本機執行。
macOS 與 Linux
電腦需先有 Python 3.12。macOS 可開啟「終端機」,Linux 使用既有 shell;在準備放範例文件的位置建立工作資料夾:
# 建立專用資料夾與 Python 環境
mkdir docling-demo
cd docling-demo
python3.12 -m venv .venv
source .venv/bin/activate
# 安裝本文版本與 EasyOCR 支援
python -m pip install "docling[easyocr]==2.126.0"
python -m pip show docling
docling convert --help
Windows PowerShell
以下使用 Python Launcher 選擇已安裝的 Python 3.12,直接呼叫虛擬環境內的程式,不必修改 PowerShell 的執行原則。
# 建立環境並安裝
mkdir docling-demo
cd docling-demo
py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install "docling[easyocr]==2.126.0"
.\.venv\Scripts\python.exe -m pip show docling
.\.venv\Scripts\docling.exe convert --help
後面的多行 shell 範例採 macOS/Linux 寫法,反斜線 \ 表示接到下一行。PowerShell 使用時可把同一指令合成一行,並將開頭的 docling 換成 .\.venv\Scripts\docling.exe。Python 範例則可跨平台使用。
第一次使用會下載模型
安裝 Python 套件與準備模型是兩件事。 官方進階設定 說明,相關模型預設會在第一次使用時自動下載,OCR 引擎也可能另外取得語言模型。因此首次轉換要有網路與足夠磁碟空間,不能把第一次等待時間直接當成每份文件的轉換時間。
macOS、Linux 與 Windows 都可使用,支援情況仍受所選引擎與相依套件影響。入門不必先設定遠端 API 或載入大型視覺語言模型;一般 PDF 可以先從標準流程開始。需要 GPU 時再依 安裝文件 配置相符的運算套件。
用 CLI 把 PDF 轉成 Markdown
準備一份至少 3 頁、可選取文字的 PDF,命名為 report.pdf,放在 docling-demo 資料夾。第一輪只處理前 3 頁,檢查品質後再移除頁數限制。若文件不足 3 頁,請把結束頁碼改成實際頁數。
單一文件與輸出目錄
# 文字型 PDF:先關閉 OCR,只處理前 3 頁
docling convert report.pdf \
--to md \
--output output \
--page-range 1-3 \
--no-ocr \
--device cpu \
--num-threads 2
這個指令會把 Markdown 寫到 output/report.md。--output 指定的是資料夾,與 MarkItDown 的 -o report.md 檔名參數不同;Docling 的 CLI 會自行寫檔,不需要用 > 擷取終端機輸出。參數以 CLI reference 為準。
關閉 OCR 只適用於已有可用文字層的文件。掃描 PDF、整頁圖片或文字層有問題時,應使用下一章的 OCR 設定;--no-ocr 也不等於整個標準流程完全不使用模型,版面與表格仍有自己的處理步驟。
同時保留 Markdown、JSON 與圖片

# Markdown 供閱讀,JSON 保存文件結構
docling convert report.pdf \
--to md --to json \
--image-export-mode referenced \
--output output-with-images \
--page-range 1-3 \
--no-ocr
--to 可重複指定。referenced 會將圖片另存 PNG,再由文件引用;embedded 把圖片資料嵌入檔案,檔案通常較大;placeholder 只標示圖片位置。需要把結果搬到其他電腦時,應連同圖片子資料夾一起搬移,保留相對路徑。
圖片匯出與圖片理解也要分開:把圖片存下來,不等於已經把圖中的折線、流程或圖例轉成文字。交給支援圖片的 AI 工具時,要一併提供圖檔;只讀純文字的系統則需另做圖片描述,並檢查描述是否正確。
整個資料夾批次轉換
# documents 只放本次要轉的 PDF
docling convert documents \
--from pdf \
--to md --to json \
--image-export-mode referenced \
--output batch-output \
--abort-on-error
這裡使用 Docling 預設的 OCR 設定;需要固定繁體中文引擎時,再加下一章的參數。--abort-on-error 讓遇到明確轉換錯誤時停止;部分成功仍須查看終端機的失敗紀錄,不能只看見部分輸出就以為整批完成。不同來源若有相同檔名,建議分開輸出目錄,避免結果互相覆寫。
掃描 PDF 與繁體中文 OCR
Docling 的 OCR 能選擇不同引擎,但語言代碼與支援範圍由引擎決定。依前述指令安裝 EasyOCR 擴充後,可明確指定繁體中文 ch_tra 與英文 en,避免直接套用不適合文件的預設語言。 OCR 語言設定 也提供各引擎的代碼說明。
# scanned.pdf 為至少 3 頁的繁體中文掃描文件
docling convert scanned.pdf \
--ocr-engine easyocr \
--ocr-lang ch_tra,en \
--ocr-mode full_page \
--to md --to json \
--output ocr-output \
--page-range 1-3
--ocr-mode full_page 會以整頁 OCR 處理文字,適合掃描文件或原有文字層不可靠的情況。已有正常文字層的 PDF 不必一律強制 OCR,否則可能增加時間並引入辨識錯誤。舊範例中的 --force-ocr 已標示棄用,本文使用現行參數。
| 引擎 | 繁中與英文代碼範例 | 前提 |
|---|---|---|
| EasyOCR | ch_tra,en | 安裝 easyocr 擴充,首次可能下載模型 |
| Tesseract CLI | chi_tra,eng | 另裝 Tesseract 與對應語言資料 |
| OcrMac | zh-Hant,en-US | 僅 macOS,安裝 ocrmac 擴充 |
不要把一套引擎的語言碼直接複製到另一套。橫排、直排、手寫、低解析度與特殊字型也會影響結果;語言設定正確仍不保證辨識無誤。若只有少數頁面出問題,先取出那些頁面重新處理,比整份文件重跑更容易定位原因。
Python API:匯出文件、圖片與表格
只需要轉檔時,CLI 就足夠。需要整合到程式、分類輸出或處理失敗紀錄時,再使用 Python API。以下範例都把原始檔和輸出目錄分開,避免修改來源文件。
Markdown 與 JSON 基本轉換
將下列內容存成 convert_document.py,與 report.pdf 放在同一資料夾。這份範例使用標準預設流程,沒有沿用前面 CLI 的 --no-ocr 設定。
from pathlib import Path
from docling.document_converter import DocumentConverter
# 建立輸出目錄;來源文件至少 3 頁
output = Path("python-output")
output.mkdir(exist_ok=True)
converter = DocumentConverter()
result = converter.convert("report.pdf", page_range=(1, 3))
document = result.document
# Markdown 供閱讀,JSON 保留 Docling 的資料結構
(output / "report.md").write_text(
document.export_to_markdown(), encoding="utf-8"
)
document.save_as_json(output / "report.json")
print("已輸出至", output.resolve())
# macOS / Linux,在已啟用的虛擬環境執行
python convert_document.py
Windows 可改用 .\.venv\Scripts\python.exe convert_document.py。這個簡單範例沒有要求保存圖片;若需要圖文一起交付,使用下一個範例。DoclingDocument 的 JSON 能保存解析取得的資訊,但不會補出來源原本沒有、或轉換時未取得的座標。
保留圖片並將表格另存 CSV
下列範例依官方 圖片匯出 與 表格匯出 做法改寫,存成 export_assets.py。表格輸出使用 pandas,執行前先在同一虛擬環境安裝 python -m pip install pandas。
from pathlib import Path
from docling.datamodel.base_models import InputFormat
from docling.datamodel.pipeline_options import PdfPipelineOptions
from docling.document_converter import (
DocumentConverter, PdfFormatOption,
)
from docling_core.types.doc import ImageRefMode
output = Path("assets-output")
output.mkdir(exist_ok=True)
# 保存可供匯出的頁面與圖片資料
options = PdfPipelineOptions()
options.generate_page_images = True
options.generate_picture_images = True
converter = DocumentConverter(
format_options={
InputFormat.PDF: PdfFormatOption(pipeline_options=options)
}
)
document = converter.convert(
"report.pdf", page_range=(1, 3)
).document
# 使用外部圖片引用,搬移時保留整個輸出資料夾
document.save_as_markdown(
output / "report.md", image_mode=ImageRefMode.REFERENCED
)
document.save_as_json(
output / "report.json", image_mode=ImageRefMode.REFERENCED
)
# 每個偵測到的表格各存一份 CSV
for number, table in enumerate(document.tables, start=1):
frame = table.export_to_dataframe(doc=document)
frame.to_csv(
output / f"table-{number}.csv",
index=False,
encoding="utf-8-sig",
)
# 來源 report.pdf 放在同一資料夾
python export_assets.py
CSV 適合交給 Excel 或後續分析,但它無法保存所有合併儲存格與視覺排版。匯出後應核對欄名、單位、負號與小數點;沒有偵測到表格時,這段迴圈不會產生 CSV,不能把零個輸出直接解讀成原文件沒有表格。
若多欄表格被錯誤合成一欄,官方提供的調整方式是關閉原文文字與表格儲存格的配對(cell matching),改用表格模型預測的文字儲存格。在上例建立 DocumentConverter 之前加入以下設定,再用同一頁比較結果;這是可嘗試的修正方式,並不保證所有表格都會改善。
# 放在 converter = DocumentConverter(...) 之前
options.table_structure_options.do_cell_matching = False
批次處理與失敗紀錄
這份 batch_convert.py 逐一處理 documents 內的 PDF,重用同一個轉換器。每份文件使用獨立輸出資料夾,最後列出失敗項目,適合接到自己的文件整理流程。
import json
from pathlib import Path
from docling.datamodel.base_models import ConversionStatus
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
failures = []
files = sorted(Path("documents").glob("*.pdf"))
if not files:
raise SystemExit("documents 內沒有 PDF")
for source in files:
try:
result = converter.convert(source, raises_on_error=False)
if result.status != ConversionStatus.SUCCESS:
raise RuntimeError(str(result.status))
target = Path("batch-output") / source.stem
target.mkdir(parents=True, exist_ok=True)
result.document.save_as_markdown(target / "document.md")
result.document.save_as_json(target / "document.json")
print("完成:", source.name)
except Exception as error:
failures.append({"file": str(source), "error": str(error)})
print("失敗:", source.name, error)
Path("conversion-failures.json").write_text(
json.dumps(failures, ensure_ascii=False, indent=2),
encoding="utf-8",
)
print("成功:", len(files) - len(failures), "失敗:", len(failures))
# 先在 documents 放入要轉換的 PDF
python batch_convert.py
這份腳本只處理第一層資料夾中符合 *.pdf 的檔案,且把部分成功也列為待處理;執行前可先用 CLI 確認代表性文件。它沒有啟用圖片保存,適合文字與結構資料;需要圖片時,將上一節的圖片生成與匯出設定一併加入。
轉換結果怎麼檢查
有產生檔案,不代表轉換內容可以直接使用。建議至少各挑一頁普通段落、雙欄內容、表格與掃描頁,對照原始文件驗收,再決定是否整批處理。

| 檢查項目 | 應該看什麼 | 發現問題後的動作 |
|---|---|---|
| 閱讀順序 | 雙欄是否混在一起、頁尾是否插進段落 | 縮小到有問題的頁面,比對原文與 JSON |
| 表格 | 表頭、單位、合併欄位與數字是否對應 | 另存 CSV 核對,必要時人工整理 |
| OCR | 繁簡字、相似字、負號與小數點 | 確認引擎及語言,重做問題頁 |
| 圖片 | Markdown 連結能否找到圖檔 | 保留整個輸出資料夾與相對路徑 |
| 來源 | 檔名、版本、頁碼能否回查 | 保存原檔及 JSON,不只留 Markdown |
常見問題與處理方式
- 找不到 docling 指令:確認虛擬環境已啟用;Windows 使用完整的
.venv\Scripts\docling.exe路徑。用同一環境的python -m pip show docling檢查版本。 - 輸出空白或缺文字:先確認是否為掃描頁、是否關閉 OCR,再指定正確引擎與語言;不應只靠更換輸出格式處理。
- 第一次停在下載:查看終端機訊息與網路連線,先完成需要的模型下載。正式離線部署前可依官方進階文件預先準備模型,並指定
--artifacts-path。 - CPU 或記憶體占用過高:先限制
--page-range、--num-threads,不要同時啟動多份轉換;無需保留整頁圖片時不要啟用該選項。 - 需要查看解析版面:可用
--to html_split_page --show-layout匯出圖文分頁對照的 HTML,並在頁面圖上顯示版面框線。
需要離線處理繁體中文 PDF 時,可在有網路的環境先準備標準版面、表格與 EasyOCR 模型。以下依官方進階設定改寫,只下載此流程使用的模型;搬移到另一台電腦時,Python 套件與相依環境也須先備妥。
# 有網路時:準備本例需要的模型
docling-tools models download layout tableformer easyocr \
--easyocr-lang ch_tra --easyocr-lang en \
--output-dir ./models
# 離線環境:沿用前面的掃描 PDF 範例
docling convert scanned.pdf \
--artifacts-path ./models \
--ocr-engine easyocr --ocr-lang ch_tra,en \
--ocr-mode full_page \
--page-range 1-3 \
--to md --to json --output offline-output
需要人工查看版面辨識結果時,可使用下列 HTML 對照輸出。html_split_page 才會搭配 --show-layout 顯示框線,單用 --to html 不會套用這個視覺化。
# 原始頁面與解析內容的對照檔
docling convert report.pdf \
--to html_split_page --show-layout \
--image-export-mode embedded \
--page-range 1-3 --no-ocr \
--output layout-output
品質有問題時,應先找出是文字辨識、閱讀順序、表格結構或圖片引用哪一層出錯。直接把整份錯誤輸出交給語言模型重寫,可能讓錯誤變得更流暢,卻更難回查。
交給 AI 與建立 RAG 知識庫
短文件可先檢查 Markdown,再交給既有 AI 工具摘要。大型知識庫則需要把文件分段、建立索引,並讓每個片段保留來源。文件解析正確,是後續回答可靠的必要條件之一。
Markdown 與 JSON 的保存方式
Markdown 適合閱讀與交換,JSON 適合保存結構。若系統需要顯示引用頁碼,建議把原始 PDF、DoclingDocument JSON、圖檔與轉換設定一起保存,並記錄文件版本。只留下重新整理過的 Markdown,往往不足以重建原本的定位資訊。
分段與 MCP 整合
Docling 的 chunking 功能 可依文件結構切段;HybridChunker 會用 tokenizer 計算文字拆成 token 後的長度,再依設定上限調整片段。分段後,還需要用 embedding 模型把文字轉成可搜尋的向量,並將片段、向量和來源資訊存進資料庫。
如果使用支援 MCP 的 Agent,也可透過 Docling MCP server 呼叫文件轉換。MCP 是工具連接方式,並不會自動增加辨識準確率。只想轉幾份文件時,直接用 CLI 產生檔案通常更容易檢查;需要讓 Agent 反覆讀取不同文件,才有必要整理工具權限與服務設定。
Docling 可以使用本機模型處理文件,但若設定遠端 OCR 或視覺模型,資料流向就不同。機密文件除了確認轉換階段,也要確認後續摘要、embedding 與搜尋服務的處理位置,不能因為第一步在本機就把整條流程視為離線。
常見問答
是否需要雲端、GPU 或更換既有工具,取決於文件類型與使用的處理流程。
Docling 免費嗎?
程式碼採 MIT 授權,可在授權條件下使用與修改;模型授權需另查。本機執行仍會使用磁碟與運算資源,外接雲端服務則依服務本身計費。
一定需要 GPU 或大型語言模型嗎?
不一定。標準文件處理可使用 CPU,並由版面、表格和 OCR 等元件分工。視覺語言模型(VLM)是另一種可選流程,不必為了把 PDF 轉 Markdown 就先部署大型聊天模型。
Markdown 會保留 PDF 的完整排版嗎?
不會。Markdown 能表達標題、清單與表格等結構,但無法完整重現字型、座標與所有合併儲存格。需要比對外觀時保留原始 PDF;需要程式回查結構時另外保存 JSON。
Docling 會讓 RAG 回答更準嗎?
當原本的問題是文件解析錯誤時,改善解析可能有幫助;但分段、搜尋、模型與問題本身也會影響回答。不能只憑換了轉換工具,就保證整體準確率提升。
已經使用 MarkItDown,需要改用 Docling 嗎?
如果現有輸出能正確保留需要的資訊,不必為換工具而重建流程。只有複雜 PDF、OCR 設定、表格匯出或來源定位的需求超出目前做法時,再用代表性文件評估 Docling。MarkItDown 的安裝與既有應用可參考 MarkItDown 教學 。
參考來源
- GitHub: Docling (專案與功能)
- GitHub: v2.126.0 (本文使用版本)
- Docling: Installation (安裝方式)
- Docling: Supported formats (輸入與輸出格式)
- Docling: CLI reference (命令列參數)
- Docling: Docling document (結構與來源資訊)
- Docling: Advanced options (離線與資源設定)
- Docling: OCR in Docling (OCR 語言與引擎)
- Docling: Full page ocr (整頁 OCR 範例)
- Docling: Export figures (圖片匯出範例)
- Docling: Export tables (表格匯出範例)
- Docling: Chunking (文件分段)
- Docling: Mcp (MCP 整合)
- GitHub: MarkItDown (微軟文件轉換工具)