如果你平常需要處理大量 PDF,應該多少遇過這幾種情況:Adobe Acrobat 可以正常開啟 PDF,轉存 JPG 或 PNG 時卻突然報錯;線上 PDF 轉檔工具有檔案大小限制;又或者你只是想一次把幾十份 PDF 自動轉成圖片,不想每份都手動點選。
這時候,pdftoppm 就是一個相當實用的工具。
它不需要圖形介面,只要一行指令就能把整份 PDF 轉成 PNG、JPG 等圖片,也很適合搭配 PowerShell、Python、OCR 或 AI 文件分析流程。pdftoppm 本身屬於 Poppler 工具組,會利用 PDF 渲染引擎重新繪製頁面,而不是單純把 PDF 裡的檔案解包出來。
本文就從一般使用者實際會遇到的需求出發,介紹 Windows、macOS、Linux 如何安裝 pdftoppm,以及 PDF 轉 PNG、JPG、指定頁面、DPI、批次轉檔與其他 Poppler 延伸功能。
一、pdftoppm 是什麼?
pdftoppm 是 Poppler 提供的命令列工具,名稱來自 PDF to Portable Pixmap。
它最大的用途,就是把 PDF 的每一頁重新渲染成圖片。
例如原本有一份:
document.pdf裡面有 18 頁,透過 pdftoppm 就可以一次產生:
page-1.png
page-2.png
page-3.png
...
page-18.png目前常見的輸出格式包括:
- PNG
- JPEG / JPG
- TIFF
- PPM
由於它是透過 Poppler 渲染 PDF,因此 PDF 裡面的文字、向量圖形、圖片等內容都會重新 Rasterize 成點陣圖片。它特別適合用在批次轉檔、OCR、AI Vision、RAG 文件處理與後端自動化。
有一點需要先釐清:
pdftoppm並不是 PDF 修復工具。
它不會真正把 PDF 裡面損壞的 Object、XRef 或頁面結構修好,而是使用另一套 Renderer 嘗試把頁面重新畫出來。
這也是為什麼有些 PDF 使用 Adobe Acrobat 轉圖片會失敗,但 pdftoppm 卻可能正常輸出。
二、Poppler 與 pdftoppm 有什麼關係?
安裝 pdftoppm 時,實際上通常安裝的是整套 Poppler。
Poppler 是一套開源 PDF Rendering Library,從 Xpdf 專案演化而來。在 Linux 與許多開源 PDF 軟體中都有廣泛應用。
安裝後通常不只有 pdftoppm,而是會得到一整套 PDF 工具:
Poppler
├── pdftoppm
├── pdftocairo
├── pdftotext
├── pdfimages
├── pdfinfo
├── pdffonts
└── pdftohtml它們各自有不同用途:
pdftoppm:把完整 PDF 頁面轉成圖片pdftocairo:PDF 轉 PNG、SVG、PDF、EPS 等格式pdftotext:擷取 PDF 中的文字pdfimages:擷取 PDF 裡原始內嵌圖片pdfinfo:查看頁數、尺寸、PDF 版本、加密狀態等pdffonts:檢查 PDF 使用哪些字型pdftohtml:將 PDF 內容轉換成 HTML
如果只是「我要把 PDF 每頁轉成 JPG 或 PNG」,先學會 pdftoppm 就已經可以處理大部分需求。
三、Windows、macOS、Linux 如何安裝 pdftoppm?
Windows 安裝
Windows 使用者比較容易卡在這一步,因為不像 Linux 可以直接透過系統套件管理器安裝。
其中一種方式,是下載編譯好的 Windows Poppler。
例如解壓縮到:
C:\Tools\poppler\通常可以在:
C:\Tools\poppler\Library\bin\看到:
pdftoppm.exe完整路徑可能是:
C:\Tools\poppler\Library\bin\pdftoppm.exe可以先直接在 PowerShell 測試:
& "C:\Tools\poppler\Library\bin\pdftoppm.exe" -v如果有顯示版本資訊,就代表可以正常執行。
接著再把:
C:\Tools\poppler\Library\bin加入 Windows 的 PATH 環境變數,以後就可以直接執行:
pdftoppm -vWindows 也可以透過 Conda 安裝:
conda install -c conda-forge poppler不過繁體中文 Windows 環境有時可能遇到:
UnicodeDecodeError: cp950
Rolling back transaction如果安裝最後看到 Rolling back transaction,代表套件其實已經被回滾,這時直接改用 Windows Standalone binary 通常比較省時間。
macOS
macOS 使用 Homebrew 最簡單:
brew install poppler安裝完成:
pdftoppm -vUbuntu / Debian
Linux 可以直接:
sudo apt update
sudo apt install poppler-utils安裝完成後同樣測試:
pdftoppm -vmacOS 與 Ubuntu / Debian 的安裝方式也都包含在原始資料中。
四、pdftoppm 基本用法:PDF 轉 PNG、JPG

基本語法其實非常簡單:
pdftoppm [參數] input.pdf output最後面的 output 並不是輸出的單一檔案名稱,而是「檔名前綴」。
例如:
pdftoppm -png input.pdf page就會產生:
page-1.png
page-2.png
page-3.png
...PDF 轉 PNG
pdftoppm -png input.pdf page如果 PDF 主要是:
- 文字
- 表格
- UI
- 網頁截圖
- 線稿
通常比較適合 PNG。
PDF 轉 JPG
pdftoppm -jpeg input.pdf page如果主要是:
- 掃描文件
- 照片
- 圖片型 PDF
- 想降低檔案容量
就可以使用 JPG。
如果還要控制 JPEG 品質:
pdftoppm -jpeg -jpegopt quality=95 input.pdf page這些也是 pdftoppm 最核心的格式轉換操作。
五、如何設定 DPI 與輸出圖片尺寸?
PDF 轉成圖片時,最常遇到的問題就是:
到底要用多少 DPI?
最常見的寫法:
pdftoppm -png -r 300 input.pdf page其中:
-r 300就是以 300 DPI 渲染。
常見可以這樣選:
| DPI | 適合用途 |
|---|---|
| 72~96 DPI | 縮圖、快速預覽 |
| 150 DPI | 一般網頁圖片 |
| 300 DPI | OCR、文件保存、印刷 |
| 600 DPI | 小字、印章、高精細文件 |
300 DPI 通常是畫質、OCR 準確率與處理速度之間比較實用的平衡點。
但 DPI 不是越高越好。
DPI 提高之後:
畫質 ↑
圖片尺寸 ↑
檔案容量 ↑
RAM 使用量 ↑
處理時間 ↑如果圖片最後是要放網站、交給 AI Vision 或傳 API,也可以直接限制最大尺寸:
pdftoppm -png -scale-to 1920 input.pdf page這樣可以避免輸出一張動輒 4000~6000px 的圖片。
六、如何只轉 PDF 指定頁面?
不一定每次都要把整份 PDF 轉完。
例如只想轉第 5 頁:
pdftoppm -png -f 5 -l 5 input.pdf page其中:
-f = First Page
-l = Last Page如果想轉第 3~10 頁:
pdftoppm -png -f 3 -l 10 input.pdf page除了頁數之外,還可以使用:
-x
-y
-W
-H指定頁面的某個區域。
例如:
pdftoppm -png -f 1 -l 1 -x 0 -y 0 -W 800 -H 600 input.pdf crop_page這對一些自動化應用非常有用,例如:
- 只截發票號碼
- 只取表格
- 只取身分證照片
- 擷取特定欄位
- OCR 指定區域
相關的頁數與 Cropping 參數可參考原始內容。
七、如何一次批次轉換大量 PDF?
如果資料夾裡有:
A.pdf
B.pdf
C.pdf一個一個輸入指令顯然很麻煩。
Windows PowerShell 可以直接:
Get-ChildItem *.pdf | ForEach-Object {
$name = $_.BaseName
New-Item -ItemType Directory -Force $name | Out-Null
pdftoppm `
-png `
-r 300 `
$_.FullName `
"$name\page"
}執行後會產生:
A\
B\
C\例如:
A\
├── page-1.png
├── page-2.png
└── page-3.png每份 PDF 都會自動建立自己的輸出資料夾。
macOS 或 Linux 也可以透過 Bash for 迴圈完成相同工作。
如果每天需要處理幾十甚至幾百份 PDF,這也是命令列工具相較圖形介面最大的優勢之一。
八、如何確認 PDF 有沒有完整轉出?
批次處理時不能只看程式「沒有報錯」,還要確認頁數真的一致。
首先可以使用:
pdfinfo input.pdf查看:
Pages: 18或者使用 QPDF:
qpdf --show-npages input.pdf假設結果是:
18接著在 Windows PowerShell 計算輸出的圖片:
(Get-ChildItem ".\pdf_images\page-*.png").Count如果得到:
18就可以理解為:
PDF Pages = 18
Images = 18所有頁面都有產生圖片。
如果變成:
PDF Pages = 18
Images = 12就表示中間可能有頁面渲染失敗或程式中斷。
將原始頁數與輸出圖片數量互相比對,是自動化 PDF 處理很值得加入的一道驗證程序。
九、pdftoppm 常見錯誤與排除方式

「pdftoppm 無法辨識」
Windows 如果看到:
pdftoppm : 無法辨識 'pdftoppm'通常不是 PDF 出問題,而是 Windows 找不到 pdftoppm.exe。
可以先:
where.exe pdftoppm如果沒有任何結果,代表:
- 尚未安裝
- PATH 沒設定
- Conda 安裝失敗或已 Rollback
也可以完全不依賴 PATH:
& "C:\Tools\poppler\Library\bin\pdftoppm.exe" -vPDF 可以開,但轉換失敗
可以先檢查:
pdfinfo input.pdf看看:
- 頁數
- PDF Version
- 是否加密
再透過:
qpdf --check input.pdf檢查 PDF 低階結構。
如果 PDF 有密碼,也可以使用:
pdftoppm -png -upw "password" input.pdf page這些排錯方式在原始資料的故障排除章節也有整理。
十、pdftoppm、pdftocairo、pdfimages 有什麼不同?
這三個工具很容易被搞混。
pdftoppm
它做的是:
PDF Page
↓
重新 Render
↓
PNG / JPG如果你想要的是:
把整張 PDF 頁面的「畫面」存成圖片
通常使用 pdftoppm。
pdftocairo
pdftocairo 同樣可以渲染 PDF,但輸出種類更廣,例如:
pdftocairo -svg input.pdf output.svg除了 PNG、JPEG 外,還可以輸出 SVG、PDF、EPS、PS 等。
pdfimages
pdfimages 完全是另一種用途。
pdfimages -all input.pdf img它不是把 PDF 頁面重新畫成圖片,而是:
PDF
↓
尋找內嵌圖片
↓
把 Image Object 抽出來也就是說,如果 PDF 中放了一張 4000 × 3000 的照片,你只是想拿到那張原始照片,就應該優先用 pdfimages,而不是把整張 PDF 頁面截成圖片。
三者的核心差異也可以整理成:pdftoppm 偏整頁光柵化、pdftocairo 偏多格式輸出,而 pdfimages 是原始圖片抽取。
十一、pdftoppm 延伸應用:OCR、Python 與 AI
pdftoppm 真正有價值的地方,並不只是「PDF 轉 PNG」。
例如掃描 PDF 本身可能完全沒有文字層:
PDF
↓
pdftoppm
↓
300 DPI PNG
↓
OCR
↓
文字後面可以接:
- Tesseract
- PaddleOCR
- Google Vision
- Azure OCR
- AI Vision Model
如果本身使用 Python,也可以使用 pdf2image。
例如:
from pdf2image import convert_from_path
pages = convert_from_path(
"document.pdf",
dpi=300
)
for i, page in enumerate(pages):
page.save(f"page-{i + 1}.png")pdf2image 可以透過 Poppler 完成 PDF 頁面轉換,因此很適合整合進程式。
再進一步就可以做:
PDF Upload
↓
pdftoppm
↓
PNG
↓
OCR
↓
結構化資料
↓
Database / RAG / AI例如:
- FastAPI PDF 轉圖片 API
- 自動 OCR
- 合約分析
- 發票辨識
- PDF 自動分類
- RAG 文件匯入
- AI 多模態分析
這時 pdftoppm 就不只是轉檔工具,而會變成整個文件自動化 Pipeline 的其中一環。
十二、實戰:Acrobat 無法轉存 PDF 時,pdftoppm 能做什麼?
最後來看一個很典型的實際狀況。
假設手上有一份:
18 頁 PDFAdobe Acrobat 可以開啟,但使用:
轉存 PDF → 影像 → PNG / JPG卻跳出:
預期字典物件按下「忽略」之後,甚至可能只有部分頁面成功輸出。
這時先用:
qpdf --check input.pdf結果可能出現:
No syntax or stream encoding errors found再使用:
qpdf --show-npages input.pdf又確認:
18這表示從 QPDF 能檢查到的低階語法來看,PDF 頁面數仍然存在。
接著就可以換一套 Renderer:
pdftoppm -png -r 300 input.pdf page如果最後順利得到:
page-1.png
page-2.png
...
page-18.png就代表至少 Poppler 能夠把這 18 個頁面渲染出來。原始資料中的實戰案例同樣是以 Acrobat 出現「預期字典物件」、QPDF 檢查無明顯語法錯誤,再改用 pdftoppm 輸出的方式處理。
所以遇到 Acrobat 轉存失敗時,不要立刻認為「PDF 18 頁已經壞掉」。
比較準確的理解是:
Acrobat 無法處理某個 PDF 結構,不代表其他 PDF Renderer 一定也無法解析。
這也是 pdftoppm 很值得放進工具箱的原因。
最後整理幾個最常用的指令:
# 查看版本
pdftoppm -v
# PDF → PNG
pdftoppm -png input.pdf page
# PDF → JPG
pdftoppm -jpeg input.pdf page
# 300 DPI PNG
pdftoppm -png -r 300 input.pdf page
# 第 3~10 頁
pdftoppm -png -f 3 -l 10 input.pdf page
# JPG 品質 95
pdftoppm -jpeg -jpegopt quality=95 input.pdf page
# 最大長邊 1920px
pdftoppm -png -scale-to 1920 input.pdf page
# 密碼 PDF
pdftoppm -png -upw "password" input.pdf page對一般使用者而言,pdftoppm 可以取代許多手動 PDF 轉圖工作;對開發者而言,它更可以與 PowerShell、Python、OCR、AI Vision 與後端 API 結合。
特別是遇到 Acrobat 無法轉存、需要一次處理大量 PDF,或準備建立 OCR / AI 文件處理系統時,Poppler 與 pdftoppm 都是非常值得熟悉的一組工具。
