PDFtk 2.02 から qpdf へ移行した話
https://xoblos.hatenablog.jp/entry/2026/08/26/025020
qpdf のインストール方法
https://xoblos.hatenablog.jp/entry/2026/08/27/033720
上記記事で紹介した qpdf の使い方について、「qpdf 簡単チュートリアルガイド」を生成AIに書いてもらいました。ガイド中「今回のような」という表現は、「PDFtk 2.02 から qpdf へ移行した話」での事例を指しています。
qpdf は、PDFの結合・分割・暗号化確認・復号・内部構造の修復などをコマンドラインから行えるツールです。
特に、古い pdftk では扱えない AES-256 / Revision 6 のPDFにも対応しています。qpdfでは256-bit暗号化はAESを使用し、Revision 6にも対応しています。
1. インストール確認
コマンドプロンプトまたはPowerShellで、
qpdf --version
バージョン番号が表示されれば使用できます。
2. PDFが正常かチェックする
まず覚えておくと便利なのが --check です。
qpdf --check input.pdf
PDFの構造を検査します。
正常ならエラーなしで終了します。軽微な異常の場合、たとえば、
WARNING: object has offset 0
のような警告を出しながら、qpdfが読み込みを継続することがあります。
暗号化情報も --check の出力に含まれます。
3. PDFの暗号化状態を確認する
qpdf --show-encryption input.pdf
たとえば、
R = 6
P = -1340
User password =
Supplied password is user password
extract for accessibility: allowed
extract for any purpose: not allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: not allowed
modify anything: not allowed
stream encryption method: AESv3
string encryption method: AESv3
file encryption method: AESv3
などと表示されます。
重要なのは、
R = 6
AESv3
です。
これは AES-256系の暗号化が使われているPDFです。PDFの標準セキュリティハンドラーでは、R=6 は現在の256-bit暗号化方式です。
4. PDFを結合する
2つのPDFを結合
qpdf --empty --pages 1.pdf 2.pdf -- all.pdf
結果:
1.pdf
2.pdf
↓
all.pdf
--empty は「空のPDFから開始して、指定したPDFのページをコピーする」という意味です。複数PDFの結合では非常に便利です。
複数のPDFを結合
qpdf --empty --pages 1.pdf 2.pdf 3.pdf 4.pdf -- all.pdf
5. ファイル一覧から一括結合する
たくさんのPDFを結合するときは、PowerShellが便利です。
例えば pdflist.txt を、
1.pdf
2.pdf
3.pdf
4.pdf
19.pdf
20.pdf
のように作成します。
PowerShell:
$pdfs = Get-Content pdflist.txt
& qpdf --empty --pages @pdfs -- all.pdf
従来のPDFtkで、
pdftk (Get-Content pdflist.txt) cat output all.pdf
としていた用途のqpdf版です。
6. 一部のページだけ取り出す
たとえば input.pdf の1~5ページだけ取り出す場合:
qpdf input.pdf --pages . 1-5 -- output.pdf
. は「メイン入力ファイル」を意味します。qpdfの --pages ではページ範囲を指定できます。
1ページだけ
qpdf input.pdf --pages . 1 -- page1.pdf
3~10ページ
qpdf input.pdf --pages . 3-10 -- output.pdf
最終ページまで
z は最終ページを意味します。
qpdf input.pdf --pages . 5-z -- output.pdf
つまり5ページ目から最後までです。
7. 複数PDFから必要なページだけ結合する
たとえば、
-
a.pdf → 全ページ
-
b.pdf → 1~5ページ
-
c.pdf → 10~最終ページ
をまとめるなら、
qpdf --empty --pages a.pdf b.pdf 1-5 c.pdf 10-z -- output.pdf
--pages は単純な結合だけでなく、複数PDFからページを選択して新しいPDFを作れます。
8. PDFをqpdfで再生成・修復する
PDF内部のxrefなどに軽微な異常がある場合、
qpdf input.pdf fixed.pdf
とするだけで、qpdfがPDF内部構造を読み直して新しいPDFを書き出します。
例えば、
WARNING: 19.pdf (object 6 0):
object has offset 0
などが出た場合、
qpdf 19.pdf 19_fixed.pdf
その後、
qpdf --check 19_fixed.pdf
として確認します。
9. 元ファイルを直接修復する
別ファイルを作らず元ファイルを置き換えることもできます。
qpdf input.pdf --replace-input
qpdfは一時ファイルを作ってから元ファイルを置き換えます。警告があった場合には元ファイルを退避する仕組みもあります。
ただし、安全のため最初は、
qpdf input.pdf fixed.pdf
のように別ファイルへ出力する方がおすすめです。
10. 暗号化を解除する
PDFを加工する正当な権限がある場合、
qpdf --decrypt input.pdf output.pdf
とすると暗号化されていないPDFを作成できます。
パスワードが必要な場合:
qpdf --password=PASSWORD --decrypt input.pdf output.pdf
暗号化されたファイルを扱う場合、user passwordまたはowner passwordが必要になるケースがあります。
11. AES-256で暗号化する
qpdfではAES-256暗号化PDFも作成できます。
基本形は、
qpdf input.pdf output.pdf --encrypt USER OWNER 256 --
です。
例えば、
qpdf input.pdf encrypted.pdf --encrypt userpass ownerpass 256 --
とします。
256-bit暗号化ではAESが使用されます。RC4などの古い暗号方式より、qpdf自身も256-bit AESの利用を推奨しています。
12. PDFのProducerなど内部情報を見る
まずtrailerを確認します。
qpdf --show-object=trailer input.pdf
例えば、
/Info 2 0 R
と表示されたら、
qpdf --show-object=2 input.pdf
とします。
すると、
<<
/CreationDate (...)
/ModDate (...)
/Producer (List Creator)
/Title (...)
>>
のようにPDFの情報を確認できます。
上記の確認例では、
/Producer (List Creator)
だったので、富士通 List Creator系で生成されたPDFと推定できます。
13. ページ数を調べる
最近のqpdfでは、
qpdf --show-npages input.pdf
でページ数だけを取得できます。--show-npages はqpdf 12.3系で追加されています。
例えば、
25
と表示されます。
バッチ処理にも便利です。
14. よく使うコマンド早見表
| やりたいこと |
コマンド |
| バージョン確認 |
qpdf --version |
| PDFチェック |
qpdf --check a.pdf |
| 暗号化確認 |
qpdf --show-encryption a.pdf |
| 2ファイル結合 |
qpdf --empty --pages a.pdf b.pdf -- out.pdf |
| 1~5ページ抽出 |
qpdf a.pdf --pages . 1-5 -- out.pdf |
| 5ページ~最後 |
qpdf a.pdf --pages . 5-z -- out.pdf |
| PDF再生成 |
qpdf a.pdf fixed.pdf |
| 元PDF置換 |
qpdf a.pdf --replace-input |
| 暗号解除 |
qpdf --decrypt a.pdf out.pdf |
| ページ数 |
qpdf --show-npages a.pdf |
| trailer確認 |
qpdf --show-object=trailer a.pdf |
| object確認 |
qpdf --show-object=2 a.pdf |
今回の用途で最低限覚える5つ
今回のような「帳票PDFを大量に結合する」用途なら、まず以下の5コマンドで十分です。
① PDFが正常か
qpdf --check 20.pdf
② 暗号化されているか
qpdf --show-encryption 20.pdf
③ PDFを修復・再生成
qpdf 19.pdf 19_fixed.pdf
④ PDFを結合
qpdf --empty --pages 1.pdf 2.pdf 3.pdf -- all.pdf
⑤ リストから大量結合
$pdfs = Get-Content pdflist.txt
& qpdf --empty --pages @pdfs -- all.pdf
この5つを押さえておけば、PDFtkからqpdfへの移行で必要になる作業の大部分をカバーできます。
おすすめ運用
大量帳票を処理する場合は、
PDF一覧取得
↓
qpdf --check
↓
異常PDFがあれば再生成
↓
暗号化PDFもqpdfで読み込み
↓
--pages で一括結合
↓
all.pdf
という流れにすると安定します。
特に今回のような、
-
List Creator等が生成したPDF
-
AES-256 / R=6 PDF
-
xrefに軽微な異常があるPDF
-
多数のPDFを自動結合
が混在する環境では、古いPDFtkよりqpdfの方が扱いやすい構成です。