環境
- Stirling PDF 2.7.0
やりたいこと
PDFから画像を抽出したり、ファイルサイズを圧縮したい場面って意外とある。 Acrobat Readerだけ入れてても有料版でないと使えない機能が多いし、ネットに転がってる「PDF変換ツール」はどう見ても怪しい。
セキュリティを考えると、機密文書を謎のオンラインサービスにアップロードするわけにはいかない。 そこで見つけたのがStirling PDFだ。
これはDockerでローカル環境に構築できるセルフホスト型のPDFツール。ファイルを外部に送信せずに処理できるので、情報漏洩のリスクがゼロになる。
インターフェースは日本語対応で、裏側はJavaで動いているらしい。
機能をざっと見ると、かなりの充実ぶり。

- おもな機能
- PDFテキストエディター、結合、比較、圧縮、変換、OCR/クリーンアップ、手動墨消し、PDFマルチツール、テキストを追加、画像の追加、注釈、フォーム入力
- 文書セキュリティとレビュー
- 文書セキュリティ: パスワードの追加、透かしの追加、PDFにスタンプを追加、無害化、平坦化、PDFフォームのロック解除、権限の変更
- 文書レビュー: メタデータの変更、目次の編集、閲覧
- 署名: 証明書による署名、署名
- ページ整形と高度なフォーマット
- ページ整形: PDFのトリミング、回転、分割、ページ再配置、ページ縮尺調整、ページ番号追加、マルチページレイアウト、小冊子面付け、PDFを単一の大きなページに変換、添付を追加
- 高度なフォーマット: 色/コントラストの調整、修復、スキャン写真の検出と分割、PDFを重ね合わせ、色の置換と反転、スキャナー風効果
- 抽出や削除などのツール類
- 抽出: ページの抽出、画像の抽出
- 削除: ページの削除、空白ページの削除、注釈の削除、画像の削除、パスワードの削除、証明書の署名削除
- 自動化: PDFファイル名を自動変更、自動化
とりあえずDockerで動かしてみた。
docker-compose.yml
以下のdocker-compose.ymlを作成して起動する。
services: stirling-pdf: image: stirlingtools/stirling-pdf:latest ports: - '8080:8080' environment: - SECURITY_INITIALLOGIN_USERNAME=admin - SECURITY_INITIALLOGIN_PASSWORD=password
ブラウザで http://localhost:8080 にアクセスし、admin/passwordでログインできる。
環境変数で LANGS=ja_JP を指定したが、反映されなかった模様。
API機能
Stirling PDFにはAPI機能もある。設定からAPIキーが取得できるので
import requests def split_pdf(pdf_path, output_zip_path, pages): url = "http://localhost:8080/api/v1/general/split-pages" headers = { "X-API-KEY": 'dummy-5252-4342-96b5-e0b60c03899f' } with open(pdf_path, "rb") as f: files = {"fileInput": f} data = {"pageNumbers": pages} response = requests.post(url, headers=headers, files=files, data=data) if response.status_code == 200: with open(output_zip_path, "wb") as out_f: out_f.write(response.content) print("分割が完了 指定したパスに保存された") else: print(f"失敗 ステータスコード: {response.status_code}") # 例: "1-3,5,7-9" のように指定 split_pdf("input.pdf", "extracted.zip", "2-3")
公式ドキュメントは以下。
https://app.swaggerhub.com/apis-docs/Frooodle/Stirling-PDF/0.45.0app.swaggerhub.com