• トップ
  • ブログ一覧
  • PDFを分割、結合しよう
  • PDFを分割、結合しよう

    はじめに

    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アプリケーションを用意すると便利

    皆様の業務や日常生活にお役立ていただければ幸いです。

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    キムくん(エンジニア)
    キムくん(エンジニア)
    Show more...

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background