Comment fusionner des fichiers PDF en un seul PDF à l'aide de Node.js

This article was translated from English: Does it need improvement?
Translated
View the article in English

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();
JAVASCRIPT

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);
})();
JAVASCRIPT

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.

ConseilsPassez les chemins de fichiers sous forme de chemins absolus ou de chemins relatifs au répertoire de travail du processus Node.js. La méthode 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 objet PdfDocument. 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 seul PdfDocument, 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);
JAVASCRIPT

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.

Veuillez noterLes indices de page dans IronPDF sont basés sur zéro. La page 1 d'un document est l'indice 0, la page 2 est l'indice 1, et ainsi de suite.


Icon Quote related to Comment fusionner des pages spécifiques de chaque PDF ?

Ma bibliothèque préférée de ce genre est IronPDF. Elle permet une manipulation rapide et efficace des fichiers PDF. Elle dispose également de nombreuses fonctionnalités précieuses, comme l'exportation au format PDF/A et la signature numérique des documents PDF.

Milan Jovanovic related to Comment fusionner des pages spécifiques de chaque PDF ?

Milan Jovanovic

Microsoft MVP

Voir l'étude de cas
Icon Quote related to Comment fusionner des pages spécifiques de chaque PDF ?

IronOCR signifie que nous pouvons économiser 40 000 $ par an grâce au traitement manuel, tout en améliorant la productivité et en libérant des ressources pour des tâches à fort impact. Je le recommande vivement.

Brent Matzelle related to Comment fusionner des pages spécifiques de chaque PDF ?

Brent Matzelle

Directeur technique, OPYN

Voir l'étude de cas
Icon Quote related to Comment fusionner des pages spécifiques de chaque PDF ?

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.

David Jones related to Comment fusionner des pages spécifiques de chaque PDF ?

David Jones

Ingénieur logiciel principal, Agorus Build

Voir l'étude de cas

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');
JAVASCRIPT

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');
JAVASCRIPT

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.

ImportantSi les PDFs source sont déjà protégés par mot de passe, fournissez le mot de passe de déchiffrement de chaque document lors du chargement avec 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'
);
JAVASCRIPT

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.

ConseilsSignez le document fusionné plutôt que les fichiers sources individuels lorsque vous avez besoin d'un seul certificat qui atteste de l'intégralité du document combiné.


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.

Erreurs de fusion PDF courantes et leurs solutions
ErreurCause probableSolution
Fichier introuvableChemin incorrect ou discordance du répertoire de travailUtilisez des chemins absolus ou vérifiez le répertoire de travail du processus
JavaScript épuisement de mémoireChargement de nombreux PDF volumineux simultanémentAugmentez la mémoire Node.js : node --max-old-space-size=4096 script.js
PDF invalide ou corrompuLe fichier source est endommagé ou n'est pas un PDF valideValidez les fichiers sources avec un lecteur PDF avant traitement
Permission refuséeAucun accès en lecture à l'entrée ou aucun accès en écriture au répertoire de sortieVé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'ouvrirFournissez 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.

PrudenceValidez toujours que chaque chemin de fichier dans votre tableau d'entrée existe avant d'appeler 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.

Darrius Serrant
Ingénieur logiciel Full Stack (WebOps)

Darrius Serrant est titulaire d'un baccalauréat en informatique de l'université de Miami et travaille comme ingénieur marketing WebOps Full Stack chez Iron Software. Attiré par le codage dès son plus jeune âge, il a vu l'informatique comme à la fois mystérieuse et accessible, en faisant le ...

Lire la suite
Prêt à commencer?
Version : 2026.6 vient de sortir
Still Scrolling Icon

Vous faites encore défiler ?

Vous voulez une preuve rapidement ?
exécuter un échantillon Regardez votre code HTML se transformer en PDF.