
PDFを分割、結合しよう

IT技術
はじめに
PDFの一部のページのみを分割したい時や、複数のPDFファイルを結合したい時がしばしば訪れるものです。
PDFを分割
WebブラウザやPDF Readerで分割する
FirefoxなどのWebブラウザやPDF Readerで対象のPDFファイルを開き、プリントメニューからSave to PDF
などに出力先を設定し、必要なページを指定して出力することで分割できます。
pdftkを利用して分割する
CLIで操作したい場合、多くのOS/Distributionで利用できるpdftk
もしくはpdftk-java
が便利です。
インストール方法
Ubuntu/Debian の場合
1sudo apt install pdftk
Fedora の場合
1sudo dnf install pdftk
分割コマンドの例
input.pdf
ファイルのうち以下のページのみを分割したい場合:
- 1~4ページ目で奇数ページのみ
- 5ページ目
- 8~10ページ目
1pdftk input.pdf cat 1-4odd 5 8-10 output split.pdf
PDFを結合
pdftkを利用して結合する
分割と同じく、pdftk
を利用して複数のPDFを結合できます。
1pdftk input1.pdf input2.pdf input3.pdf cat output merged.pdf
Webアプリケーションで結合する
モバイル環境などPDF操作ツールのインストールが容易でない環境や、自分の端末でないためインストールが難しい場合があります。そんな時はブラウザ上で動作するWebアプリケーションを用意しておくと便利です。
以下では、クライアント側でPDFファイルを結合する静的Webアプリケーションの作成方法を紹介します。このアプリをGitHub Pages、Cloudflare Pagesなどの無料のホスティングサービスにデプロイすることで、インストール不要で利用できるようになります。
pdf-libを利用してPDFファイルを結合する
JavaScript/TypeScriptのnpmパッケージpdf-libを用いて、ブラウザ上でPDFファイルを結合できます。
1import { PDFDocument } from "pdf-lib";
2
3const mergePdfs = async (files: File[]) => {
4 // 新しいPDFドキュメントを作成
5 const mergedPdf = await PDFDocument.create();
6
7 // 各PDFファイルを処理
8 for (const file of files) {
9 const fileBytes = await file.arrayBuffer();
10 const pdfDoc = await PDFDocument.load(fileBytes);
11
12 // 現在のPDFからすべてのページをコピー
13 const copiedPages = await mergedPdf.copyPages(
14 pdfDoc,
15 pdfDoc.getPageIndices()
16 );
17
18 // コピーした各ページをマージ先のPDFに追加
19 copiedPages.forEach((page) => mergedPdf.addPage(page));
20 }
21
22 // マージしたPDFをBlobとして返す
23 const mergedPdfBytes = await mergedPdf.save();
24 return new Blob([mergedPdfBytes], { type: "application/pdf" });
25};
このコードに好みのUIを組み合わせて、PDFファイルを受け取り、Blob
を作成、<a>タグでダウンロードさせてあげると静的Webアプリの完成です。
以下に実装例を公開しておりますので、参考にしてください。
https://github.com/hynjnk/pdf-merger
まとめ
本記事では、PDFファイルを分割・結合する方法について紹介しました。
- 分割
- Webブラウザなどのプリント機能で分割できる
pdftk
を利用して分割する
- 結合
pdftk
を利用して結合する- PDF操作ツールのインストールが難しい場合、Webアプリケーションを用意すると便利
皆様の業務や日常生活にお役立ていただければ幸いです。
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ

Webアプリケーションの開発をしています。