
過去には専門書を裁断して高速スキャナーでPDF化する作業、いわゆる自炊という作業を結構やっておりました。本を切り刻むという行為には罪悪感もありますし、何しろ手間がかかってだんだんやらなくなっていました。ただ、やっぱりPDFにしておくと便利ですが、私の使っていたソフトウェアではきちんとしたOCRができ無くて、テキストを検索でき無くて困っていました。
OCRされた文章が透明テキストとしてPDFに埋め込まれていると使い勝手がいいのですが、ただスキャンしただけのPDFは「見た目はPDFだけど、中身は画像」なので、検索もコピーもできません。
AdobeのAcrobatの有償版では、OCRが可能なので年間契約している今は、それを使えば良いのですが、Pythonを使うと無料で同じようなことが出来るらしいので、それを試してみました。これで固定費を節約できる!
この記事では、macOSでPDFに“透過OCR(見た目はそのまま/検索・コピー可能なテキストレイヤーを追加)”を付ける手順をまとめます。
透過OCRとは(ざっくり)
- PDFの見た目: 変えない(スキャン画像はそのまま)
- 裏側にテキスト: OCRで推定した文字を“透明なテキストレイヤー”として埋め込む
人間が見ると透過テキストが透過テキストがあっても無くても変わらないのですが、文字情報があるとかなり便利になります。これがあるとPDFビューアの検索(⌘F)やテキストコピーができるようになります。
使うもの
- Homebrew(未導入なら先に入れておく)
- Tesseract(OCRエンジン)
- ocrmypdf(PDFに透過OCRを付けるツール。内部でTesseractを使う)
Homebrewは、macOS用のパッケージマネージャで、ソフトウェアのインストールや管理を簡単に行えます。コマンドひとつで様々なツールを導入・更新・削除でき、開発環境の構築や管理に便利です。インストールや実際の操作は、ターミナルというソフト上で行います。黒地に緑の文字、いわゆるコンピューターの画面上の操作なんですが、慣れると色んなことが無料で出来て本当に便利です。
環境構築(macOS)
私のメイン環境はMacなので、macOSでの環境構築についてまとめます。WindowsやLinuxでも同じようなことが出来ますが、コマンドが少し違うので、その辺りは各自でチャッピーに聞いて下さい。
Tesseract(日本語データ込み)
Tesseractは、Googleが開発する高精度なOCR(光学文字認識)エンジンです。画像上の文字を自動で認識し、テキストデータ化します。多言語対応で、日本語も認識可能。無料でオープンソース、コマンドラインや様々なツールから利用できます。
brew install tesseract tesseract-lang
ocrmypdf
ocrmypdfは、既存のPDFに高精度なOCRをかけ、テキスト検索・コピー可能な「透明テキストレイヤー」を埋め込む無料ツールです。Tesseractを利用し多言語対応、コマンド一つで簡単に処理できます。
pip3 install ocrmypdf
インストール確認
which ocrmypdf which tesseract ocrmypdf --version tesseract --version
使い方

まずは最小のコマンド(日本語)
ocrmypdf -l jpn --skip-text "入力.pdf" "出力_ocr.pdf"
-l jpn: 日本語としてOCR(英語も混ざるなら後述のjpn+eng)--skip-text: すでにテキストが入っているページはOCRしない(既存の文字を尊重したいときに便利)- 重要: 入力と出力は別ファイル名にする(上書き前提では動かない)
日英混在なら(いちばん出番が多い)
ocrmypdf -l jpn+eng --skip-text "入力.pdf" "出力_ocr.pdf"
よく使うオプション
--force-ocr: 既存テキストがあっても強制的に全ページOCR
(「テキストは入ってるけど精度が悪い/別方式で作り直したい」など)--deskew: 傾き補正--clean: ノイズ除去(読み取りが弱い時の改善策として試す)
例:
ocrmypdf -l jpn --deskew --clean --skip-text "入力.pdf" "出力_ocr.pdf"
つまずきポイント(ここだけ読めば事故りにくい)
1) パスにスペースがある → 必ずクォートで囲む
OK
ocrmypdf -l jpn --skip-text \ "ADS-2000/透過OCR無し/40代の体づくり Tarzan_20200826.pdf" \ "ADS-2000/透過OCR付き/40代の体づくり-Tarzan_20200826-ocr.pdf"
NG(バックスラッシュを混ぜると“その文字を含むファイル名”を探してしまうことがある)
# ❌ これはハマりがち ocrmypdf -l jpn --skip-text \ "ADS-2000/透過OCR無し/40代の体づくり\ Tarzan_20200826.pdf" \ "出力.pdf"
2) 出力ファイル名に .pdf を付ける
ocrmypdf の出力はPDFなので、拡張子 .pdf を付けておくのが安全です。
3) 「File not found」が出る
- カレントディレクトリが想定と違うことが多いです。迷ったら 絶対パス にします。
ocrmypdf -l jpn --skip-text \ "/Users/daizo/Documents/ADS-2000/透過OCR無し/入力.pdf" \ "/Users/daizo/Documents/ADS-2000/透過OCR無し/出力_ocr.pdf"
仕上げ:元PDFの日付(更新日時)をOCR版へコピー(任意)
OCR後に「新しいファイル扱い」になって更新日時が変わるのが嫌な場合は、macOSの touch -r が便利です。
touch -r "元ファイル.pdf" "OCR版.pdf"
例:
touch -r \ "ADS-2000/透過OCR無し/gBIZ_20200824.pdf" \ "ADS-2000/透過OCR無し/gBIZ_20200824_ocr.pdf"
まとめ
手軽に、そして追加費用無くPDFに透過OCRを付けることができるようになりました。
- macOSなら
tesseract+ocrmypdfが手堅い - まずは
ocrmypdf -l jpn+eng --skip-textを覚えるとだいたい回る - スペース入りパスは必ずクォート、出力は
.pdfを付ける - 必要なら
touch -rで日付も揃えられる