PDFtk(PDF Toolkit)介紹

 PDFtk 是一款免費、開源的 PDF 處理工具,支持在命令列中對 PDF 進行多種操作,如拆分、合併、加密、解密和檢查 PDF 文件屬性。


📌 PDFtk 安裝

Windows

  1. 下載並安裝 PDFtk Server:

    • 官網下載:PDFtk Server(Windows 版本)。

    • 安裝後,將 PDFtk 安裝目錄(如 C:\Program Files (x86)\PDFtk Server\bin)加入系統環境變數 PATH

macOS / Linux

  • 在 macOS 或 Linux 上,通常可以透過 Homebrew 安裝:

    brew install pdftk-java

📌 PDFtk 基本使用方法

以下是一些常用的 PDFtk 指令和範例:

1. 檢查 PDF 屬性

  • 指令:

    pdftk yourfile.pdf dump_data
  • 範例:

    pdftk example.pdf dump_data
  • 效果:這會顯示 PDF 的基本屬性(頁數、加密狀態、標題、作者等)。


2. 分割 PDF

  • 指令:

    pdftk yourfile.pdf burst
  • 範例:

    pdftk example.pdf burst
  • 效果:將 PDF 內每一頁分割成獨立檔案。


3. 合併 PDF

  • 指令:

    pdftk file1.pdf file2.pdf cat output merged.pdf
  • 範例:

    pdftk page1.pdf page2.pdf cat output combined.pdf
  • 效果:將兩個 PDF 文件合併為一個。


4. 提取特定頁面

  • 指令:

    pdftk yourfile.pdf cat 1-3 output output.pdf
  • 範例:

    pdftk example.pdf cat 2-4 output extracted.pdf
  • 效果:從第 2 到第 4 頁提取,生成新 PDF。


5. 加密 PDF

  • 指令:

    pdftk yourfile.pdf output secured.pdf owner_pw your_password
  • 範例:

    pdftk example.pdf output secured.pdf owner_pw 1234
  • 效果:為 PDF 添加密碼保護(擁有者密碼)。


6. 檢查 PDF 是否是文字或影像型

雖然 PDFtk 無法直接判斷 PDF 是文字型還是影像型,但你可以結合指令進行檢測:

  • 指令:

    pdftk example.pdf dump_data | grep -i text
  • 說明

    • 如果檔案是文字型 PDF,則應該會顯示與「文字」或「字型」相關的內容。

    • 如果是純影像型,則很可能不會有這類資料。


📌 更進階應用:批次處理

  • 如果你有大量 PDF 檔案要檢查或處理,可以使用 Bash 或批次檔:

    for file in *.pdf; do
    pdftk "$file" dump_data | grep -i text && echo "$file 是文字型 PDF" || echo "$file 是影像型 PDF" done
  • 效果:此腳本會逐一檢查目錄下所有 PDF,並顯示每個檔案的類型。


進階應用:

使用 PDFtk 與 OCR 工具將影像型 PDF 轉為文字型 PDF

PDFtk 本身無法進行光學字符辨識(OCR),但可以與其他 OCR 工具(如 Tesseract)搭配來將影像型 PDF 轉為文字型 PDF。以下我將教你如何結合 PDFtk 和 Tesseract OCR 來實現這個功能。


📌 必備工具

  1. PDFtk(已安裝)

  2. Tesseract OCR

  3. Poppler(pdftoppm 和 pdftotext)

    • 用於將 PDF 頁面轉為影像格式,方便 OCR 處理。

    • Windows:從 Poppler for Windows 下載並設定 PATH。

    • macOS/Linux

      brew install poppler

📌 PDFtk + Tesseract + Poppler:OCR 工作流程

  1. 使用 PDFtk 分割 PDF 頁面

  2. 將每頁 PDF 轉為影像格式(如 PNG)

  3. 使用 Tesseract OCR 將影像轉為文字

  4. 將 OCR 結果合併成文字型 PDF


📌 步驟詳解與範例

步驟 1:使用 PDFtk 分割 PDF

  • 假設我們有一個影像型 PDF 檔案:scanned_document.pdf

  • 指令:

    pdftk scanned_document.pdf burst
  • 效果:這會將每一頁分割成單獨 PDF(pg_0001.pdf、pg_0002.pdf...)。


步驟 2:將 PDF 頁面轉為影像格式

  • 使用 pdftoppm 將分割的 PDF 頁面轉為 PNG 影像。

  • 指令:

    pdftoppm pg_0001.pdf page_0001 -png
  • 效果:這會將 PDF 第一頁轉成影像檔 page_0001.png


步驟 3:使用 Tesseract 進行 OCR

  • 對影像檔執行 OCR:

    tesseract page_0001.png page_0001_ocr -l eng --dpi 300 pdf
  • 解釋

    • -l eng:使用英文語言庫(可更改為其他語言)。

    • --dpi 300:設定 DPI 為 300,提升識別效果。

    • pdf:輸出格式為 PDF。

  • 效果:產生 page_0001_ocr.pdf,這是已進行 OCR 的文字型 PDF。


步驟 4:合併所有 OCR PDF

  • 如果你有多頁 PDF,可以將它們合併為單一 PDF:

    pdftk page_0001_ocr.pdf page_0002_ocr.pdf cat output final_ocr_document.pdf
  • 效果:這會將所有 OCR 處理過的頁面合併成一個完整的文字型 PDF。


📌 自動化腳本(進階)

如果你需要處理大量 PDF,可以考慮使用 Bash 腳本(Linux/macOS)或批次檔(Windows)來自動化流程。

範例:Bash 腳本

#!/bin/bash
# 檢查是否提供 PDF 檔名 if [ -z "$1" ]; then echo "請提供 PDF 檔案名稱。" exit 1 fi # 變數設置 input_pdf="$1" output_pdf="ocr_$1" mkdir temp_ocr # 使用 PDFtk 分割 PDF pdftk "$input_pdf" burst output temp_ocr/page_%04d.pdf # 將每一頁進行 OCR for file in temp_ocr/*.pdf; do page=$(basename "$file" .pdf) pdftoppm "$file" temp_ocr/$page -png tesseract temp_ocr/${page}-1.png temp_ocr/${page}_ocr -l eng --dpi 300 pdf done # 合併所有 OCR 頁面 pdftk temp_ocr/*_ocr.pdf cat output "$output_pdf" # 清理暫存檔 rm -rf temp_ocr echo "OCR 完成,輸出檔:$output_pdf"
  • 如何使用

    1. 將上述腳本儲存為 ocr_pdf.sh

    2. 賦予可執行權限:


      chmod +x ocr_pdf.sh
    3. 執行腳本:


      ./ocr_pdf.sh your_scanned_document.pdf
  • 效果:會自動將你的影像型 PDF 轉為文字型 PDF,並輸出為 ocr_your_scanned_document.pdf


📌 這樣的腳本應用優點

  • 可處理大量 PDF。

  • 可輕鬆改成批次檔(Windows)。

  • 可調整 Tesseract 語言庫,支援多語言 OCR(如繁中、簡中)。


📌 Windows 批次檔:PDFtk + Tesseract OCR 自動化

📌 檔案名稱:OCR_PDF.bat

這個批次檔會自動:

  1. 使用 PDFtk 分割 PDF 頁面。

  2. 使用 Poppler 將每頁轉為 PNG 影像。

  3. 使用 Tesseract OCR 進行辨識。

  4. 合併所有 OCR 頁面為文字型 PDF。


📌 批次檔內容

@echo off
setlocal enabledelayedexpansion :: 檢查 PDFtk, Tesseract, 和 Poppler 是否已安裝 where pdftk >nul 2>&1 || (echo PDFtk 未安裝,請確認已安裝並設定環境變數 & exit /b) where tesseract >nul 2>&1 || (echo Tesseract 未安裝,請確認已安裝並設定環境變數 & exit /b) where pdftoppm >nul 2>&1 || (echo Poppler 未安裝,請確認已安裝並設定環境變數 & exit /b) :: 請使用者選擇 PDF 檔案 set /p input_pdf=請輸入要進行 OCR 的 PDF 檔案名稱(包括副檔名): if not exist "%input_pdf%" ( echo 找不到檔案:%input_pdf% exit /b ) :: 建立臨時資料夾 set temp_dir=temp_ocr mkdir %temp_dir% :: 使用 PDFtk 分割 PDF 頁面 pdftk "%input_pdf%" burst output %temp_dir%\page_%%04d.pdf :: OCR 每一頁 for %%f in (%temp_dir%\*.pdf) do ( set filename=%%~nf pdftoppm "%%f" "%temp_dir%\!filename!" -png tesseract "%temp_dir%\!filename!-1.png" "%temp_dir%\!filename!_ocr" -l eng --dpi 300 pdf ) :: 合併所有 OCR 文字型 PDF pdftk %temp_dir%\*_ocr.pdf cat output "OCR_%input_pdf%" :: 清理臨時資料夾 rmdir /s /q %temp_dir% echo OCR 完成,輸出檔:OCR_%input_pdf% pause

📌 使用說明

  1. 將這段程式碼儲存為 OCR_PDF.bat

  2. 確保你已安裝:

    • PDFtk Server 並已設定在環境變數中。

    • Tesseract OCR 並已設定在環境變數中。

    • Poppler(pdftoppm) 並已設定在環境變數中。

  3. 將要進行 OCR 的 PDF 檔案與批次檔放在同一資料夾中。

  4. 雙擊 OCR_PDF.bat,並輸入 PDF 檔案名稱(含副檔名)。


📌 使用範例

假設你有一個名為 scanned_document.pdf 的影像型 PDF:

  1. scanned_document.pdfOCR_PDF.bat 放在同一資料夾。

  2. 雙擊 OCR_PDF.bat,輸入:

    mathematica

    請輸入要進行 OCRPDF 檔案名稱(包括副檔名):scanned_document.pdf
  3. 程式會自動:

    • 分割 PDF 為單獨頁面。

    • 將每頁轉為 PNG 影像。

    • 使用 Tesseract OCR 進行辨識。

    • 將所有 OCR 頁面合併為單一文字型 PDF,檔名為 OCR_scanned_document.pdf


📌 可調整選項

  • 語言設定

    • 預設為英文(-l eng)。如需其他語言(如繁中),請下載 Tesseract 語言庫,並修改這一行:

      batch

      tesseract "%temp_dir%\!filename!-1.png" "%temp_dir%\!filename!_ocr" -l chi_tra --dpi 300 pdf
  • DPI(解析度)

    • 預設為 300 DPI,可視需求調整:

      --dpi 300
First Post : 2025/05/16

沒有留言: