Mit Node.js PDF-Dateien zu einer einzigen PDF-Datei zusammenführen
IronPDF ermöglicht es Ihnen, mehrere PDF-Dateien in einem einzigen Dokument in Node.js mit nur wenigen Codezeilen zu kombinieren. Laden Sie jede Datei mit PdfDocument.fromFile(), übergeben Sie das Array an PdfDocument.merge(), und speichern Sie das Ergebnis mit toFile().
Kurzanleitung: PDF-Dateien zusammenführen
//: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();
Minimaler Arbeitsablauf (5 Schritte)
- Installieren Sie IronPDF:
npm install ironpdf - Importieren Sie die Bibliothek:
const IronPdf = require('ironpdf') - Laden Sie jede PDF-Datei mit
PdfDocument.fromFile() - Fügen Sie die geladenen Dokumente mit
PdfDocument.merge()zusammen - Speichern Sie das Ergebnis mit
toFile()
IronPDF ist eine PDF-Bearbeitungsbibliothek für Node.js, die HTML zu PDF-Umwandlung, Dokumentzusammenstellung und PDF-Änderung ohne systemweite PDF-Tools behandelt. Beim Zusammenführen von Dokumenten bewahrt es Schriftarten, Bilder, eingebettete Formulare und Seitengeometrie aus jeder Quelldatei.
Vor der Bereitstellung in der Produktion, konfigurieren Sie Ihren IronPDF-Lizenzschlüssel, um das Testwasserzeichen zu entfernen und vollständige Ausgaben zu aktivieren. Um die Rendering-Engine für Ihr Betriebssystem einzurichten, befolgen Sie den IronPdfEngine-Konfigurationsleitfaden.
Wie kann ich mehrere PDF-Dateien in Node.js zusammenführen?
PdfDocument.merge() akzeptiert ein Array von PdfDocument Objekten und gibt ein neues Dokument zurück, das jede Seite in der Reihenfolge enthält, wie sie im Array der Quelldokumente erscheinen. Der Vorgang ist nicht destruktiv; die ursprünglichen Dateiobjekte werden nicht geändert.
//: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);
})();
Promise.all() lädt die Quelldateien parallel statt nacheinander, was bei der Verarbeitung größerer Sammlungen von Bedeutung ist. Der merge() Aufruf verknüpft die Dokumente in der Array-Reihenfolge, daher platzieren Sie die Dateien in der gewünschten Ausgabe-Reihenfolge im Array.
fromFile() Methode löst keine Pfade relativ zur Skriptdatei auf.
Was tut jeder Teil des Codes?
PdfDocument.fromFile(): Liest eine PDF vom Laufwerk und gibt einPdfDocumentObjekt zurück. Für vollständige Methodensignaturen siehe die IronPDF for Node.js API Referenz.Promise.all(): Führt alle Datei-Ladeoperationen gleichzeitig aus, um die Gesamtladezeit bei Multi-Dokument-Merges zu reduzieren. Dieses Muster eignet sich auch für mehrere Threads und gleichzeitige PDF-Erzeugung-Szenarien.PdfDocument.merge(): Verknüpft das Array der geladenen Dokumente zu einem einzigenPdfDocumentunter Beibehaltung aller Formatierungen, Bilder und eingebetteten Inhalte aus jeder Quelle.toFile(): Schreibt das zusammengeführte Dokument an den angegebenen Pfad. Kombinieren Sie dies mit PDF-Komprimierung, um die Ausgabedateigröße bei Bedarf zu verringern.
Wie füge ich bestimmte Seiten aus jedem PDF zusammen?
Es ist nicht immer das Ziel, jede Seite aus jedem Quelldokument zu übergeben. Um selektive Seitenbereiche aus jeder Eingabedatei zusammenzuführen, extrahieren Sie die gewünschten Seiten, bevor Sie die Dokumente an merge() übergeben.
//: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);
extractPages(startPage, endPage) akzeptiert seitenbasierte Indizes. Die Übergabe von 0, 0 extrahiert nur die erste Seite, während 0, 2 die ersten drei Seiten extrahiert. Die Schleife erstellt ein Array von Seitenbereichsdokumenten in der Reihenfolge, wie sie in ranges erscheinen, und merge() verknüpft sie zu der endgültigen Ausgabe.
Dieses Muster ist nützlich, wenn Verträge aus einer Unterschriftsseite, einem Anhang und einem Deckblatt bestehen, die in separaten Dateien gespeichert sind. Sie können genau die Seiten sammeln, die von jeder Quelle wichtig sind, ohne Dateien auf der Festplatte zu duplizieren.
Die Iron Suite spielt eine entscheidende Rolle in unseren Operationen. Diese Werkzeuge erhöhen die Effizienz im gesamten Unternehmen, einschließlich der Erstellung von Grundrissen und der Verbesserung des Bestandsmanagements.
Wie füge ich Kopf- und Fußzeilen zu einer zusammengeführten PDF-Datei hinzu?
Nach dem Merging rufen Sie addHtmlHeader() und addHtmlFooter() auf das resultierende Dokument auf, um konsistente Kopf- und Fußzeilen auf allen Seiten anzuwenden. Diese Methoden akzeptieren einen HTML-String und ein Optionsobjekt.
//: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');
Die {page} und {total-pages} Platzhalter werden zur Renderzeit gegen die Seitenzahl des zusammengeführten Dokuments aufgelöst. Verwenden Sie drawDividerLine: true, um den Kopf- oder Fußzeilenbereich visuell vom Seiteninhalt zu trennen.
Das Anwenden von Kopf- und Fußzeilen nach der Zusammenführung bedeutet, dass jede Seite im kombinierten Dokument die gleiche Behandlung erfährt, unabhängig davon, aus welcher Quelldatei sie stammt. Für vollständige Kopf- und Fußzeilen-Konfigurationsoptionen siehe die HTML-Kopf- und Fußzeilenbeispiele.
Wie schütze ich ein zusammengeführtes PDF mit einem Passwort?
Wenden Sie Passwortschutz und Berechtigungseinschränkungen nach dem Merging durch Aufruf von saveAs() mit einem Sicherheitsoptionsobjekt an. Dies verhindert unbefugten Zugriff auf das kombinierte Dokument.
//: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');
Das userPassword wird benötigt, um das Dokument zu öffnen; das ownerPassword steuert die Berechtigungseinstellungen selbst. Das Setzen von allowUserPrinting: true bei Deaktivierung anderer Berechtigungsflags ermöglicht es Empfängern, das Dokument zu drucken, verhindert jedoch Bearbeitung, Kopieren und Anmerkungen. Für eine vollständige Liste verfügbarer Berechtigungsflags siehe die IronPDF Node.js API Referenz.
fromFile() an. Der Versuch, ein verschlüsseltes Dokument zusammenzuführen, ohne das Passwort anzugeben, führt zu einem Fehler.Wie füge ich PDFs zusammen und füge eine digitale Signatur hinzu?
Durch das Zusammenführen von PDFs und anschließendes sofortiges Signieren des Ergebnisses entsteht ein einziges signiertes Dokument, das alle Quellinhalte abdeckt. Wenden Sie applySignature() nach merge() an, um ein digitales Zertifikat an die kombinierte Ausgabe anzuheften.
//: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'
);
Die applySignature() Methode bettet das Zertifikat in die PDF-Metadaten ein, sodass Leser die Integrität des Dokuments überprüfen können. Dieser Arbeitsablauf ist in Vertragszusammenstellungs-Pipelines gängig, in denen mehrere Abschnitte kombiniert und dann vor der Verteilung co-signiert werden. Für einen vollständigen Durchgang durch Zertifikat-basiertes Signieren siehe die digitale Signaturen Beispiele.
Wie behebe ich häufige Fehler beim Zusammenführen von PDFs?
Die meisten Fehler beim Zusammenführen fallen in vier Kategorien: fehlende Dateien, Speichererschöpfung, beschädigte Eingaben und Berechtigungsprobleme. Die folgende Tabelle enthält die häufigsten Ursachen und die Lösung für jeden von ihnen.
| Fehler | Wahrscheinliche Ursache | Lösung |
|---|---|---|
| Datei nicht gefunden | Falscher Pfad oder Arbeitsverzeichnis stimmt nicht überein | Verwenden Sie absolute Pfade oder überprüfen Sie das Arbeitsverzeichnis des Prozesses |
| JavaScript-Heap läuft aus dem Speicher | Viele große PDFs werden gleichzeitig geladen | Erhöhen Sie den Speicher von Node.js: node --max-old-space-size=4096 script.js |
| Ungültiges oder beschädigtes PDF | Quelldatei ist beschädigt oder kein gültiges PDF | Überprüfen Sie die Quelldateien mit einem PDF-Reader, bevor Sie sie verarbeiten |
| Zugriff verweigert | Kein Lesezugriff auf Eingabe- oder kein Schreibzugriff auf Ausgabeverzeichnis | Überprüfen Sie die Datei- und Verzeichnisberechtigungen im Betriebssystem |
| Verschlüsseltes Quell-PDF | Eingabe-PDF erfordert ein Passwort zum Öffnen | Übergeben Sie das Passwort als zweites Argument an fromFile() |
Für umgebungsspezifische Einrichtungsprobleme dokumentiert das IronPDF Änderungsprotokoll bekannte Probleme und Korrekturen. Wenn Probleme nach Überprüfung der obigen Tabelle bestehen bleiben, kapseln Sie den Merge-Aufruf in einen try-catch Block ein, um die vollständige Fehlermeldung aus der Bibliothek anzuzeigen.
fromFile() aufrufen. Eine einzelne fehlende Datei führt dazu, dass der gesamte Promise.all() Aufruf abgelehnt wird, wodurch das Merging abgebrochen wird.
Node.js selbst bietet hilfreiche Tools zur Vorabprüfung von Pfaden. Die Node.js fs.promises.access Methode ermöglicht es, zu prüfen, ob eine Datei lesbar ist, bevor sie an IronPDF übergeben wird. Für Fragen dazu, wie Community-Entwickler ähnliche Fehlerszenarien beim Zusammenführen behandeln, bietet der Stack Overflow-Thread zum Zusammenführen von PDFs in Node.js zusätzlichen Kontext.
Was sind die nächsten Schritte beim Zusammenführen von PDFs in Node.js?
Die oben genannten Beispiele decken die häufigsten Zusammenführungs-Szenarien ab: grundlegende Dateikombination, Auswahlauswahl von Seitenspannen, Kopf- und Fußzeileninjektion, Passwortschutz und digitale Signierung. IronPDF unterstützt auch das Verwalten von PDF-Formularen über zusammengeführte Seiten, das Hinzufügen neuer Inhalte zum kombinierten Dokument und die Erzeugung rasterisierter Bilder aus der finalen Ausgabe zur Vorschau.
Starten Sie Ihre kostenlose 30-tägige Testversion, um das Zusammenführen ohne Wasserzeichen zu testen, oder sehen Sie die Lizenzoptionen, wenn Sie bereit sind, bereitzustellen.
Bereit zu sehen, was IronPDF sonst noch kann? Besuchen Sie die IronPDF for Node.js-Dokumentation für die vollständige API-Dokumentation und zusätzliche Anleitungen.
Häufig gestellte Fragen
Wie führe ich mehrere PDF-Dateien in Node.js zu einer zusammen?
Laden Sie jede Datei mit PdfDocument.fromFile(), sammeln Sie die Ergebnisse in einem Array, übergeben Sie das Array an PdfDocument.merge() und speichern Sie die Ausgabe mit toFile(). Verwenden Sie Promise.all(), um Dateien parallel zu laden, wenn Sie drei oder mehr Dokumente zusammenführen.
Bewahrt IronPDF das Format beim Zusammenführen von PDFs?
Ja. IronPDF bewahrt Schriftarten, Bilder, eingebettete Formulare und die Seitengestaltung jedes Quelldokuments. Die zusammengeführte Ausgabe erhält das ursprüngliche Layout jeder Seite in der Reihenfolge, in der die Quelldateien im Eingabearray erscheinen.
Wie führe ich nur spezifische Seiten aus jedem PDF zusammen?
Rufen Sie extractPages(startPage, endPage) auf jedem geladenen Dokument auf, bevor Sie es an PdfDocument.merge() übergeben. Seitenindizes sind nullbasiert, sodass die erste Seite den Index 0 hat. Das zurückgegebene Dokument enthält nur den angegebenen Bereich.
Kann ich Kopf- und Fußzeilen zu einem zusammengeführten PDF hinzufügen?
Ja. Nach dem Zusammenführen rufen Sie addHtmlHeader() und addHtmlFooter() auf das resultierende Dokument auf. Beide Methoden akzeptieren einen HTML-String und ein Optionsobjekt. Verwenden Sie die Platzhalter {page} und {total-pages} für automatische Seitenzahlen.
Wie schütze ich ein zusammengeführtes PDF in Node.js mit einem Kennwort?
Rufen Sie saveAs() mit einem Sicherheitsoptionsobjekt auf, das userPassword, ownerPassword und Berechtigungsflags wie allowUserPrinting angibt. Das userPassword wird benötigt, um das Dokument zu öffnen; das ownerPassword steuert die Berechtigungseinstellungen.
Was soll ich tun, wenn das Zusammenführen mit einem Datei-nicht-gefunden-Fehler fehlschlägt?
Stellen Sie sicher, dass alle Eingabedateipfade relativ zum Arbeitsverzeichnis des Node.js-Prozesses korrekt sind, oder wechseln Sie zu absoluten Pfaden. Verwenden Sie fs.promises.access(), um sicherzustellen, dass jede Datei lesbar ist, bevor Sie PdfDocument.fromFile() aufrufen.
Was passiert, wenn eines der Quell-PDFs verschlüsselt ist?
Der Versuch, ein verschlüsseltes PDF zu laden, ohne dessen Kennwort bereitzustellen, wirft einen Fehler und lehnt den gesamten Promise.all()-Aufruf ab. Geben Sie das Dokumentenkennwort als zweites Argument an fromFile(), bevor Sie zusammenführen.
Brauche ich einen Lizenzschlüssel, um PDFs mit IronPDF zusammenzuführen?
IronPDF funktioniert ohne einen Lizenzschlüssel während der Entwicklung, aber die Ausgabedokumente enthalten ein Testwasserzeichen. Konfigurieren Sie einen gültigen Lizenzschlüssel vor der Bereitstellung in der Produktion, um das Wasserzeichen zu entfernen und die volle Funktionalität zu aktivieren.

