IRONSOFTWAREHOME

Node.jsを使ってPDFファイルを1つのPDFにマージする方法

Curtis Chau
Curtis Chau
Updated: 2026年5月9日

IronPDFを使用すると、Node.jsで複数のPDFファイルを数行のコードで単一のドキュメントにマージできます。 各ファイルをtoFile()で結果を保存します。

Quickstart: PDFファイルをマージ

//:path=/static-assets/pdf/content-code-examples/how-to/nodejs-merge-pdf/quickstart-merge.js
// Install: npm install ironpdf
const IronPdf = require('ironpdf');

async function quickMerge() {
  const docs = await Promise.all([
    IronPdf.PdfDocument.fromFile('doc1.pdf'),
    IronPdf.PdfDocument.fromFile('doc2.pdf'),
    IronPdf.PdfDocument.fromFile('doc3.pdf'),
  ]);
  const merged = await IronPdf.PdfDocument.merge(docs);
  await merged.toFile('merged-output.pdf');
}

quickMerge();
JavaScript

IronPDFは、HTMLからPDFへの変換、ドキュメントのアセンブリ、システムレベルのPDFツールを使用せずにPDFの変更を行うNode.js用のPDF操作ライブラリです。 ドキュメントをマージする際には、各ソースファイルからフォント、画像、埋め込みフォーム、ページの幾何学情報を保持します。

本番環境にデプロイする前に、IronPDFライセンスキーを設定して、トライアルの透かしを削除し、完全な出力を有効にしてください。 オペレーティングシステム用のレンダリングエンジンを設定するには、IronPdfEngineの構成ガイドに従ってください。


Node.jsで複数のPDFファイルをマージする方法は?

PdfDocumentオブジェクトの配列を受け入れ、ソースドキュメントが配列に表示されている順序で各ページを含む新しいドキュメントを返します。 この操作は非破壊的です。元のファイルオブジェクトは変更されません。

//:path=/static-assets/pdf/content-code-examples/how-to/nodejs-merge-pdf/merge-pdfs.js
const IronPdf = require('ironpdf');

async function mergePdfs(outputFilePath, inputFiles) {
  // Load all source documents in parallel
  const pdfDocs = await Promise.all(
    inputFiles.map(file => IronPdf.PdfDocument.fromFile(file))
  );

  // Combine into one document, preserving page order
  const mergedPdf = await IronPdf.PdfDocument.merge(pdfDocs);

  // Write the result to disk
  await mergedPdf.toFile(outputFilePath);
  console.log(`Merged PDF saved to ${outputFilePath}`);
}

(async () => {
  const inputFiles = ['report-jan.pdf', 'report-feb.pdf', 'report-mar.pdf'];
  await mergePdfs('quarterly-report.pdf', inputFiles);
})();
JavaScript

Promise.all()は、より大きなコレクションを処理する場合に重要な並列でソースファイルを読み込みます。 merge()呼び出しは配列順注文でドキュメントを連結します。出力に表示したい順序でファイルを配列に配置してください。

ヒント: ファイルパスを絶対パスとして、またはNode.jsプロセスの作業ディレクトリに相対的なパスとして渡します。 fromFile()メソッドは、スクリプトファイル自体に対するパスを解決しません。

コードの各部分は何をするのですか?

  • PdfDocument.fromFile(): ディスクからPDFを読み取り、PdfDocumentオブジェクトを返します。 完全なメソッドシグネチャについては、IronPDF for Node.js APIリファレンスを参照してください。
  • Promise.all(): すべてのファイル読み込み操作を同時にディスパッチし、複数文書のマージのための総読み込み時間を短縮します。 このパターンは、マルチスレッドおよび同時実行のPDF生成シナリオにも適しています。
  • PdfDocument.merge(): 読み込まれたドキュメントの配列を単一のPdfDocumentに連結し、各ソースからのすべてのフォーマッティング、画像、埋め込みコンテンツを保持します。
  • toFile(): マージされたドキュメントを指定されたパスに書き込みます。 PDF圧縮と組み合わせて、必要に応じて出力ファイルサイズを削減します。

各PDFから特定のページをマージするにはどうすればよいですか?

すべてのソースドキュメントからすべてのページを渡すことは常に目標とは限りません。 各入力ファイルから選択したページ範囲をマージするには、ドキュメントをmerge()に渡す前に目的のページを抽出します。

//:path=/static-assets/pdf/content-code-examples/how-to/nodejs-merge-pdf/merge-specific-pages.js
const IronPdf = require('ironpdf');

// Each entry specifies a file and the range of pages to include (zero-indexed)
const pageRanges = [
  { file: 'contract.pdf',  startPage: 0, endPage: 2 },
  { file: 'appendix.pdf',  startPage: 0, endPage: 0 },
  { file: 'signature.pdf', startPage: 0, endPage: 0 },
];

async function mergeSpecificPages(outputFile, ranges) {
  const pdfsToMerge = [];

  for (const range of ranges) {
    const pdf = await IronPdf.PdfDocument.fromFile(range.file);
    // extractPages returns a new PdfDocument with only the specified page range
    const pages = pdf.extractPages(range.startPage, range.endPage);
    pdfsToMerge.push(pages);
  }

  const merged = await IronPdf.PdfDocument.merge(pdfsToMerge);
  await merged.toFile(outputFile);
}

mergeSpecificPages('assembled-contract.pdf', pageRanges);
JavaScript

extractPages(startPage, endPage)は、0から始まるページインデックスを受け入れます。 0, 2は最初の3ページを抽出します。 ループは、merge()がそれらを最終出力に連結します。

このパターンは、別々のファイルに保管されている署名ページ、付録、および表紙から契約を組み立てる際に役立ちます。 ソースごとに重要なページを正確に収集することができ、ディスク上でファイルを重複させることはありません。

ご注意: IronPDFのページインデックスはゼロベースです。 ドキュメントのページ1はインデックス0、ページ2はインデックス1、以降同様です。

マージされたPDFにヘッダーとフッターを追加する方法

マージ後、結果ドキュメントで一貫したヘッダーとフッターを全ページに適用するために、addHtmlFooter()を呼び出します。 これらのメソッドはHTML文字列とオプションオブジェクトを受け入れます。

//:path=/static-assets/pdf/content-code-examples/how-to/nodejs-merge-pdf/merge-with-headers-footers.js
const IronPdf = require('ironpdf');

async function mergeWithHeadersFooters(inputFiles, outputFile) {
  const docs = await Promise.all(
    inputFiles.map(f => IronPdf.PdfDocument.fromFile(f))
  );
  const mergedPdf = await IronPdf.PdfDocument.merge(docs);

  // Apply a styled header to every page
  await mergedPdf.addHtmlHeader('<h3 style="color:#333;">Quarterly Report</h3>', {
    height: 25,
    drawDividerLine: true,
  });

  // Apply a page-numbering footer
  await mergedPdf.addHtmlFooter('<p style="font-size:10px;">Page {page} of {total-pages}</p>', {
    height: 20,
    drawDividerLine: true,
  });

  await mergedPdf.toFile(outputFile);
}

mergeWithHeadersFooters(['q1.pdf', 'q2.pdf', 'q3.pdf'], 'annual-report.pdf');
JavaScript

マージされたドキュメントのページ数に対してレンダリング時に{total-pages}のプレースホルダーが解決されます。 ヘッダーやフッターをページコンテンツから視覚的に分離するためにdrawDividerLine: trueを使用します。

マージ後にヘッダーとフッターを適用することで、結合ドキュメントのすべてのページに同じ処理が施され、ソースファイルに関係なく同じ結果を得られます。 ヘッダーとフッターの完全な構成オプションについては、HTMLヘッダーとフッターの例を参照してください。


パスワードでマージされたPDFを保護する方法

制限を用いてパスワード保護および権限制限を適用するには、saveAs()をセキュリティオプションオブジェクトで呼び出します。 これにより、結合されたドキュメントへの不正アクセスを防ぎます。

//:path=/static-assets/pdf/content-code-examples/how-to/nodejs-merge-pdf/merge-with-security.js
const IronPdf = require('ironpdf');

async function mergeWithSecurity(inputFiles, outputFile) {
  const docs = await Promise.all(
    inputFiles.map(f => IronPdf.PdfDocument.fromFile(f))
  );
  const mergedPdf = await IronPdf.PdfDocument.merge(docs);

  // Restrict the merged document to print-only access
  await mergedPdf.saveAs(outputFile, {
    userPassword: 'viewerpass',
    ownerPassword: 'adminpass',
    allowUserAnnotations: false,
    allowUserCopyPasteContent: false,
    allowUserFormData: false,
    allowUserPrinting: true,
  });
}

mergeWithSecurity(['invoice-1.pdf', 'invoice-2.pdf'], 'secured-invoices.pdf');
JavaScript

ドキュメントを開くにはuserPasswordが必要です; 実管理設定それ自体を制御するのはownerPasswordです。 他の許可フラグを無効にした状態でallowUserPrinting: trueを設定することで、受信者は文書を印刷できますが、編集、コピー、および注釈は防止されます。 利用可能な権限フラグの完全なリストについては、IronPDF Node.js APIリファレンスを参照してください。

既にパスワード保護されているソースPDFの場合、fromFile()で読み込む際に各ドキュメントの復号パスワードを提供してください。 パスワードを指定せずに暗号化されたドキュメントをマージしようとするとエラーになります。)}]


PDFをマージし、デジタル署名を追加する方法

PDFをマージしてすぐに結果を署名すると、すべてのソースコンテンツをカバーする単一の署名付きドキュメントが生成されます。 merge()の後に適用して、結合された出力にデジタル証明書を添付します。

//:path=/static-assets/pdf/content-code-examples/how-to/nodejs-merge-pdf/merge-with-signature.js
const IronPdf = require('ironpdf');

async function mergeAndSign(inputFiles, outputFile, pfxPath, pfxPassword) {
  const docs = await Promise.all(
    inputFiles.map(f => IronPdf.PdfDocument.fromFile(f))
  );
  const mergedPdf = await IronPdf.PdfDocument.merge(docs);

  // Attach a digital signature using a PFX certificate
  await mergedPdf.applySignature(pfxPath, pfxPassword);
  await mergedPdf.toFile(outputFile);
}

mergeAndSign(
  ['section-a.pdf', 'section-b.pdf'],
  'signed-report.pdf',
  'certificate.pfx',
  'certpass'
);
JavaScript

applySignature()メソッドは、PDFのメタデータに証明書を埋め込み、リーダーが文書の完全性を確認できるようにします。 このワークフローは、契約組み立てパイプラインで複数のセクションを結合し、配布前に共署名する場合によく使用されます。 証明書ベースの署名についての完全な手順は、デジタル署名の例を参照してください。

ヒント: 結合されたドキュメントに署名し、個々のソースファイルではなく、単一の証明書で結合された全体のドキュメントを証明するときに必要です。

一般的なPDFマージエラーをトラブルシュートする方法

マージ中のエラーのほとんどは、ファイルがない、メモリ不足、入力が壊れている、権限の問題の4つのカテゴリーに分類されます。 以下の表には、最も頻繁に発生する原因と各問題への対策が記載されています。

一般的なPDFマージエラーとその解決策
エラー考えられる原因ソリューション
ファイルが見つかりません間違ったパスまたは作業ディレクトリの不一致絶対パスを使用するか、プロセス作業ディレクトリを確認してください
JavaScriptヒープのメモリ不足多くの大きなPDFを同時に読み込むNode.jsメモリを増やします:node --max-old-space-size=4096 script.js
無効または壊れたPDFソースファイルが損傷しているか、有効なPDFではありません処理前にPDFリーダーでソースファイルを検証してください
権限が拒否されました入力に読み取りアクセスがない、または出力ディレクトリに書き込みアクセスがないオペレーティングシステムのファイルとディレクトリの権限を確認してください
暗号化されたソースPDF入力PDFには開くためのパスワードが必要ですパスワードを第二引数としてfromFile()に渡します

環境固有のセットアップ問題については、IronPDF変更履歴に既知の問題と修正が記載されています。 上述の表を確認した後も問題が続く場合、ライブラリからの完全なエラーメッセージを表示するために、結合呼び出しをtry-catchブロックで囲みます。

入力配列内のすべてのファイルパスが存在することをfromFile()を呼び出す前に常に検証してください。 1つのファイルが欠けていると、Promise.all()呼び出し全体が拒否され、結合がキャンセルされます。

Node.js自体がフライト前のパス検証のための便利なツールを提供します。 Node.js fs.promises.accessメソッドを使用すると、ファイルをIronPDFに渡す前に読み取り可能かどうかを確認できます。 コミュニティ開発者が類似のマージエラ―シナリオをどのように処理しているかの質問については、Node.jsでのPDFマージに関するStack Overflowスレッドが追加のコンテキストを提供します。


Node.jsでのPDFマージの次のステップは何ですか?

上記の例では、最も一般的なマージシナリオをカバーしています:基本的なファイル結合、ページ範囲の選択、ヘッダーとフッターの挿入、パスワード保護、デジタル署名。 IronPDFは、マージされたページを通じたPDFフォームの管理、新しいコンテンツのスタンプ、最終出力からのラスタライズされた画像の生成もサポートします。

30日間の無料トライアルを開始して、透かしなしでのマージをテストするか、ライセンスオプションを確認して導入を考慮します。

IronPDFの他の機能をご覧になりたいですか? 完全なAPIのウォークスルーと追加のガイドについては、IronPDF for Node.jsのドキュメントを参照してください。

よくある質問

Node.jsで複数のPDFファイルを1つに結合するにはどうすればいいですか?

PdfDocument.fromFile()を使用して各ファイルを読み込み、結果を配列に集め、その配列をPdfDocument.merge()に渡し、toFile()で出力を保存します。3つ以上のドキュメントをマージする際には、ファイルを並行して読み込むためにPromise.all()を使用してください。

IronPDF は PDF を結合するときに書式を保持しますか?

はい。IronPDF は、各ソースドキュメントからフォント、画像、埋め込みフォーム、およびページのジオメトリを保持します。結合された出力は、入力配列内にあるソースファイルの順番で、各ページの元のレイアウトを維持します。

各PDFから特定のページのみをマージするにはどうすればよいですか?

それぞれの読み込まれたドキュメントに対して、PdfDocument.merge()に渡す前にextractPages(startPage, endPage)を呼び出してください。ページのインデックスは0から始まるため、最初のページはインデックス0となります。返されるドキュメントには指定された範囲のみが含まれています。

結合されたPDFにヘッダーやフッターを追加できますか?

はい。マージ後、結果として生じたドキュメントに対してaddHtmlHeader()およびaddHtmlFooter()を呼び出します。両メソッドとも、HTML文字列とオプションオブジェクトを受け入れます。自動ページ番号付けには{page}および{total-pages}のプレースホルダーを使用してください。

Node.jsで結合したPDFにパスワードを設定するにはどうすればいいですか?

セキュリティオプションオブジェクトを指定し、userPassword、ownerPassword、およびallowUserPrintingのような許可フラグを指定してsaveAs()を呼び出します。userPasswordはドキュメントを開くために必要です。ownerPasswordは許可設定を制御します。

ファイルが見つからないエラーでマージに失敗した場合、どうすればよいですか。

すべての入力ファイルパスがNode.jsプロセスの作業ディレクトリに対して正しいことを確認するか、絶対パスに切り替えてください。fs.promises.access()を使用して、PdfDocument.fromFile()を呼び出す前に各ファイルが読み取り可能であることを確認してください。

ソースPDFの1つが暗号化されている場合はどうなりますか?

暗号化されたPDFをパスワードなしで読み込もうとすると、エラーが発生し、Promise.all()全体の呼び出しが拒否されます。結合する前に、fromFile()の第2引数としてドキュメントのパスワードを指定してください。

IronPDFでPDFをマージするためにライセンスキーは必要ですか?

IronPDFは、開発中にライセンスキーがなくても動作しますが、出力ドキュメントにはトライアルの透かしが含まれます。透かしを削除して完全な機能を有効にするには、実運用環境に展開する前に有効なライセンスキーを設定してください。

How can I combine PDFs and ensure they preserve all formatting and content with IronPDF?

The `PdfDocument.merge()` method in IronPDF concatenates loaded PDFs into a single document, preserving all formatting, images, and embedded content from each source.

What additional features does IronPDF offer for working with PDFs in Node.js?

IronPDF supports HTML to PDF conversion, PDF modification, digital signatures, password protection, and more, providing a comprehensive toolkit for handling PDF documents in Node.js.

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

...
詳しく読む

準備はできましたか?

バージョン:2026.10リリースされたばかり

あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。
Node.js モジュールダウンロード for PDF
npmでインストール

バージョン: 2026.10

  1. ダウンロードしてNode.js 12+をインストール。
  2. 上記のコマンドをターミナルで実行します。

ライセンスは$999から

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF for Node.js
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
あなたの詳細は常に守秘されます。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
世界中の数百万人のエンジニアから信頼されています。
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。
Node.js モジュールダウンロード for PDF
npmでインストール

バージョン: 2026.10

  1. ダウンロードしてNode.js 12+をインストール。
  2. 上記のコマンドをターミナルで実行します。

ライセンスは$999から