結論

PDFの結合は、Mac ならプレビューか Finder の「PDFを作成」、Windows なら PDFsam Basic か Python(pypdf)、Linux なら qpdf の1行で、ファイルを外に出さずにできます。機密を含まない書類なら、ブラウザで使える Adobe Acrobat のオンラインツールも選べます。

この記事でわかること

  • Windows・Mac・スマホ・Linux 別の、いちばん早い結合の手順
  • qpdf・pdfunite・pdftk・Ghostscript・pypdf で、しおり・リンク・フォームが残るかの実測
  • パスワード付き・壊れたPDFのエラー原文と、症状→原因→直し方の表

2026年10月29日更新|qpdf 11.9.0・pypdf 6.17.0 など5ツールで実行確認

PDFの結合は「どの端末で」「その書類を外に出してよいか」の2つで方法が決まります。迷ったら次の図の順にたどります。

flowchart TD
    A[PDFをまとめる] --> B{機密を含む?}
    B -->|含まない| O[オンライン可]
    B -->|含む| C{端末}
    C -->|Mac| M[プレビュー<br>Finder]
    C -->|Win等| W[PDFsam<br>qpdf<br>pypdf]
    C -->|スマホ| S[PCで結合]

やりたいことごとに、いちばん早い方法を先にまとめます。

やりたいこと いちばん早い方法 詳しい節
Mac でPDFを結合したい Finder でファイルを選んで、Control キーを押しながらクリック→クイックアクション→PDFを作成 MacでPDFを結合する
Windows でPDFを結合したい(無料) PDFsam Basic の Merge にファイルを入れる。Python があれば pypdf の数行 WindowsでPDFを結合する
スマホでPDFを結合したい 機密でなければブラウザで Acrobat のオンラインツール。機密ならPCで行う スマホでPDFを結合する
PDF結合を無料で安全にしたい 端末の中で完結する方法(プレビュー・PDFsam・qpdf・pypdf)を使う オンラインのPDF結合は安全か
コマンドで結合したい qpdf --empty --pages a.pdf b.pdf -- out.pdf コマンド1行でPDFを結合する
しおり・フォームを残したい pypdf か pdftk。qpdf は先頭のファイルのしおりだけ残る しおり・リンク・フォームは残るか
ページの順番がおかしい ファイル名を 01・02 と0埋めするか、自然順に並べ替えてから渡す ページの順番・範囲指定
パスワード付きPDFを結合したい パスワードを指定して開いてから結合し、必要なら結合後に付け直す パスワード付きPDFを結合する
結合できない・エラーが出る エラー文で「パスワード」「壊れている」「PDFではない」を見分ける うまくいかないとき

確認環境:Ubuntu 24.04.5 LTS(2 CPU・メモリ 8GB)の上で、reportlab 5.0.1 で見本のPDFを自作しました。見積書(A4・3ページ・しおり3件・3ページ目への内部リンクと外部リンクの注釈)、申込書(A4縦と横の2ページ・入力欄2つ・しおり2件)、写真(画像入り1ページ・約400KB)、10ページのPDF 100本、パスワード付き(AES-256)、途中で切れたPDF、相互参照表の壊れたPDF、PDFではないファイルです。これらを qpdf 11.9.0、pdfunite(poppler 24.02.0)、pdftk-java 3.3.3、Ghostscript 10.02.1(apt-get download した .deb を作業場所に展開して実行)、pypdf 6.17.0(Python 3.13.18)で結合し、ページ数・しおり・リンク先・入力欄・文字の取り出しを pypdf と qpdf で調べ、時間とメモリを3回ずつ測りました。Mac のプレビューと Finder は Apple サポート、Windows の Edge の PDF 機能は Microsoft Learn、Acrobat のオンラインツールは Adobe の公式ページ、PDFsam Basic は公式サイト、各ツールの書式は qpdf と pypdf の公式ドキュメントで確かめました。Windows・Mac・スマホの実機の操作は行っていません。オンラインのサービスにはファイルを上げていません(確認日 2026年10月29日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「PDFを結合する方法|Windows・Mac・スマホ別と無料ツール5種の実測」

PDFを結合する方法の選び方(端末・機密・ページ数)

この節では、自分の状況でどのPDF結合の方法を選べばよいかが分かります。

最初に決めるのは「その書類を自分の端末の外に出してよいか」です。 見積書・契約書・履歴書・健康診断の結果など、社外に出せない書類は、端末の中で結合できる方法を選びます。そのうえで、使っている端末と、ページ数やしおりの要否で絞ります。

1

Mac

標準のプレビューと Finder の「PDFを作成」で結合できる。追加のアプリは要らない。

端末の中で完結

2

Windows

Edge のPDF機能に結合は無い。PDFsam Basic(無料・オフライン)か Python の pypdf を使う。

入れるのは1つだけ

3

Linux・サーバー

qpdf の1行がいちばん速かった(1,000ページで0.17秒)。自動化は pypdf。

大量・定期の結合

4

スマホ

機密でない書類ならブラウザで Acrobat のオンラインツール。機密ならPCに移して結合する。

上げる前に中身を確認

判断表:どの方法を選ぶか

状況 選ぶ方法 理由
Mac で数ファイルをまとめる Finder の「PDFを作成」 選んだ順にページが並び、名前も自動で付く
Mac で一部のページだけ差し込む プレビューのサムネール ページ単位でドラッグして位置を決められる
Windows で機密の書類をまとめる PDFsam Basic オフラインで動き、しおり・入力欄の扱いを選べる
毎月の請求書を自動でまとめる Python(pypdf)か qpdf スクリプトにでき、ページ数の確認も入れられる
しおりと入力欄を全部残したい pypdf・pdftk・PDFsam Basic 手元の実測で両方が残ったのは pypdf と pdftk
機密でない資料をすぐまとめたい Acrobat のオンラインツール インストール不要。100ファイル・1,500ページまで
容量も小さくしたい 結合のあとに圧縮を別に行う 結合だけでは容量はほぼ「合計」のまま

MacでPDFを結合する(プレビュー・Finderのクイックアクション)

この節では、Mac の標準機能だけでPDFを結合する2つの手順が分かります(Apple サポートで確かめた範囲です)。

方法1:Finder の「PDFを作成」でまとめる(ファイル単位)

Apple サポートの「MacでファイルをPDFに結合する」に載っている方法です。ページは、ファイルを選択した順に並びます。

1

Finder でファイルを選ぶ

Dock の Finder アイコンからウインドウを開き、結合したいファイルを、並べたい順にクリックして選ぶ(デスクトップ上でも選べる)。

選んだ順=ページの順

2

Control キーを押しながらクリック

選んだファイルの上で Control キーを押しながらクリックし、「クイックアクション」→「PDFを作成」を選ぶ。

メニューの場所

3

できたPDFを確かめる

新しいPDFの名前は、最初に選んだファイルの名前をもとに自動で付く。開いてページの順番を確かめる。

名前は後から変えられる

Finder のプレビューパネルが表示されていれば、ファイルを選んでパネル下部の「PDFを作成」ボタンでも同じことができます。パネルが無いときは、メニューバーの「表示」→「プレビューを表示」で出します。

方法2:プレビューのサムネールでページ単位に差し込む

Apple サポートの「Macの『プレビュー』でPDFを結合する」の手順です。一部のページだけ別のPDFに入れたいときに向きます。

  1. 結合したいPDFをプレビューで開きます。
  2. 開いている各PDFで、メニューバーの「表示」→「サムネール」を選び、サイドバーにページを並べます。
  3. 追加したいサムネールを、一方のPDFのサイドバーからもう一方のサイドバーへドラッグします。離れたページは Command キーを押しながらクリックして選びます。
  4. 末尾にも途中にも入れられ、サムネールのドラッグで並べ替えもできます。PDF全体を足すときは、Finder からPDFのアイコンをサイドバーへドラッグします。

注意:プレビューでの変更は自動で保存されます。 元のPDFを残したいときは、先に「ファイル」→「複製」でコピーを作ってから作業します(Apple サポートにも同じ注意があります)。

WindowsでPDFを結合する(標準機能が無いときの3通り)

この節では、Windows でPDFを結合するときに選べる方法と、それぞれの向き不向きが分かります。

Microsoft Learn の「PDF reader in Microsoft Edge」に載っている Edge のPDF機能は、表示・印刷・フォームの入力・手書き・ハイライト・メモ・読み上げなどで、PDF同士を結合する機能は一覧にありません(2026年10月29日時点)。そのため、次の3つから選びます。

1PDFsam Basic(画面で操作)

公式サイトによると、オープンソース(AGPL)で Windows・macOS・Linux に対応し、オフラインで動くためファイルは外に出ない。結合ではページ範囲(1-10, 14, 25- の形)、しおりの扱い(まとめる・捨てる・ファイルごとに1件作る)、入力欄の扱い(捨てる・まとめる・名前がぶつかるものを改名してまとめる)、先頭への目次の追加を選べる。

2Python と pypdf(数行のスクリプト)

pypdf は Python だけで動くライブラリで、Windows でも同じコードで動く。python -m pip install pypdf で入れ、後の節のスクリプトを使う。定期的にまとめる作業に向く。

3Acrobat のオンラインツール(ブラウザ)

インストール不要で、Edge・Chrome などのブラウザから使える。ファイルは Adobe のサーバーで処理される。機密でない書類向け。

Acrobat のオンラインツールの手順(Adobe 公式の範囲)

  1. Adobe の「PDFを結合」のページで「ファイルを選択」を押すか、PDFをドラッグ&ドロップします。複数のファイルをまとめて選べます。
  2. 足りなければ「ファイルを挿入」のアイコンで追加し、ファイルをドラッグして順番を入れ替えます。
  3. 「結合」を押し、できたPDFをダウンロードします。

Adobe のページの「よくある質問」では、上限は最大100ファイル・合計1,500ページ・1ファイル500ページ、ファイルは「ログインして保存しない限り削除されます」と書かれています(2026年10月29日時点)。デスクトップ版の Acrobat にも結合の機能があり、Adobe ヘルプの「ファイルを単一の PDF に結合」で案内されていますが、画面の手順は確認環境で確かめられなかったため、この記事では書きません。

Python の環境を分けて入れる方法は、関連記事「Python venvの使い方|作成・有効化コマンド早見表と有効化できない時の直し方」で扱っています。

スマホ(iPhone・Android)でPDFを結合する

この節では、スマホでPDFを結合するときの選び方と注意が分かります。

Adobe の「PDFを結合」のページは、iPhone などのスマホのブラウザでも使えると案内しています。手順はPCと同じで、ファイルを選ぶ→並べ替える→「結合」→ダウンロード、です。

一方、iPhone の「ファイル」アプリや Android の標準アプリで結合する手順は、Apple・Google の公式ヘルプで確かめられませんでした(2026年10月29日時点)。確かめられない手順は書かないため、この記事では扱いません。

スマホのブラウザで結合してよい書類

公開済みのチラシ・案内・カタログ

自分の名前も番号も入っていない資料

会社の規程でクラウド利用が許されている書類

PCに移して手元で結合する書類

見積書・契約書・請求書(取引先の情報)

履歴書・住民票・保険証の写し(個人情報)

社外秘・取引先から預かった資料

オンラインのPDF結合は安全か(無料サービスと機密の判断)

この節では、無料のオンラインサービスでPDFを結合してよいかを、何で判断するかが分かります。

オンラインの結合サービスは、PDFを一度そのサービスのサーバーへ送ります。 暗号化や自動削除をうたうサービスは多いものの、「社外に出した」ことには変わりません。会社の書類なら、まず社内の決まり(外部サービスに上げてよい情報の範囲)を確かめます。

機密を含むPDFをまとめるとき

やってはいけない検索で最初に出た無料サイトに、契約書や個人情報の入ったPDFをそのまま上げる
→
代わりにプレビュー・PDFsam Basic・qpdf・pypdf など、端末の中で結合できる方法を使う

見分ける問い:「このPDFを、知らない会社にメールで送ってよいか」

オンラインサービスを使う前に見る5点

見る点 確かめる場所 例(Acrobat のオンラインツール)
運営している会社 ページ下部の会社情報 Adobe
ファイルがいつ消えるか よくある質問・プライバシーポリシー ログインして保存しない限り削除
上限(数・ページ・容量) よくある質問 100ファイル・合計1,500ページ
無料の範囲 料金ページ 一部機能はログインや有料版が必要
会社の決まりとの関係 社内の情報管理の規程 (各社で異なる)

ブラウザの拡張機能やアプリで結合するときも、処理がどこで行われるか(端末の中か、サーバーか)を説明で確かめます。分からないときは、機密の書類には使いません。

コマンド1行でPDFを結合する(qpdf・pdfunite・pdftk・Ghostscript)

この節では、Linux や Mac のターミナルでPDFを結合するコマンドと、実際の出力が分かります。

同じ3つのファイル(見積書3ページ+申込書2ページ+写真1ページ)を、4つのコマンドで結合しました。どれも6ページのPDFができ、横向きのページ(842×595pt)も横向きのまま残りました。

# qpdf:--empty は「空のPDFを土台にする」の意味。最後の -- のあとが出力先
qpdf --empty --pages a_mitsumori.pdf b_moushikomi.pdf c_shashin.pdf -- out/qpdf.pdf

# pdfunite(poppler-utils):最後の引数が出力先
pdfunite a_mitsumori.pdf b_moushikomi.pdf c_shashin.pdf out/pdfunite.pdf

# pdftk:cat で連結し、output のあとが出力先
pdftk a_mitsumori.pdf b_moushikomi.pdf c_shashin.pdf cat output out/pdftk.pdf

# Ghostscript:中身を描き直して新しいPDFを作る
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=out/gs.pdf a_mitsumori.pdf b_moushikomi.pdf c_shashin.pdf

結果はどれも終了コード 0 で、画面には何も出ませんでした。pdfunite と pdftk は、出力先を最後に書くため、引数の順を間違えると既存のPDFを上書きします。 結合の前に、出力先の名前が入力と重なっていないかを見ます。

4つのコマンドの違い

コマンド 入れ方(Ubuntu) やり方 向く用途
qpdf apt の qpdf 中身をそのまま写す 速さ・範囲指定・両面スキャンの並べ替え
pdfunite apt の poppler-utils 中身をそのまま写す 単純に並べるだけ
pdftk apt の pdftk(Java 版) 中身をそのまま写す しおり・入力欄も残したい
Ghostscript apt の ghostscript 全ページを描き直す 描き直しが目的のとき(文字に注意)

qpdf・pdfunite・pdftk はページの中身をそのまま写すため、見た目は変わりません。Ghostscript は全ページを解釈して描き直すので、後の節のとおり、フォントの扱いで結果が変わります。

PythonでPDFを結合する(pypdf)

この節では、Python の pypdf でPDFを結合する最小のコードと、順番・ページ数の確認まで入れたスクリプトが分かります。

公式ドキュメント(Merging PDF files)の基本の形は、PdfWriter に append で足していくだけです。

from pypdf import PdfWriter

writer = PdfWriter()
for pdf in ["a_mitsumori.pdf", "b_moushikomi.pdf", "c_shashin.pdf"]:
    writer.append(pdf)
writer.write("out/pypdf.pdf")
writer.close()

実行すると6ページのPDFができ、次の警告が1行出ました。

Annotation sizes differ: 1 vs. 0

これは pypdf がリンクの注釈を新しいページへつなぎ直すときの警告(pypdf の _link.py)で、手元の見本では内部リンクは正しく3ページ目を指していました。止まる種類のエラーではありません。

順番・しおり・ページ数の確認まで入れたスクリプト

実務では「1, 2, 10 の順にしたい」「どのファイルがどこから始まるか分かるようにしたい」「結合のあとでページ数を確かめたい」が欲しくなります。次のスクリプトは、ファイル名を自然順(数字を数として比べる順)に並べ、ファイルごとにしおりを1件作り、同じ中身の重複を減らし、最後にページ数を照合します。

import re, sys
from pathlib import Path
from pypdf import PdfReader, PdfWriter

def natural_key(p):
    return [int(t) if t.isdigit() else t.lower() for t in re.split(r"(\d+)", p.name)]

def main(out, inputs):
    files = sorted((Path(x) for x in inputs), key=natural_key)
    w = PdfWriter()
    expected = 0
    for f in files:
        r = PdfReader(f)
        if r.is_encrypted:
            raise SystemExit(f"パスワード付きのため止めます: {f}")
        w.append(r, outline_item=f.stem)
        expected += len(r.pages)
        print(f"追加 {f.name}: {len(r.pages)}ページ")
    w.compress_identical_objects(remove_duplicates=True, remove_unreferenced=True)
    with open(out, "wb") as fp:
        w.write(fp)
    got = len(PdfReader(out).pages)
    print(f"出力 {out}: {got}ページ(期待 {expected})")
    if got != expected:
        raise SystemExit("ページ数が合いません")

if __name__ == "__main__":
    main(sys.argv[1], sys.argv[2:])

わざと 10.pdf・2.pdf・1.pdf の順で渡して実行した結果です。

$ python3 merge_pdfs.py out/script.pdf many/10.pdf many/2.pdf many/1.pdf
追加 1.pdf: 10ページ
追加 2.pdf: 10ページ
追加 10.pdf: 10ページ
出力 out/script.pdf: 30ページ(期待 30)

できたPDFには、しおりが「1」「2」「10」の3件付きました。パスワード付きのPDFを混ぜると、パスワード付きのため止めます: enc_user.pdf と出て終了コード 1 で止まります。ファイルの一覧の取り方は関連記事「Pythonファイル一覧の取得|globとos.listdir・再帰・拡張子」で、key を使った並べ替えは関連記事「Python sorted・sortのkey指定|複数キー・降順混在のコピペ例」で扱っています。

ページを選んで結合する(pypdf)

w = PdfWriter()
w.append("a_mitsumori.pdf", pages=[2, 0])   # 3ページ目→1ページ目(0から数える)
w.append("b_moushikomi.pdf", pages=[1])     # 2ページ目だけ
w.write("out/r_pypdf.pdf")

結果は「見積書 A-3」「見積書 A-1」「申込書 B-2(横向き)」の順の3ページでした。pypdf のページ番号は0から数える点が、1から数える qpdf・pdftk と違います。

ページの順番・範囲指定・両面スキャンをそろえる

この節では、PDF結合で順番が狂う原因と、ページ範囲・逆順・両面スキャンのまとめ方が分かります。

「1, 10, 100, 11」になる罠

シェルの *.pdf は、ファイル名を文字として並べます。1.pdf〜100.pdf をそのまま渡して結合すると、2番目に入ったファイルは 10.pdf でした。

$ echo *.pdf | cut -c1-60
1.pdf 10.pdf 100.pdf 11.pdf 12.pdf 13.pdf 14.pdf 15.pdf 16.p

$ qpdf --empty --pages many/*.pdf -- out/glob.pdf
(1・11・21・31ページ目の1行目)
['ファイル 1 ページ 1', 'ファイル 10 ページ 1', 'ファイル 100 ページ 1', 'ファイル 11 ページ 1']

直し方は2つです。ファイル名を 001.pdf・002.pdf と0埋めするか、自然順に並べてから渡します。GNU の ls -v や sort -V は数字を数として並べます。

cd many
qpdf --empty --pages $(ls -v *.pdf) -- ../out/sorted.pdf

Mac の Finder の「PDFを作成」は選んだ順、Acrobat のオンラインツールは一覧の順に並びます。どの方法でも、結合のあとに最初と最後のページを開いて確かめるのが確実です。

qpdf のページ範囲の書き方

qpdf の公式ドキュメント(Running qpdf の Page Ranges)で確かめた書き方と、手元の結果です。

書き方 意味 手元の結果(3ページのPDF)
3,1 3ページ目→1ページ目 A-3、A-1
z-1 最後から先頭へ(逆順)。z は最終ページ A-3、A-2、A-1
1-z,x2 全ページから2ページ目を除く(11.7.1 から) A-1、A-3
r1 後ろから1ページ目(z と同じ) A-3
1-z:odd 選んだ並びの奇数番目 10ページのPDFで5ページ
# 見積書の3ページ目と1ページ目、申込書の2ページ目だけで1つにする
qpdf --empty --pages a_mitsumori.pdf 3,1 b_moushikomi.pdf 2 -- out/r_qpdf.pdf

# pdftk では、ファイルに A・B と名前を付けてページを指定する
pdftk A=a_mitsumori.pdf B=b_moushikomi.pdf cat A3 A1 B2 output out/r_pdftk.pdf

どちらも「A-3、A-1、B-2(横向き)」の3ページになりました。Ghostscript にも -sPageList がありますが、-sPageList=3,1 と書くと次のエラーで止まりました。並べ替えには使えません。

GPL Ghostscript 10.02.1: *** Bad PageList: Must be increasing order. ***
**** Unable to open the initial device, quitting.

両面スキャンの表面と裏面を1つにまとめる

片面ずつ読み取るスキャナーで両面の書類を読むと、表面(1・3・5ページ)と裏面(6・4・2ページの逆順)の2つのPDFになります。qpdf の --collate は、2つのファイルから1ページずつ交互に取り出します。

qpdf --collate --empty --pages omote.pdf ura.pdf z-1 -- out/ryomen.pdf
['ファイル 1 ページ 1', 'ファイル 1 ページ 2', 'ファイル 1 ページ 3',
 'ファイル 1 ページ 4', 'ファイル 1 ページ 5', 'ファイル 1 ページ 6']

裏面のファイルに z-1(逆順)を付けたことで、1〜6ページが正しい順に並びました。

しおり・リンク・フォームはPDF結合のあとに残るか(5ツールの実測)

この節では、結合したときに、しおり(目次)・ページ内リンク・入力欄・文字がどのツールで残り、どれで消えるかが分かります。

見積書(しおり3件・内部リンク)+申込書(しおり2件・入力欄2つ)+写真を結合し、pypdf と qpdf で中身を調べた結果です。

ツール しおり(全5件) 内部リンク 入力欄(2つ) 文字・その他
qpdf --empty 0件 3ページ目へ正しく飛ぶ 残った そのまま。文書のタイトルは消えた
qpdf(先頭を土台) 見積書の3件だけ 正しく飛ぶ 残った タイトル「見積書」が残った
pdfunite 0件 出力に無いページを指していた 消えた そのまま
pdftk 5件 正しく飛ぶ 残った そのまま
Ghostscript 5件 正しく飛ぶ 消えた 埋め込みの無い日本語の文字が消えた
pypdf 5件 正しく飛ぶ 残った そのまま(警告1行)

1qpdf のしおりは「土台」から

qpdf は、しおりなど文書全体の情報を「主の入力」(先頭のファイル)から取る。--empty を土台にすると0件、qpdf a.pdf --pages . b.pdf c.pdf -- out.pdf と見積書を土台にすると見積書の3件が残った。

2pdfunite のリンクは切れていた

見積書の内部リンクの行き先は、出力のページ一覧に含まれない「元のページの写し」を指していた。qpdf --check でも「reported number of objects (41) is not one plus the highest object number (64)」の警告が出た。

3Ghostscript は描き直す

埋め込まれていない日本語フォントの文字は、このマシンに対応するフォントが無く、ページから消えた。フォントを埋め込んだPDFは見た目どおりに残ったが、コピーした文字は「\x01\x02\x03 D-1…」と化けた。

Ghostscript で見積書だけを変換したときの表示です。止まらずに最後まで進み、終了コードは 0 でした。

Warning: the map file cidfmap was not found.
Processing pages 1 through 3.
Page 1
Page 2
Page 3

The following errors were encountered at least once while processing this file:
	error executing PDF token

   **** This file had errors that were repaired or ignored.

出力の1ページ目の中身は q 0.1 0 0 0.1 0 0 cm Q だけで、文字を描く命令がありませんでした。Ghostscript で結合したら、文字が残っているか、文字をコピーして検索できるかを必ず確かめます。 日本語の書類の結合だけが目的なら、中身をそのまま写す qpdf・pdftk・pypdf のほうが安全です。

同じ書類を2回結合したときの入力欄の名前

同じ申込書を2つ結合すると、入力欄の名前「shimei」「doui」がぶつかります。ツールごとに扱いが分かれました。

ツール 結合後の入力欄の名前 起きること
qpdf shimei、doui、shimei+1、doui+1 2つ目を自動で改名
pdftk 1.shimei、1.doui などの階層 名前の頭に番号が付く
pypdf(そのまま) 同じ名前の欄が2つずつ 名前で値を読むと2件にしか見えない
pypdf+add_form_topname mousikomi1.shimei、mousikomi2.shimei など ファイルごとに区別できる

pypdf の公式ドキュメントも、同じ名前の欄はデータの読み出しを妨げることがあり、追加の前に reader.add_form_topname("form1") を呼ぶとよい、と書いています。

w = PdfWriter()
for name in ["mousikomi1", "mousikomi2"]:
    r = PdfReader("b_moushikomi.pdf")
    r.add_form_topname(name)
    w.append(r)
w.write("out/bb_topname.pdf")

PDF結合の容量と時間の実測(100ファイル・1,000ページ)

この節では、結合でファイルの容量がどう変わるか、何ページまでなら何秒で終わるかが分かります。

10ページのPDFを100本(合計1,000ページ・670,266バイト)結合し、時間と最大メモリを3回ずつ測りました。表は3回の中央値です。

0.17秒qpdf で1,000ページ最大メモリ 30MB
0.78秒pypdf で1,000ページPython の起動を含む
2.13秒Ghostscript で1,000ページ全ページを描き直すため遅い
ツール 時間 最大メモリ 出力の容量 ページ数
qpdf 0.17秒 30MB 550,474バイト 1,000
pdfunite 0.17秒 19MB 676,980バイト 1,000
pdftk 1.71秒 80MB 612,592バイト 1,000
pypdf 0.78秒 52MB 600,706バイト 1,000
Ghostscript 2.13秒 36MB 315,052バイト(文字が消えた) 1,000

Ghostscript の出力が小さいのは、前の節のとおり埋め込みの無い日本語の文字が消えたためで、圧縮がよく効いたわけではありません。pdftk は Java の起動に時間がかかり、3ファイルの結合でも0.45秒かかりました。

容量は「足し算」のまま。同じ画像は重複する

3ファイル(合計414,812バイト)の結合では、qpdf 411,446、pdfunite 413,261、pdftk 412,910、pypdf 412,869バイトで、ほぼ合計のままでした。結合は圧縮ではありません。 同じ写真のPDF(401,573バイト)を2回つないだときの差は大きく出ました。

結合の仕方 出力の容量 メモ
qpdf(同じファイル名を2回) 401,339バイト 同じファイルは1回だけ読み込まれた
qpdf(中身が同じ別名のコピー) 801,792バイト 別のファイルとして2倍に
pdfunite・pdftk・pypdf 801,973〜802,218バイト 画像が2つ入る
pypdf+compress_identical_objects 401,601バイト 同じ中身を1つにまとめた

容量を本格的に小さくしたいときは、結合とは別に画像の解像度を下げる圧縮を行います。なお、Ghostscript の -dPDFSETTINGS=/screen で写真入りの見本を変換すると、437,517バイトと元より大きくなりました。雑音のような画像では縮まないことがあるため、圧縮も結果の容量を見て判断します。

パスワード付きPDFを結合する(エラー原文と手順)

この節では、パスワード付きのPDFを結合しようとしたときのエラーと、正しい手順が分かります。

開くときにパスワードが要るPDF(AES-256)を、パスワードを指定せずに結合した結果です。

ツール 表示されたエラー(原文) 終了コード
qpdf qpdf: enc_user.pdf: invalid password 2
pdfunite Command Line Error: Incorrect password のあと Could not merge damaged documents 255
pdftk Error: Invalid PDF: unknown.encryption.type.r 出力なし
Ghostscript **** This file requires a password for access. 0(出力は空のページ1枚)
pypdf FileNotDecryptedError: File has not been decrypted 1

Ghostscript だけは、エラーを出しても終了コード 0 で終わり、パスワード付きのファイルを飛ばしたPDFを作りました。 スクリプトで使うときは、終了コードだけでなくページ数も確かめます。pdftk-java 3.3.3 の unknown.encryption.type.r は、AES-256(暗号化の版 R=6)のPDFを読めなかったときの表示で、input_pw himitsu でパスワードを渡しても同じエラーでした(その前に「Using a password on the command line interface can be insecure.」の警告も出ます)。

パスワードを指定して結合する

# qpdf:ファイル名のすぐ後に --password を書く
qpdf --empty --pages enc_user.pdf --password=himitsu b_moushikomi.pdf -- out/p1.pdf

# Ghostscript
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sPDFPassword=himitsu -sOutputFile=out/p4.pdf enc_user.pdf b_moushikomi.pdf
from pypdf import PdfReader, PdfWriter
r = PdfReader("enc_user.pdf")
print(r.is_encrypted, r.decrypt("himitsu"))   # True 1(1は利用者のパスワードで開けた意味)
w = PdfWriter()
w.append(r)
w.append("b_moushikomi.pdf")
w.write("out/p5.pdf")

3つとも5ページのPDFができましたが、どれも結合後のPDFにはパスワードが付いていませんでした(pdfinfo の表示は Encrypted: no)。元がパスワードで守られていた書類なら、結合後に付け直します。

qpdf --empty --pages enc_user.pdf --password=himitsu b_moushikomi.pdf -- \
  --encrypt 新しい開くパスワード 新しい権限パスワード 256 -- out/p1enc.pdf

付け直したPDFは Encrypted: yes (print:yes copy:yes change:yes addNotes:yes algorithm:AES-256) と表示されました。パスワードは、PDFと同じメールに書かずに別の経路で伝えます。ファイルをまとめてパスワード付きで送る方法の1つとして、zip の扱いは関連記事「zip・unzipコマンドの使い方|圧縮・解凍・パスワード・文字化け」で扱っています。

編集を制限されたPDF(開くパスワードは無い)

開くパスワードは無く、変更を禁止する設定だけが付いたPDFでは、結果が分かれました。pdfunite は Unimplemented Feature: Could not merge encrypted files ('enc_owner.pdf') で止まり、pdftk は上と同じエラー、qpdf・Ghostscript・pypdf は結合でき、出力には制限が付いていませんでした。制限は作成者の意思表示です。 結合できても、制限の無い版を作って配ることになるため、作成者の了承を得てから行います。

壊れたPDF・結合できないPDFのエラー原文と直し方

この節では、「壊れている」「PDFではない」と言われて結合できないときに、エラー文から原因を見分ける方法が分かります。

よくあるエラー(原文)と原因

表示(原文) 出たツール 原因 直し方
unable to find trailer dictionary while recovering damaged file qpdf ダウンロードが途中で切れたなど、ファイルの後半が無い 元の場所から取り直す
Could not merge damaged documents pdfunite 壊れている、またはパスワードが違う qpdf で読めるか試す
Rebuild failed: trailer not found.; Original message: PDF startxref not found. pdftk ファイルの後半が無い 取り直す
Stream has ended unexpectedly pypdf 途中で切れている、またはPDFではない 取り直す・中身を確かめる
can't find PDF header/PDF header signature not found. qpdf/pdftk 拡張子だけ .pdf の別のファイル(HTML のエラーページなど) file コマンドで中身を確かめる
Catalog dictionary not located in file, unable to proceed Ghostscript ファイルの後半が無い(終了コード 0 のまま飛ばす) ページ数を確かめ、取り直す
operation succeeded with warnings; resulting file may have some problems qpdf 相互参照表だけが壊れていて、作り直して読めた 出力を開いて中身を確かめる

途中で切れたPDF(3,000バイトで切ったもの)を qpdf で結合しようとしたときの表示です。終了コードは 2 で、出力はできませんでした。

WARNING: broken_trunc.pdf: file is damaged
WARNING: broken_trunc.pdf: can't find startxref
WARNING: broken_trunc.pdf: Attempting to reconstruct cross-reference table
WARNING: broken_trunc.pdf (object 4 0, offset 3000): expected endstream
...
qpdf: broken_trunc.pdf: unable to find trailer dictionary while recovering damaged file

相互参照表だけが壊れたPDFは読み直せることがある

末尾の「どこに何があるか」の表(相互参照表)だけを壊したPDFは、qpdf が作り直して読めました。結合しても6ページそろい、終了コードは警告ありの 3 です。pdfunite・pdftk・pypdf は何も言わずに結合しました。先に qpdf で書き出し直すと、以降は警告が出なくなりました。

$ qpdf broken_xref.pdf out/fixed.pdf
WARNING: broken_xref.pdf: file is damaged
WARNING: broken_xref.pdf (offset 99999): xref not found
WARNING: broken_xref.pdf: Attempting to reconstruct cross-reference table
qpdf: operation succeeded with warnings; resulting file may have some problems

$ qpdf --check out/fixed.pdf
...
No syntax or stream encoding errors found; the file may still contain
errors that qpdf cannot detect

qpdf の終了コードは、0 がエラーも警告も無し、2 がエラーで処理されなかった、3 が警告だけ、です(公式ドキュメントの Exit Status)。警告を許して 0 にしたいときは --warning-exit-0 を付けます。

PDFが結合できない・うまくいかないとき(症状→原因→直し方)

この節では、PDF結合でよく起きる症状から、原因と直し方を引けます。

症状 原因 直し方
ページの順番がおかしい(1, 10, 100, 11…) ファイル名を文字の順で並べている 0埋めの名前にする・ls -v・自然順のスクリプト
Mac で順番が思ったとおりにならない Finder の「PDFを作成」は選んだ順 並べたい順にクリックして選び直す
結合後に目次(しおり)が消えた qpdf --empty・pdfunite はしおりを引き継がなかった pypdf・pdftk・PDFsam Basic で結合する
入力欄が消えた・普通の文字になった pdfunite・Ghostscript は入力欄を残さなかった qpdf・pdftk・pypdf を使う
2つ目の書類の入力欄に入れると1つ目も変わる 入力欄の名前が同じ pypdf の add_form_topname・PDFsam の改名
日本語の文字が消えた・コピーすると化ける Ghostscript が描き直し、フォントが無い・対応表が失われた 中身を写す方式(qpdf・pypdf など)で結合し直す
「パスワード」と言われる 開くパスワード付きのPDF パスワードを指定して結合し、必要なら付け直す
結合後にパスワードが外れた 結合ツールは新しいPDFを暗号化せずに書き出した qpdf の --encrypt などで付け直す
容量が大きすぎてメールで送れない 結合は容量を足し算するだけ 圧縮を別に行う・共有のリンクで渡す
オンラインツールで「上限」と出る ファイル数・ページ数の上限(Acrobat は100ファイル・1,500ページ) 分けて結合する・手元の方法に切り替える

結合のあとに確かめる4点

  • 1ページ数が「元の合計」と同じかqpdf --show-npages out.pdf で数だけ出る。1,000ページの結合では 1000 と出た
  • 2終了コードが 0 か(ただし過信しない)Ghostscript はファイルを飛ばしても 0 だった。1と合わせて確かめる
  • 3最初・つなぎ目・最後のページを開く順番の狂いと、横向きのページの向きを目で見る
  • 4文字を検索できるか・入力欄が動くか描き直すツールを使ったときは特に。パスワードの要否も見る

シェルスクリプトで終了コードを見る書き方は、関連記事「シェルスクリプトの終了ステータス $?とexitコード一覧・判定方法」で扱っています。

毎回の結合を自動にする(Linux)

ここでは、決まったフォルダーのPDFを毎回同じ順で結合し、失敗に気づける形にする方法が分かります。

請求書や日報など、毎月同じ形でまとめる作業は、手順を固定すると間違いが減ります。手元で使った形は次の4段です。

  1. 1入力を決めるフォルダーと名前の付け方(2026-10_01.pdf のように0埋め)をそろえる
  2. 2並べてから渡すls -v か自然順のスクリプトで順番を固定する
  3. 3結合する速さ優先なら qpdf、しおり・入力欄を残すなら pypdf
  4. 4数を照合して止めるページ数が合わなければ終了コード 1 で止め、元のファイルは消さない
#!/usr/bin/env bash
set -euo pipefail
in_dir=./invoices
out=./merged.pdf

mapfile -t files < <(ls -v "$in_dir"/*.pdf)
expected=0
for f in "${files[@]}"; do
  n=$(qpdf --show-npages "$f")
  expected=$((expected + n))
done

qpdf --empty --pages "${files[@]}" -- "$out"
got=$(qpdf --show-npages "$out")
echo "files=${#files[@]} expected=$expected got=$got"
[ "$got" -eq "$expected" ] || { echo "ページ数が合いません" >&2; exit 1; }

パスワード付きや壊れたファイルが混ざると、qpdf --show-npages の段階で qpdf が終了コード 2 を返し、set -e によってスクリプトがそこで止まります。結合後のファイルを人に渡す前に止められるのが、この形の利点です。

よくある質問

Q. PDFを無料で結合する方法はありますか? A. あります。Mac は標準のプレビューと Finder の「PDFを作成」、Windows・Mac・Linux はオープンソースの PDFsam Basic、コマンドなら qpdf・pdfunite・pdftk、Python なら pypdf が無料です。機密でない書類なら Acrobat のオンラインツールも無料で使えます。

Q. Windows 11 の標準機能だけでPDFを結合できますか? A. Microsoft Learn に載っている Edge のPDF機能(表示・印刷・入力・手書き・ハイライトなど)に、結合は含まれていません(2026年10月29日時点)。PDFsam Basic、Python の pypdf、ブラウザで使うオンラインツールのどれかを使います。

Q. オンラインのPDF結合サイトは安全ですか? A. 運営会社・ファイルの削除の時期・上限を確かめたうえで、機密でない書類に使うのが目安です。契約書や個人情報を含むPDFは、端末の中で結合できる方法を選びます。会社の書類は社内の決まりに従います。

Q. 結合したらしおり(目次)が消えました。 A. 手元の実測では、qpdf を --empty で使ったときと pdfunite で、しおりが0件になりました。pypdf と pdftk は5件とも残りました。qpdf でも先頭のファイルを土台にすると、そのファイルのしおりは残ります。

Q. ページの順番を入れ替えたり、一部のページだけ結合できますか? A. できます。qpdf は --pages a.pdf 3,1 b.pdf 2 --、pdftk は A=a.pdf B=b.pdf cat A3 A1 B2、pypdf は append(..., pages=[2, 0])(0から数える)です。Mac はプレビューのサムネールをドラッグします。

Q. 結合するとファイルの容量は小さくなりますか? A. なりません。手元の3ファイルの結合では、出力は元の合計とほぼ同じでした。同じ画像を含むPDFを重ねると画像が2つ入るため、pypdf の compress_identical_objects で重複をまとめると、約802KBが約402KBになりました。

Q. パスワード付きのPDFを結合すると、パスワードはどうなりますか? A. パスワードを指定して開けば結合できますが、qpdf・Ghostscript・pypdf のどれも、結合後のPDFにはパスワードが付いていませんでした。必要なら qpdf の --encrypt などで付け直します。

Q. Excel や Word のファイルとPDFを1つにまとめられますか? A. 先にそれぞれをPDFにしてから結合するのが確実です。Adobe ヘルプでは、デスクトップ版の Acrobat が PDF・Word・Excel・PowerPoint などのファイルを1つのPDFに結合できると案内されています。

Q. 何ページまで結合できますか? A. 手元の qpdf では、1,000ページ(100ファイル)の結合が0.17秒・最大メモリ30MBで終わりました。Acrobat のオンラインツールは、最大100ファイル・合計1,500ページ・1ファイル500ページまでです(2026年10月29日時点)。

Q. 結合したPDFを、また分けることはできますか? A. できます。qpdf の --pages で範囲を指定して取り出すか、--split-pages で決まったページ数ごとに別のファイルに書き出します。PDFsam Basic にも分割の機能があります。

まとめ

  • PDFの結合は、まず「外に出してよい書類か」で決める。機密なら端末の中で結合できる方法(Mac のプレビュー・Finder、PDFsam Basic、qpdf、pypdf)を選ぶ。
  • Mac は Finder で選んで「クイックアクション」→「PDFを作成」。ページは選んだ順に並ぶ。Windows の Edge には結合の機能が無い。
  • 手元の実測では、しおり・入力欄の両方が残ったのは pypdf と pdftk。qpdf --empty と pdfunite はしおりが0件、Ghostscript は埋め込みの無い日本語の文字が消えた。
  • 順番の狂いは「1, 10, 100, 11」の並びが原因になりやすい。0埋めの名前か自然順で並べ、結合後にページ数を照合する。
  • パスワード付きのPDFは、指定して開けば結合できるが、結合後にはパスワードが付いていない。Ghostscript は失敗しても終了コード 0 のことがあるため、ページ数も確かめる。

参考・出典

確認日はいずれも 2026年10月29日です。

  • Apple サポート「MacでファイルをPDFに結合する」:https://support.apple.com/ja-jp/guide/mac-help/mchl21ac2368/mac
  • Apple サポート「Macの『プレビュー』でPDFを結合する」:https://support.apple.com/ja-jp/guide/preview/prvw43696/mac
  • Apple サポート「MacのFinderでクイックアクションを実行する」:https://support.apple.com/ja-jp/guide/mac-help/mchl97ff9142/mac
  • Microsoft Learn「PDF reader in Microsoft Edge」:https://learn.microsoft.com/deployedge/microsoft-edge-pdf
  • Adobe「PDFを結合(複数のPDFをまとめる)」:https://www.adobe.com/jp/acrobat/online/merge-pdf.html
  • Adobe ヘルプ「ファイルを単一の PDF に結合」:https://helpx.adobe.com/jp/acrobat/desktop/edit-documents/combine-files/combine-files.html
  • PDFsam「PDFsam Basic」:https://pdfsam.org/pdfsam-basic/
  • qpdf「Running qpdf」(Page Ranges・Exit Status):https://qpdf.readthedocs.io/en/stable/cli.html
  • qpdf「Downloading qpdf」:https://qpdf.readthedocs.io/en/stable/download.html
  • pypdf「Merging PDF files」:https://pypdf.readthedocs.io/en/stable/user/merging-pdfs.html

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「PDFを結合する方法|Windows・Mac・スマホ別と無料ツール5種の実測」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

成長のヒミツ、 ぜんぶ丸わかり