Comment fusionner des fichiers PDF en un seul PDF à l'aide de Node.js
IronPDF vous permet de fusionner plusieurs fichiers PDF en un seul document dans Node.js en seulement quelques lignes de code. Chargez chaque fichier avec PdfDocument.fromFile(), passez le tableau à PdfDocument.merge(), et sauvegardez le résultat avec toFile().
Démarrage rapide : Fusionner des fichiers 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();
Flux de travail minimal (5 étapes)
- Installez IronPDF :
npm install ironpdf - Importez la bibliothèque :
const IronPdf = require('ironpdf') - Chargez chaque fichier PDF avec
PdfDocument.fromFile() - Fusionnez les documents chargés avec
PdfDocument.merge() - Enregistrez le résultat avec
toFile()
IronPDF est une bibliothèque de manipulation de PDF for Node.js qui gère la conversion HTML en PDF, l'assemblage de documents et la modification de PDF sans nécessiter d'outils PDF au niveau système. Lors de la fusion de documents, il préserve les polices, les images, les formulaires intégrés et la géométrie des pages de chaque fichier source.
Avant de déployer en production, configurez votre clé de licence IronPDF pour supprimer le filigrane d'essai et activer la sortie complète. Pour configurer le moteur de rendu pour votre système d'exploitation, suivez le guide de configuration IronPdfEngine.
Comment fusionner plusieurs fichiers PDF dans Node.js ?
PdfDocument.merge() accepte un tableau d'objets PdfDocument et retourne un nouveau document contenant chaque page dans l'ordre où les documents sources apparaissent dans le tableau. L'opération est non destructive ; les objets de fichier originaux ne sont pas modifiés.
//: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() charge les fichiers sources en parallèle plutôt qu'un par un, ce qui est important lors du traitement de collections plus importantes. L'appel merge() concatène les documents dans l'ordre du tableau, alors placez les fichiers dans le tableau dans la séquence dans laquelle vous voulez qu'ils apparaissent dans le résultat.
fromFile() ne résout pas les chemins relatifs au fichier de script lui-même.Que fait chaque partie du code?
PdfDocument.fromFile(): Lit un PDF depuis le disque et retourne un objetPdfDocument. Pour obtenir les signatures complètes des méthodes, consultez la référence API de IronPDF for Node.js.Promise.all(): Dispache toutes les opérations de chargement de fichiers simultanément, réduisant le temps de chargement total pour les fusions de documents multiples. Ce modèle convient également aux scénarios de génération de PDF multithreads et simultanés.PdfDocument.merge(): Concatène le tableau de documents chargés en un seulPdfDocument, préservant toute la mise en page, les images et le contenu intégré de chaque source.toFile(): Écrit le document fusionné au chemin spécifié. Combinez cela avec la compression PDF pour réduire la taille du fichier de sortie lorsque nécessaire.
Comment fusionner des pages spécifiques de chaque PDF ?
Passer chaque page de chaque document source n'est pas toujours l'objectif. Pour fusionner les plages de pages sélectives de chaque fichier d'entrée, extrayez les pages souhaitées avant de passer les documents à 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);
extractPages(startPage, endPage) accepte des indices de pages basés sur zéro. Passer 0, 0 extrait uniquement la première page, tandis que 0, 2 extrait les trois premières pages. La boucle construit un tableau de documents de plage de pages dans l'ordre où ils apparaissent dans ranges, puis merge() les concatène dans le résultat final.
Ce modèle est utile lors de l'assemblage de contrats à partir d'une page de signature, d'une annexe et d'une page de couverture stockées dans des fichiers séparés. Vous pouvez collecter exactement les pages importantes de chaque source sans dupliquer les fichiers sur le disque.
Iron Suite joue un rôle crucial dans nos opérations. Ce sont des outils qui augmentent l'efficacité de l'entreprise, y compris la création de plans d'étage et l'amélioration de la gestion des stocks.
Comment ajouter des en-têtes et des pieds de page à un PDF fusionné ?
Après la fusion, appelez addHtmlHeader() et addHtmlFooter() sur le document résultant pour appliquer des en-têtes et pieds de page cohérents sur toutes les pages. Ces méthodes acceptent une chaîne HTML et un objet options.
//: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');
Les espaces réservés {page} et {total-pages} sont résolus au moment du rendu en fonction du nombre de pages du document fusionné. Utilisez drawDividerLine: true pour séparer visuellement l'en-tête ou le pied de page du contenu de la page.
Appliquer des en-têtes et pieds de page après la fusion signifie que chaque page du document combiné reçoit le même traitement, peu importe de quel fichier source elle provient. Pour connaître toutes les options de configuration des en-têtes et des pieds de page, consultez les exemples d'en-têtes et de pieds de page HTML.
Comment protéger un PDF fusionné par mot de passe ?
Appliquez une protection par mot de passe et des restrictions de permission après la fusion en appelant saveAs() avec un objet d'options de sécurité. Cela empêche tout accès non autorisé au document combiné.
//: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');
Le userPassword est requis pour ouvrir le document ; le ownerPassword contrôle les paramètres de permission eux-mêmes. Définir allowUserPrinting: true tout en désactivant d'autres indicateurs d'autorisation permet aux destinataires d'imprimer le document mais empêche l'édition, la copie et l'annotation. Pour une liste complète des indicateurs de permission disponibles, consultez la référence API IronPDF Node.js.
fromFile(). Tenter de fusionner un document crypté sans fournir son mot de passe entraînera une erreur.Comment fusionner des PDF et ajouter une signature numérique ?
La fusion de PDF et la signature immédiate du résultat produisent un document unique signé qui couvre tout le contenu source. Appliquez applySignature() après merge() pour attacher un certificat numérique à la sortie combinée.
//: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'
);
La méthode applySignature() intègre le certificat dans les métadonnées du PDF afin que les lecteurs puissent vérifier l'intégrité du document. Ce flux de travail est courant dans les pipelines d'assemblage de contrats où plusieurs sections sont combinées puis co-signées avant distribution. Pour une visite complète de la signature basée sur certificat, consultez les exemples de signatures numériques.
Comment résoudre les erreurs de fusion PDF courantes ?
La plupart des erreurs lors de la fusion appartiennent à quatre catégories : fichiers manquants, épuisement de la mémoire, entrées corrompues et problèmes de permission. Le tableau ci-dessous répertorie les causes les plus fréquentes et comment y remédier.
| Erreur | Cause probable | Solution |
|---|---|---|
| Fichier introuvable | Chemin incorrect ou discordance du répertoire de travail | Utilisez des chemins absolus ou vérifiez le répertoire de travail du processus |
| JavaScript épuisement de mémoire | Chargement de nombreux PDF volumineux simultanément | Augmentez la mémoire Node.js : node --max-old-space-size=4096 script.js |
| PDF invalide ou corrompu | Le fichier source est endommagé ou n'est pas un PDF valide | Validez les fichiers sources avec un lecteur PDF avant traitement |
| Permission refusée | Aucun accès en lecture à l'entrée ou aucun accès en écriture au répertoire de sortie | Vérifiez les permissions de fichier et de répertoire sur le système d'exploitation |
| PDF source crypté | Le PDF d'entrée nécessite un mot de passe pour s'ouvrir | Fournissez le mot de passe comme deuxième argument à fromFile() |
Pour les problèmes de configuration spécifiques à l'environnement, le changelog IronPDF documente les problèmes connus et les correctifs. Si des problèmes persistent après avoir vérifié le tableau ci-dessus, encadrez l'appel de fusion dans un bloc try-catch pour afficher le message d'erreur complet de la bibliothèque.
fromFile(). Un seul fichier manquant provoque le rejet de l'appel Promise.all(), annulant la fusion.
Node.js lui-même fournit des outils utiles pour la validation de chemin pré-vol. La méthode Node.js fs.promises.access vous permet de vérifier si un fichier est lisible avant de le transmettre à IronPDF. Pour des questions sur la façon dont les développeurs de la communauté gèrent des scénarios d'erreur de fusion similaires, le fil de discussion sur Stack Overflow concernant la fusion de PDF dans Node.js fournit un contexte supplémentaire.
Quelles sont les prochaines étapes pour fusionner des PDF dans Node.js ?
Les exemples ci-dessus couvrent les scénarios de fusion les plus courants : combinaison de fichiers simple, sélection de plage de pages, injection d'en-têtes et de pieds de page, protection par mot de passe et signature numérique. IronPDF prend également en charge la gestion des formulaires PDF sur des pages fusionnées, l'estampillage de nouveau contenu sur le document combiné, et la production d'images rasterisées à partir de la sortie finale pour la génération de prévisualisation.
Commencez votre essai gratuit de 30 jours pour tester les fusions sans filigrane, ou consultez les options de licence si vous êtes prêt à déployer.
Prêt à voir ce qu'IronPDF peut faire d'autre ? Visitez la documentation IronPDF for Node.js pour une visite complète de l'API et des guides pratiques supplémentaires.
Questions Fréquemment Posées
Comment fusionner plusieurs fichiers PDF en un seul dans Node.js ?
Chargez chaque fichier avec PdfDocument.fromFile(), collectez les résultats dans un tableau, passez le tableau à PdfDocument.merge(), et enregistrez la sortie avec toFile(). Utilisez Promise.all() pour charger les fichiers en parallèle lors de la fusion de trois documents ou plus.
IronPDF préserve-t-il le formatage lors de la fusion des PDF ?
Oui. IronPDF préserve les polices, les images, les formulaires intégrés et la géométrie des pages de chaque document source. La sortie fusionnée maintient la mise en page originale de chaque page dans l'ordre d'apparition des fichiers sources dans le tableau d'entrée.
Comment fusionner uniquement des pages spécifiques de chaque PDF ?
Appelez extractPages(startPage, endPage) sur chaque document chargé avant de le passer à PdfDocument.merge(). Les indices de page sont basés sur zéro, donc la première page a l'indice 0. Le document retourné contient uniquement la plage spécifiée.
Puis-je ajouter des en-têtes et des pieds de page à un PDF fusionné ?
Oui. Après la fusion, appelez addHtmlHeader() et addHtmlFooter() sur le document résultant. Les deux méthodes acceptent une chaîne HTML et un objet d'options. Utilisez les espaces réservés {page} et {total-pages} pour la numérotation automatique des pages.
Comment protéger par mot de passe un PDF fusionné dans Node.js ?
Appelez saveAs() avec un objet d'options de sécurité spécifiant userPassword, ownerPassword, et des indicateurs de permission tels que allowUserPrinting. Le userPassword est requis pour ouvrir le document ; le ownerPassword contrôle les paramètres de permission.
Que dois-je faire si la fusion échoue avec une erreur de fichier introuvable ?
Vérifiez que tous les chemins de fichiers d'entrée sont corrects par rapport au répertoire de travail du processus Node.js, ou passez aux chemins absolus. Utilisez fs.promises.access() pour confirmer que chaque fichier est lisible avant d'appeler PdfDocument.fromFile().
Que se passe-t-il si l'un des PDF sources est crypté ?
Tenter de charger un PDF crypté sans fournir son mot de passe générera une erreur et rejettera l'appel Promise.all() entier. Fournissez le mot de passe du document en tant que second argument à fromFile() avant de fusionner.
Ai-je besoin d'une clé de licence pour fusionner des PDF avec IronPDF ?
IronPDF fonctionne sans clé de licence pendant le développement, mais les documents de sortie incluent un filigrane d'essai. Configurez une clé de licence valide avant le déploiement en production pour supprimer le filigrane et activer toutes les fonctionnalités.

