Node.jsを使ってPDFファイルを1つのPDFにマージする方法 Copy for LLMsCopy for LLMs Copy page as Markdown for LLMs
# Node.jsを使ってPDFファイルを1つのPDFにマージする方法
IronPDFを使用すると、Node.jsで複数のPDFファイルを数行のコードで単一のドキュメントにマージできます。 各ファイルを`toFile()`で結果を保存します。
Quickstart: PDFファイルをマージ*as-heading:2()*
```javascript
//: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();
```
<div class="hsg-featured-snippet">
<h3>最小限のワークフロー(5ステップ)</h3>
<ol>
<li>IronPDFをインストールします:<code>npm install ironpdf</code></li>
<li>ライブラリをインポートします:<code>const IronPdf = require('ironpdf')</code></li>
<li>各PDFファイルを<code>PdfDocument.fromFile()</code>で読み込みます</li>
<li>読み込んだドキュメントを<code>PdfDocument.merge()</code>でマージします</li>
<li><code>toFile()</code>で結果を保存します</li>
</ol>
</div>
IronPDFは、[HTMLからPDFへの変換](https://ironpdf.com/nodejs/tutorials/html-to-pdf/)、ドキュメントのアセンブリ、システムレベルのPDFツールを使用せずにPDFの変更を行うNode.js用のPDF操作ライブラリです。 ドキュメントをマージする際には、各ソースファイルからフォント、画像、埋め込みフォーム、ページの幾何学情報を保持します。
本番環境にデプロイする前に、[IronPDFライセンスキー](https://ironpdf.com/nodejs/get-started/license-keys/)を設定して、トライアルの透かしを削除し、完全な出力を有効にしてください。 オペレーティングシステム用のレンダリングエンジンを設定するには、[IronPdfEngineの構成ガイド](https://ironpdf.com/nodejs/get-started/use-ironpdfengine/)に従ってください。
<hr />
## Node.jsで複数のPDFファイルをマージする方法は?
`PdfDocument`オブジェクトの配列を受け入れ、ソースドキュメントが配列に表示されている順序で各ページを含む新しいドキュメントを返します。 この操作は非破壊的です。元のファイルオブジェクトは変更されません。
```javascript
//: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);
})();
```
`Promise.all()`は、より大きなコレクションを処理する場合に重要な並列でソースファイルを読み込みます。 `merge()`呼び出しは配列順注文でドキュメントを連結します。出力に表示したい順序でファイルを配列に配置してください。
[[t:(ファイルパスを絶対パスとして、またはNode.jsプロセスの作業ディレクトリに相対的なパスとして渡します。 `fromFile()`メソッドは、スクリプトファイル自体に対するパスを解決しません。
)]]
### コードの各部分は何をするのですか?
- **`PdfDocument.fromFile()`**: ディスクからPDFを読み取り、`PdfDocument`オブジェクトを返します。 完全なメソッドシグネチャについては、[IronPDF for Node.js APIリファレンス](https://ironpdf.com/nodejs/object-reference/api/)を参照してください。
- **`Promise.all()`**: すべてのファイル読み込み操作を同時にディスパッチし、複数文書のマージのための総読み込み時間を短縮します。 このパターンは、[マルチスレッドおよび同時実行のPDF生成](https://ironpdf.com/nodejs/examples/threading/)シナリオにも適しています。
- **`PdfDocument.merge()`**: 読み込まれたドキュメントの配列を単一の`PdfDocument`に連結し、各ソースからのすべてのフォーマッティング、画像、埋め込みコンテンツを保持します。
- **`toFile()`**: マージされたドキュメントを指定されたパスに書き込みます。 [PDF圧縮](https://ironpdf.com/nodejs/examples/pdf-compression/)と組み合わせて、必要に応じて出力ファイルサイズを削減します。
<hr />
## 各PDFから特定のページをマージするにはどうすればよいですか?
すべてのソースドキュメントからすべてのページを渡すことは常に目標とは限りません。 各入力ファイルから選択したページ範囲をマージするには、ドキュメントを`merge()`に渡す前に目的のページを抽出します。
```javascript
//: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);
```
`extractPages(startPage, endPage)`は、0から始まるページインデックスを受け入れます。 `0, 2`は最初の3ページを抽出します。 ループは、`merge()`がそれらを最終出力に連結します。
このパターンは、別々のファイルに保管されている署名ページ、付録、および表紙から契約を組み立てる際に役立ちます。 ソースごとに重要なページを正確に収集することができ、ディスク上でファイルを重複させることはありません。
[[i:(IronPDFのページインデックスはゼロベースです。 ドキュメントのページ1はインデックス0、ページ2はインデックス1、以降同様です。)]]
<hr />
## マージされたPDFにヘッダーとフッターを追加する方法
マージ後、結果ドキュメントで一貫したヘッダーとフッターを全ページに適用するために、`addHtmlFooter()`を呼び出します。 これらのメソッドはHTML文字列とオプションオブジェクトを受け入れます。
```javascript
//: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');
```
マージされたドキュメントのページ数に対してレンダリング時に`{total-pages}`のプレースホルダーが解決されます。 ヘッダーやフッターをページコンテンツから視覚的に分離するために`drawDividerLine: true`を使用します。
マージ後にヘッダーとフッターを適用することで、結合ドキュメントのすべてのページに同じ処理が施され、ソースファイルに関係なく同じ結果を得られます。 ヘッダーとフッターの完全な構成オプションについては、[HTMLヘッダーとフッターの例](https://ironpdf.com/nodejs/examples/adding-headers-and-footers-advanced/)を参照してください。
<hr />
## パスワードでマージされたPDFを保護する方法
制限を用いてパスワード保護および権限制限を適用するには、`saveAs()`をセキュリティオプションオブジェクトで呼び出します。 これにより、結合されたドキュメントへの不正アクセスを防ぎます。
```javascript
//: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');
```
ドキュメントを開くには`userPassword`が必要です; 実管理設定それ自体を制御するのは`ownerPassword`です。 他の許可フラグを無効にした状態で`allowUserPrinting: true`を設定することで、受信者は文書を印刷できますが、編集、コピー、および注釈は防止されます。 利用可能な権限フラグの完全なリストについては、[IronPDF Node.js APIリファレンス](https://ironpdf.com/nodejs/object-reference/api/)を参照してください。
既にパスワード保護されているソースPDFの場合、`fromFile()`で読み込む際に各ドキュメントの復号パスワードを提供してください。 パスワードを指定せずに暗号化されたドキュメントをマージしようとするとエラーになります。)}]
<hr />
## PDFをマージし、デジタル署名を追加する方法
PDFをマージしてすぐに結果を署名すると、すべてのソースコンテンツをカバーする単一の署名付きドキュメントが生成されます。 `merge()`の後に適用して、結合された出力にデジタル証明書を添付します。
```javascript
//: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'
);
```
`applySignature()`メソッドは、PDFのメタデータに証明書を埋め込み、リーダーが文書の完全性を確認できるようにします。 このワークフローは、契約組み立てパイプラインで複数のセクションを結合し、配布前に共署名する場合によく使用されます。 証明書ベースの署名についての完全な手順は、[デジタル署名の例](https://ironpdf.com/nodejs/examples/digitally-sign-a-pdf/)を参照してください。
[[t:(結合されたドキュメントに署名し、個々のソースファイルではなく、単一の証明書で結合された全体のドキュメントを証明するときに必要です。)]]
<hr />
## 一般的なPDFマージエラーをトラブルシュートする方法
マージ中のエラーのほとんどは、ファイルがない、メモリ不足、入力が壊れている、権限の問題の4つのカテゴリーに分類されます。 以下の表には、最も頻繁に発生する原因と各問題への対策が記載されています。
<table class="content__data-table" data-content-table>
<caption>一般的なPDFマージエラーとその解決策</caption>
<thead>
<tr><th>エラー</th><th>考えられる原因</th><th>ソリューション</th></tr>
</thead>
<tbody>
<tr><td>ファイルが見つかりません</td><td>間違ったパスまたは作業ディレクトリの不一致</td><td>絶対パスを使用するか、プロセス作業ディレクトリを確認してください</td></tr>
<tr><td>JavaScriptヒープのメモリ不足</td><td>多くの大きなPDFを同時に読み込む</td><td>Node.jsメモリを増やします:<code>node --max-old-space-size=4096 script.js</code></td></tr>
<tr><td>無効または壊れたPDF</td><td>ソースファイルが損傷しているか、有効なPDFではありません</td><td>処理前にPDFリーダーでソースファイルを検証してください</td></tr>
<tr><td>権限が拒否されました</td><td>入力に読み取りアクセスがない、または出力ディレクトリに書き込みアクセスがない</td><td>オペレーティングシステムのファイルとディレクトリの権限を確認してください</td></tr>
<tr><td>暗号化されたソースPDF</td><td>入力PDFには開くためのパスワードが必要です</td><td>パスワードを第二引数として<code>fromFile()</code>に渡します</td></tr>
</tbody>
</table>
環境固有のセットアップ問題については、[IronPDF変更履歴](https://ironpdf.com/nodejs/product-updates/changelog/)に既知の問題と修正が記載されています。 上述の表を確認した後も問題が続く場合、ライブラリからの完全なエラーメッセージを表示するために、結合呼び出しを`try-catch`ブロックで囲みます。
入力配列内のすべてのファイルパスが存在することを`fromFile()`を呼び出す前に常に検証してください。 1つのファイルが欠けていると、`Promise.all()`呼び出し全体が拒否され、結合がキャンセルされます。
Node.js自体がフライト前のパス検証のための便利なツールを提供します。 [Node.js `fs.promises.access`](https://nodejs.org/api/fs.html#fspromisesaccesspath-mode)メソッドを使用すると、ファイルをIronPDFに渡す前に読み取り可能かどうかを確認できます。 コミュニティ開発者が類似のマージエラ―シナリオをどのように処理しているかの質問については、[Node.jsでのPDFマージに関するStack Overflowスレッド](https://stackoverflow.com/questions/36766234/nodejs-merge-two-pdf-files-into-one-using-the-buffer-obtained-by-reading-them)が追加のコンテキストを提供します。
<hr />
## Node.jsでのPDFマージの次のステップは何ですか?
上記の例では、最も一般的なマージシナリオをカバーしています:基本的なファイル結合、ページ範囲の選択、ヘッダーとフッターの挿入、パスワード保護、デジタル署名。 IronPDFは、マージされたページを通じた[PDFフォームの管理](https://ironpdf.com/nodejs/examples/form-data/)、[新しいコンテンツのスタンプ](https://ironpdf.com/nodejs/examples/stamping-new-content/)、最終出力からの[ラスタライズされた画像](https://ironpdf.com/nodejs/examples/rasterize-a-pdf-to-images/)の生成もサポートします。
[30日間の無料トライアルを開始](#trial-license)して、透かしなしでのマージをテストするか、[ライセンスオプションを確認](#licensing)して導入を考慮します。
IronPDFの他の機能をご覧になりたいですか? 完全なAPIのウォークスルーと追加のガイドについては、[IronPDF for Node.jsのドキュメント](https://ironpdf.com/nodejs/docs/)を参照してください。
Ask ChatGPT about this page
Ask Gemini about this page
Ask Perplexity about this page
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();
//: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
最小限のワークフロー(5ステップ) IronPDFをインストールします:npm install ironpdf ライブラリをインポートします:const IronPdf = require('ironpdf') 各PDFファイルをPdfDocument.fromFile()で読み込みます 読み込んだドキュメントをPdfDocument.merge()でマージします toFile()で結果を保存します
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);
})();
//: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);
//: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' );
//: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' );
//: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'
);
//: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つのカテゴリーに分類されます。 以下の表には、最も頻繁に発生する原因と各問題への対策が記載されています。
環境固有のセットアップ問題については、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のドキュメント を参照してください。
よくある質問 PdfDocument.fromFile()を使用して各ファイルを読み込み、結果を配列に集め、その配列をPdfDocument.merge()に渡し、toFile()で出力を保存します。3つ以上のドキュメントをマージする際には、ファイルを並行して読み込むためにPromise.all()を使用してください。
はい。IronPDF は、各ソースドキュメントからフォント、画像、埋め込みフォーム、およびページのジオメトリを保持します。結合された出力は、入力配列内にあるソースファイルの順番で、各ページの元のレイアウトを維持します。
それぞれの読み込まれたドキュメントに対して、PdfDocument.merge()に渡す前にextractPages(startPage, endPage)を呼び出してください。ページのインデックスは0から始まるため、最初のページはインデックス0となります。返されるドキュメントには指定された範囲のみが含まれています。
はい。マージ後、結果として生じたドキュメントに対してaddHtmlHeader()およびaddHtmlFooter()を呼び出します。両メソッドとも、HTML文字列とオプションオブジェクトを受け入れます。自動ページ番号付けには{page}および{total-pages}のプレースホルダーを使用してください。
セキュリティオプションオブジェクトを指定し、userPassword、ownerPassword、およびallowUserPrintingのような許可フラグを指定してsaveAs()を呼び出します。userPasswordはドキュメントを開くために必要です。ownerPasswordは許可設定を制御します。
すべての入力ファイルパスがNode.jsプロセスの作業ディレクトリに対して正しいことを確認するか、絶対パスに切り替えてください。fs.promises.access()を使用して、PdfDocument.fromFile()を呼び出す前に各ファイルが読み取り可能であることを確認してください。
暗号化されたPDFをパスワードなしで読み込もうとすると、エラーが発生し、Promise.all()全体の呼び出しが拒否されます。結合する前に、fromFile()の第2引数としてドキュメントのパスワードを指定してください。
IronPDFは、開発中にライセンスキーがなくても動作しますが、出力ドキュメントにはトライアルの透かしが含まれます。透かしを削除して完全な機能を有効にするには、実運用環境に展開する前に有効なライセンスキーを設定してください。
The `PdfDocument.merge()` method in IronPDF concatenates loaded PDFs into a single document, preserving all formatting, images, and embedded content from each source.
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は、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。
...
詳しく読む