PDF結合、分割、整理:完全なページ管理ガイド
· 12分で読めます
PDFページの管理は、最も一般的な文書作業の1つです。会計用の請求書を結合する場合でも、大規模なレポートを章ごとに分割する場合でも、同僚と共有するために特定のページを抽出する場合でも、PDF構造を効率的に操作する方法を理解することで、手作業の時間を大幅に節約できます。
この包括的なガイドでは、基本的な結合と分割から、高度なバッチ操作、CLIの自動化、Pythonスクリプトまで、すべてをカバーしています。これらの操作中に何が保持されるか、人気のあるツールを比較し、実際に遭遇する実世界のシナリオを説明します。
目次
PDFの結合:複数の文書を組み合わせる
結合は、複数のPDFファイルをページを順番に追加して1つの文書にまとめます。これは、別々のセクションから完全なレポートを作成したり、スキャンした文書を組み合わせたり、請求期間の請求書をまとめたりするために不可欠です。
プロセスは単純に見えますが、異なるツールはPDF機能を異なる方法で処理します。何が保持され、何が失われるかを理解することは、プロフェッショナルな文書ワークフローにとって重要です。
結合中に保持されるもの
| 機能 | qpdf | pdftk | pikepdf | オンラインツール |
|---|---|---|---|---|
| ページコンテンツ | ✅ | ✅ | ✅ | ✅ |
| ブックマーク | ✅ | ✅ | ✅ | 場合による |
| 内部リンク | ✅ | 部分的 | ✅ | まれ |
| フォームフィールド | ✅ | ✅ | ✅ | 場合による |
| 注釈 | ✅ | ✅ | ✅ | 場合による |
| デジタル署名 | ❌(無効化) | ❌ | ❌ | ❌ |
| 埋め込みフォント | ✅ | ✅ | ✅ | ✅ |
| レイヤー(OCG) | ✅ | 部分的 | ✅ | まれ |
重要:デジタル署名は、文書の内容が変更されるため、結合時に常に無効化されます。これは設計によるもので、署名後に文書が変更されたことを証明します。署名の有効性を維持しながら署名済み文書を結合する必要がある場合は、代わりにPDFポートフォリオの使用を検討してください。
基本的な結合コマンド
# qpdf: 3つのファイルを結合
qpdf --empty --pages file1.pdf file2.pdf file3.pdf -- merged.pdf
# pdftk: 複数のファイルを結合
pdftk file1.pdf file2.pdf file3.pdf cat output merged.pdf
# pdftk: ワイルドカードで結合
pdftk *.pdf cat output combined.pdf
ソフトウェアをインストールせずにブラウザで直接ファイルを結合するには、PDF結合ツールを使用してください。ブックマーク、リンク、フォームフィールドを自動的に保持します。
高度な結合テクニック
単純な連結以上の制御が必要な場合があります。選択的結合のテクニックを以下に示します:
# 複数のファイルから特定のページ範囲を結合
qpdf --empty --pages file1.pdf 1-10 file2.pdf 5-15 file3.pdf -- selective.pdf
# ページ回転を伴う結合
pdftk A=file1.pdf B=file2.pdf cat A1-10 B1-5east output merged.pdf
# 文書間に空白ページを追加して結合
qpdf --empty --pages file1.pdf blank.pdf file2.pdf -- spaced.pdf
プロのヒント:スキャンした文書を結合する場合は、結合前にすべてのファイルが同じ向きとDPIであることを確認してください。設定が一致しないと、プロフェッショナルに見えない一貫性のないページサイズが作成されます。
PDFの分割:文書を分解する
分割は、PDFを複数の小さなファイルに分割します。これは、特定のセクションを共有したり、メール用にファイルサイズを削減したり、コンパイルされた文書から章を分離したりするために重要です。
異なる分割戦略は異なる目的に役立ちます。ワークフローのニーズに合った方法を選択してください。
一般的な分割方法
| 方法 | 説明 | 使用例 | コマンドパターン |
|---|---|---|---|
| ページ範囲別 | 特定のページシーケンスを抽出 | ページ1-10 → file1.pdf、11-20 → file2.pdf | qpdf input.pdf --pages . 1-10 -- output.pdf |
| N ページごと | 等しいサイズのチャンクに分割 | 100ページの文書 → 各10ページの10ファイル | スクリプトが必要 |
| ファイルサイズ別 | サイズが制限を超えたときに分割 | メール添付用に5 MBで分割 | カスタムロジックが必要 |
| ブックマーク別 | 章の境界で分割 | 各章が別ファイルになる | pdftk input.pdf dump_data + スクリプト |
| 単一ページ | 各ページを別ファイルに | 100ページ → 100個の個別ファイル | pdftk input.pdf burst |
分割コマンド
# pdftk: 個別のページに分割
pdftk input.pdf burst output page_%04d.pdf
# qpdf: ページ範囲で分割
qpdf input.pdf --pages . 1-50 -- part1.pdf
qpdf input.pdf --pages . 51-100 -- part2.pdf
# pdftk: 特定のページで分割
pdftk input.pdf cat 1-25 output chapter1.pdf
pdftk input.pdf cat 26-50 output chapter2.pdf
ライブプレビュー付きの視覚的なページ選択には、PDF分割ツールをお試しください。範囲を選択するためにドラッグでき、抽出する内容を正確に確認できます。
ブックマークによる分割
適切なブックマーク構造を持つ文書の場合、ブックマークによる分割は論理的な文書の区分を保持します:
# ブックマーク情報を抽出
pdftk input.pdf dump_data output metadata.txt
# ブックマークを解析して適切に分割(スクリプトが必要)
# レベル1の各ブックマークが新しいファイルになる
クイックヒント:メール用に分割する場合は、10 MB未満のファイルを目指してください。ほとんどのメールサーバーは最大25 MBを受け入れますが、小さいファイルの方が送信が速く、企業のファイアウォールを通過する可能性が高くなります。
特定のページの抽出
抽出は、元のファイルを変更せずにPDFから特定のページを取り出します。これは最も一般的なPDF操作です—共有するために1ページを取り出したり、教科書から章を抽出したり、バッチから特定の請求書を分離したりします。
分割とは異なり、抽出は精度に焦点を当てています:ソースをそのままにして、必要なページを正確に取得します。
基本的な抽出
# qpdf: ページ5、10-15、20を抽出
qpdf input.pdf --pages . 5,10-15,20 -- extracted.pdf
# pdftk: ページ1-3と7を抽出
pdftk input.pdf cat 1-3 7 output extracted.pdf
# qpdf: 最後の5ページを抽出
qpdf input.pdf --pages . z-4-z -- last5.pdf
サムネイルプレビュー付きの視覚的なインターフェースには、PDFページ抽出ツールを使用してください。個別のページをクリックするか、Shiftキーを押しながらクリックして範囲を選択できます。
高度な抽出パターン
複雑な抽出シナリオでは、ページ参照構文の理解が必要です:
1-10— ページ1から10まで1,3,5— ページ1、3、5のみz— 最後のページ(qpdf構文)z-5-z— 最後の6ページr1-r10— 最初の10ページを逆順で(pdftk)evenまたはodd— すべての偶数または奇数ページ(pdftk)
# すべての奇数ページを抽出(両面スキャン用)
pdftk input.pdf cat odd output odd_pages.pdf
# 3ページごとに抽出
qpdf input.pdf --pages . 1,4,7,10,13,16,19 -- every_third.pdf
# ページを逆順で抽出
pdftk input.pdf cat end-1 output reversed.pdf
プロのヒント:大きなPDFからページを抽出する場合、元のファイルサイズは比例して減少しません。100 MBのPDFから10ページを抽出すると20 MBになる可能性があります。これは、フォントと画像が完全に埋め込まれているためです。その後、PDF圧縮を使用してファイルサイズを最適化してください。
ページの並べ替えと回転
並べ替えは、コンテンツを追加または削除せずにページの順序を変更します。回転は、スキャンやモバイル写真からの向きの問題を修正します。どちらの操作も非破壊的で、すべてのPDF機能を保持します。
ページの並べ替え
# qpdf: 文書全体を逆順に
qpdf input.pdf --pages . z-1 -- reversed.pdf
# pdftk: カスタム順序(ページ3、次に1、次に2)
pdftk input.pdf cat 3 1 2 output reordered.pdf
# pdftk: 最後のページを先頭に移動
pdftk input.pdf cat end 1-r2 output reordered.pdf
# qpdf: 2つの文書をインターリーブ(両面スキャン用の奇数/偶数)
qpdf --empty --pages odd.pdf even.pdf -- collated.pdf
ページの回転
回転は90度単位で指定されます。異なるツールは異なる構文を使用します:
# pdftk: ページ1を時計回りに90度回転
pdftk input.pdf cat 1east 2-end output rotated.pdf
# pdftk: すべてのページを180度回転
pdftk input.pdf cat 1-endsouth output flipped.pdf
# qpdf: ページ1-10を時計回りに90度回転
qpdf input.pdf --rotate=+90:1-10 -- rotated.pdf
# qpdf: 奇数ページを一方向に、偶数ページを別の方向に回転
qpdf input.pdf --rotate=+90:odd --rotate=-90:even -- rotated.pdf
回転方向:
- pdftk:
north(0°)、east(90° CW)、south(180°)、west(270° CW) - qpdf:
+90(CW)、-90(CCW)、+180または-180
クイックヒント:回転メタデータは実際のページコンテンツを変更しません—PDFリーダーに表示方法を指示するだけです。一部の古いPDFビューアは回転フラグを無視するため、向きを保証する必要がある場合は、ページコンテンツを再レンダリングするツールを使用してください。
コマンドラインツールの比較
適切なCLIツールの選択は、オペレーティングシステム、機能要件、パフォーマンスのニーズによって異なります。最も人気のあるオプションの詳細な比較を以下に示します。
ツール機能マトリックス
| ツール | ライセンス | 速度 | 機能 | 最適な用途 |
|---|---|---|---|---|
| qpdf | Apache 2.0 | 非常に高速 | 包括的、構造を保持 | プロフェッショナルワークフロー、自動化 |
| pdftk | GPL | 高速 | シンプルな構文、フォーム入力 | クイックタスク、初心者 |
| pikepdf | MPL 2.0 | 高速 | Pythonライブラリ、プログラム可能 | カスタム自動化、統合 |
| PyPDF2 | BSD | 中程度 | 純粋なPython、依存関係なし | シンプルなPythonスクリプト |
| Ghostscript | AGPL | 低速 | レンダリング、変換、圧縮 | フォーマット変換、最適化 |
インストール
# macOS
brew install qpdf pdftk-java
# Ubuntu/Debian
apt install qpdf pdftk
# Pythonツール
pip install pikepdf PyPDF2
# Windows(Chocolatey経由)
choco install qpdf pdftk
パフォーマンス比較
500ページ、50 MBのPDFでベンチマーク(結合操作):
- qpdf:1.2秒
- pdftk:1.8秒
- pikepdf:1.5秒
- PyPDF2:4.3秒
- Ghostscript:12.7秒
数百のファイルを処理するバッチ操作の場合、qpdfの速度の利点は大幅に増大します。
プロのヒント:macOSでpdftk が動作しない場合は、代わりにpdftk-javaが必要な可能性があります。元のpdftk は古いmacOSバージョン用にコンパイルされており、Apple Siliconでは動作しません。brew install pdftk-javaを使用すると、コマンドはpdftk-javaになります。
Python自動化の例
Pythonは、pikepdfやPyPDF2などのライブラリを通じて強力なPDF操作を提供します。これらの例は、ワークフローに適応できる一般的な自動化パターンを示しています。
pikepdfでの結合
import pikepdf
from pathlib import Path
def merge_pdfs(input_files, output_file):
"""すべての機能を保持して複数のPDFを結合します。"""
pdf = pikepdf.Pdf.new()
for file in input_files:
src = pikepdf.Pdf.open(file)
pdf.pages.extend(src.pages)
pdf.save(output_file)
# 使用法
files = ['report1.pdf', 'report2.pdf', 'report3.pdf']
merge_pdfs(files, 'combined_report.pdf')
ページ数による分割
import pikepdf
from pathlib import Pat