# Cómo combinar archivos PDF en un único PDF con Node.js
IronPDF le permite fusionar varios archivos PDF en un único documento en Node.js con solo unas pocas líneas de código. Cargue cada archivo con `PdfDocument.fromFile()`, pase el conjunto a `PdfDocument.merge()` y guarde el resultado con `toFile()`.
*as-heading:2(Inicio rápido: Fusionar archivos PDF)*
```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>Flujo de trabajo mínimo (5 pasos)</h3>
<ol>
<li>Instale IronPDF: <code>npm install ironpdf</code></li>
<li>Importe la biblioteca: <code>const IronPdf = require('ironpdf')</code></li>
<li>Cargue cada archivo PDF con <code>PdfDocument.fromFile()</code></li>
<li>Fusione los documentos cargados con <code>PdfDocument.merge()</code></li>
<li>Guarde el resultado con <code>toFile()</code></li>
</ol>
</div>
IronPDF es una biblioteca de manipulación de PDF for Node.js que maneja [conversión de HTML a PDF](https://ironpdf.com/nodejs/tutorials/html-to-pdf/), ensamblado de documentos y modificación de PDF sin requerir ninguna herramienta PDF a nivel de sistema. Al fusionar documentos, preserva fuentes, imágenes, formularios incrustados y geometría de página de cada archivo fuente.
Antes de desplegar en producción, configure su [clave de licencia de IronPDF](https://ironpdf.com/nodejs/get-started/license-keys/) para eliminar la marca de agua de prueba y habilitar la salida completa. Para configurar el motor de renderizado para su sistema operativo, siga la [guía de configuración de IronPdfEngine](https://ironpdf.com/nodejs/get-started/use-ironpdfengine/).
<hr />
## ¿Cómo fusiono varios archivos PDF en Node.js?
`PdfDocument.merge()` acepta un conjunto de objetos `PdfDocument` y devuelve un nuevo documento que contiene cada página en el orden en que aparecen los documentos fuente en el conjunto. La operación no es destructiva; los objetos de archivo originales no se modifican.
```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()` carga los archivos fuente en paralelo en lugar de uno a la vez, lo cual es importante al procesar colecciones más grandes. La llamada `merge()` concatena los documentos en el orden del conjunto, por lo que coloque los archivos en el conjunto en la secuencia que desea que aparezcan en la salida.
[[t:(Pasar rutas de archivo como rutas absolutas o rutas relativas al directorio de trabajo del proceso de Node.js. El método `fromFile()` no resuelve rutas relativas al archivo de script mismo.)]]
### ¿Qué hace cada parte del código?
- **`PdfDocument.fromFile()`**: Lee un PDF desde el disco y devuelve un objeto `PdfDocument`. Para ver las firmas completas de los métodos, consulte la [Referencia de API de IronPDF for Node.js](https://ironpdf.com/nodejs/object-reference/api/).
- **`Promise.all()`**: Despacha todas las operaciones de carga de archivos simultáneamente, reduciendo el tiempo total de carga para fusiones de múltiples documentos. Este patrón es adecuado para escenarios de [generación de PDF multihilo y concurrente](https://ironpdf.com/nodejs/examples/threading/).
- **`PdfDocument.merge()`**: Concatena el conjunto de documentos cargados en un único `PdfDocument`, preservando todo el formato, imágenes y contenido incrustado de cada fuente.
- **`toFile()`**: Escribe el documento fusionado en la ruta especificada. Combine esto con la [compresión de PDF](https://ironpdf.com/nodejs/examples/pdf-compression/) para reducir el tamaño del archivo de salida cuando sea necesario.
<hr />
## ¿Cómo fusiono páginas específicas de cada PDF?
Pasar cada página de cada documento fuente no siempre es el objetivo. Para fusionar rangos de páginas selectivos de cada archivo de entrada, extraiga las páginas deseadas antes de pasar los documentos a `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)` acepta índices de páginas basados en cero. Pasar `0, 0` extrae solo la primera página, mientras que `0, 2` extrae las primeras tres páginas. El bucle construye un conjunto de documentos de rango de páginas en el orden en que aparecen en `ranges`, luego `merge()` los concatena en la salida final.
Este patrón es útil cuando se ensamblan contratos a partir de una página de firma, un apéndice y una hoja de portada almacenados en archivos separados. Puede recopilar exactamente las páginas que importan de cada fuente sin duplicar archivos en el disco.
[[i:(Los índices de página en IronPDF están basados en cero. La página 1 de un documento es el índice 0, la página 2 es el índice 1, y así sucesivamente.)]]
<hr />
## ¿Cómo agrego encabezados y pies de página a un PDF fusionado?
Después de fusionar, llame a `addHtmlHeader()` y `addHtmlFooter()` en el documento resultante para aplicar encabezados y pies de página consistentes en todas las páginas. Estos métodos aceptan una cadena HTML y un objeto de opciones.
```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');
```
Los marcadores de posición `{page}` y `{total-pages}` se resuelven en el momento de la renderización frente al recuento de páginas del documento fusionado. Utilice `drawDividerLine: true` para separar visualmente el encabezado o pie de página del contenido de la página.
Aplicar encabezados y pies de página después de la fusión significa que cada página en el documento combinado recibe el mismo tratamiento, sin importar de qué archivo fuente provenga. Para opciones completas de configuración de encabezados y pies de página, consulte los [ejemplos de encabezados y pies de página HTML](https://ironpdf.com/nodejs/examples/adding-headers-and-footers-advanced/).
<hr />
## ¿Cómo protejo un PDF fusionado con una contraseña?
Aplique protección por contraseña y restricciones de permisos después de fusionar llamando a `saveAs()` con un objeto de opciones de seguridad. Esto previene el acceso no autorizado al documento combinado.
```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');
```
El `userPassword` es necesario para abrir el documento; el `ownerPassword` controla las configuraciones de permiso en sí mismas. Establecer `allowUserPrinting: true` mientras deshabilita otras banderas de permiso permite que los destinatarios impriman el documento, pero impide la edición, copia y anotación. Para una lista completa de las banderas de permiso disponibles, consulte la [Referencia de API de IronPDF Node.js](https://ironpdf.com/nodejs/object-reference/api/).
[[n:(Si los PDFs fuente ya están protegidos por contraseña, proporcione la contraseña de descifrado de cada documento al cargar con `fromFile()`. Intentar fusionar un documento cifrado sin proporcionar su contraseña resultará en un error.)]]
<hr />
## ¿Cómo fusiono PDFs y agrego una firma digital?
Fusionar PDFs y luego firmar inmediatamente el resultado produce un único documento firmado que cubre todo el contenido fuente. Aplique `applySignature()` después de `merge()` para adjuntar un certificado digital a la salida combinada.
```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'
);
```
El método `applySignature()` incrusta el certificado en los metadatos del PDF para que los lectores puedan verificar la integridad del documento. Este flujo de trabajo es común en tuberías de ensamblaje de contratos donde se combinan múltiples secciones y luego se co-firman antes de la distribución. Para una guía completa sobre la firma basada en certificados, consulte los [ejemplos de firmas digitales](https://ironpdf.com/nodejs/examples/digitally-sign-a-pdf/).
[[t:(Firme el documento fusionado en lugar de los archivos fuente individuales cuando necesite un único certificado que acredite todo el documento combinado.)]]
<hr />
## ¿Cómo soluciono los errores comunes al fusionar PDFs?
La mayoría de los errores durante la fusión pertenecen a cuatro categorías: archivos faltantes, agotamiento de memoria, entradas dañadas y problemas de permiso. La siguiente tabla enumera las causas más frecuentes y cómo abordar cada una.
<table class="content__data-table" data-content-table>
<caption>Errores comunes de fusión de PDF y sus soluciones</caption>
<thead>
<tr><th>Error</th><th>Posible causa</th><th>Solución</th></tr>
</thead>
<tbody>
<tr><td>Archivo no encontrado</td><td>Ruta incorrecta o discrepancia del directorio de trabajo</td><td>Use rutas absolutas o verifique el directorio de trabajo del proceso</td></tr>
<tr><td>JavaScript se queda sin memoria heap</td><td>Cargar muchos PDFs grandes simultáneamente</td><td>Aumente la memoria de Node.js: <code>node --max-old-space-size=4096 script.js</code></td></tr>
<tr><td>PDF inválido o corrupto</td><td>El archivo fuente está dañado o no es un PDF válido</td><td>Valide los archivos fuente con un lector de PDF antes de procesar</td></tr>
<tr><td>Permiso denegado</td><td>No hay acceso de lectura en la entrada o no hay acceso de escritura en el directorio de salida</td><td>Verifique los permisos de archivos y directorios en el sistema operativo</td></tr>
<tr><td>PDF fuente cifrado</td><td>PDF de entrada requiere una contraseña para abrir</td><td>Pase la contraseña como el segundo argumento a <code>fromFile()</code></td></tr>
</tbody>
</table>
Para problemas de configuración específicos del entorno, el [cambios de IronPDF](https://ironpdf.com/nodejs/product-updates/changelog/) documentan problemas conocidos y soluciones. Si los problemas persisten después de revisar la tabla anterior, envuelva la llamada de fusión en un bloque `try-catch` para mostrar el mensaje completo de error de la biblioteca.
[[e:(Siempre valide que cada ruta de archivo en su conjunto de entrada exista antes de llamar a `fromFile()`. Un solo archivo faltante provoca el rechazo de toda la llamada `Promise.all()`, cancelando la fusión.)]]
Node.js en sí proporciona herramientas útiles para la validación de rutas previa al vuelo. El método [Node.js `fs.promises.access`](https://nodejs.org/api/fs.html#fspromisesaccesspath-mode) le permite verificar si un archivo es legible antes de pasarlo a IronPDF. Para preguntas sobre cómo manejan escenarios de errores similares otros desarrolladores de la comunidad, el hilo de [Stack Overflow sobre la fusión de PDFs en Node.js](https://stackoverflow.com/questions/36766234/nodejs-merge-two-pdf-files-into-one-using-the-buffer-obtained-by-reading-them) proporciona contexto adicional.
<hr />
## ¿Cuáles son los próximos pasos para fusionar PDFs en Node.js?
Los ejemplos anteriores cubren los escenarios de fusión más comunes: combinación básica de archivos, selección de rango de páginas, inyección de encabezados y pies de página, protección con contraseña y firma digital. IronPDF también admite [manejar formularios PDF](https://ironpdf.com/nodejs/examples/form-data/) a través de páginas fusionadas, [estampar nuevo contenido](https://ironpdf.com/nodejs/examples/stamping-new-content/) en el documento combinado y [producir imágenes rasterizadas](https://ironpdf.com/nodejs/examples/rasterize-a-pdf-to-images/) del resultado final para la generación de vistas previas.
[Inicie su prueba gratuita de 30 días](#trial-license) para probar la fusión sin una marca de agua, o [vea las opciones de licencia](#licensing) si está listo para implementarlo.
¿Listo para ver qué más puede hacer IronPDF? Visite la [documentación de IronPDF for Node.js](https://ironpdf.com/nodejs/docs/) para un recorrido completo por la API y guías adicionales.
IronPDF le permite fusionar varios archivos PDF en un único documento en Node.js con solo unas pocas líneas de código. Cargue cada archivo con PdfDocument.fromFile(), pase el conjunto a PdfDocument.merge() y guarde el resultado con toFile().
Importe la biblioteca: const IronPdf = require('ironpdf')
Cargue cada archivo PDF con PdfDocument.fromFile()
Fusione los documentos cargados con PdfDocument.merge()
Guarde el resultado con toFile()
IronPDF es una biblioteca de manipulación de PDF for Node.js que maneja conversión de HTML a PDF, ensamblado de documentos y modificación de PDF sin requerir ninguna herramienta PDF a nivel de sistema. Al fusionar documentos, preserva fuentes, imágenes, formularios incrustados y geometría de página de cada archivo fuente.
PdfDocument.merge() acepta un conjunto de objetos PdfDocument y devuelve un nuevo documento que contiene cada página en el orden en que aparecen los documentos fuente en el conjunto. La operación no es destructiva; los objetos de archivo originales no se modifican.
//:path=/static-assets/pdf/content-code-examples/how-to/nodejs-merge-pdf/merge-pdfs.jsconstIronPdf = 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 = awaitIronPdf.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() carga los archivos fuente en paralelo en lugar de uno a la vez, lo cual es importante al procesar colecciones más grandes. La llamada merge() concatena los documentos en el orden del conjunto, por lo que coloque los archivos en el conjunto en la secuencia que desea que aparezcan en la salida.
Consejos: Pasar rutas de archivo como rutas absolutas o rutas relativas al directorio de trabajo del proceso de Node.js. El método fromFile() no resuelve rutas relativas al archivo de script mismo.
¿Qué hace cada parte del código?
PdfDocument.fromFile(): Lee un PDF desde el disco y devuelve un objeto PdfDocument. Para ver las firmas completas de los métodos, consulte la Referencia de API de IronPDF for Node.js.
Promise.all(): Despacha todas las operaciones de carga de archivos simultáneamente, reduciendo el tiempo total de carga para fusiones de múltiples documentos. Este patrón es adecuado para escenarios de generación de PDF multihilo y concurrente.
PdfDocument.merge(): Concatena el conjunto de documentos cargados en un único PdfDocument, preservando todo el formato, imágenes y contenido incrustado de cada fuente.
toFile(): Escribe el documento fusionado en la ruta especificada. Combine esto con la compresión de PDF para reducir el tamaño del archivo de salida cuando sea necesario.
¿Cómo fusiono páginas específicas de cada PDF?
Pasar cada página de cada documento fuente no siempre es el objetivo. Para fusionar rangos de páginas selectivos de cada archivo de entrada, extraiga las páginas deseadas antes de pasar los documentos a merge().
//:path=/static-assets/pdf/content-code-examples/how-to/nodejs-merge-pdf/merge-specific-pages.jsconstIronPdf = 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 = awaitIronPdf.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 = awaitIronPdf.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) acepta índices de páginas basados en cero. Pasar 0, 0 extrae solo la primera página, mientras que 0, 2 extrae las primeras tres páginas. El bucle construye un conjunto de documentos de rango de páginas en el orden en que aparecen en ranges, luego merge() los concatena en la salida final.
Este patrón es útil cuando se ensamblan contratos a partir de una página de firma, un apéndice y una hoja de portada almacenados en archivos separados. Puede recopilar exactamente las páginas que importan de cada fuente sin duplicar archivos en el disco.
Por favor nota: Los índices de página en IronPDF están basados en cero. La página 1 de un documento es el índice 0, la página 2 es el índice 1, y así sucesivamente.
¿Cómo agrego encabezados y pies de página a un PDF fusionado?
Después de fusionar, llame a addHtmlHeader() y addHtmlFooter() en el documento resultante para aplicar encabezados y pies de página consistentes en todas las páginas. Estos métodos aceptan una cadena HTML y un objeto de opciones.
//:path=/static-assets/pdf/content-code-examples/how-to/nodejs-merge-pdf/merge-with-headers-footers.jsconstIronPdf = require('ironpdf');async function mergeWithHeadersFooters(inputFiles, outputFile) { const docs = await Promise.all( inputFiles.map(f =>IronPdf.PdfDocument.fromFile(f)) ); const mergedPdf = awaitIronPdf.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');
Los marcadores de posición {page} y {total-pages} se resuelven en el momento de la renderización frente al recuento de páginas del documento fusionado. Utilice drawDividerLine: true para separar visualmente el encabezado o pie de página del contenido de la página.
Aplicar encabezados y pies de página después de la fusión significa que cada página en el documento combinado recibe el mismo tratamiento, sin importar de qué archivo fuente provenga. Para opciones completas de configuración de encabezados y pies de página, consulte los ejemplos de encabezados y pies de página HTML.
¿Cómo protejo un PDF fusionado con una contraseña?
Aplique protección por contraseña y restricciones de permisos después de fusionar llamando a saveAs() con un objeto de opciones de seguridad. Esto previene el acceso no autorizado al documento combinado.
El userPassword es necesario para abrir el documento; el ownerPassword controla las configuraciones de permiso en sí mismas. Establecer allowUserPrinting: true mientras deshabilita otras banderas de permiso permite que los destinatarios impriman el documento, pero impide la edición, copia y anotación. Para una lista completa de las banderas de permiso disponibles, consulte la Referencia de API de IronPDF Node.js.
Importante: Si los PDFs fuente ya están protegidos por contraseña, proporcione la contraseña de descifrado de cada documento al cargar con fromFile(). Intentar fusionar un documento cifrado sin proporcionar su contraseña resultará en un error.
¿Cómo fusiono PDFs y agrego una firma digital?
Fusionar PDFs y luego firmar inmediatamente el resultado produce un único documento firmado que cubre todo el contenido fuente. Aplique applySignature() después de merge() para adjuntar un certificado digital a la salida combinada.
//:path=/static-assets/pdf/content-code-examples/how-to/nodejs-merge-pdf/merge-with-signature.jsconstIronPdf = require('ironpdf');async function mergeAndSign(inputFiles, outputFile, pfxPath, pfxPassword) { const docs = await Promise.all( inputFiles.map(f =>IronPdf.PdfDocument.fromFile(f)) ); const mergedPdf = awaitIronPdf.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
El método applySignature() incrusta el certificado en los metadatos del PDF para que los lectores puedan verificar la integridad del documento. Este flujo de trabajo es común en tuberías de ensamblaje de contratos donde se combinan múltiples secciones y luego se co-firman antes de la distribución. Para una guía completa sobre la firma basada en certificados, consulte los ejemplos de firmas digitales.
Consejos: Firme el documento fusionado en lugar de los archivos fuente individuales cuando necesite un único certificado que acredite todo el documento combinado.
¿Cómo soluciono los errores comunes al fusionar PDFs?
La mayoría de los errores durante la fusión pertenecen a cuatro categorías: archivos faltantes, agotamiento de memoria, entradas dañadas y problemas de permiso. La siguiente tabla enumera las causas más frecuentes y cómo abordar cada una.
Errores comunes de fusión de PDF y sus soluciones
Error
Posible causa
Solución
Archivo no encontrado
Ruta incorrecta o discrepancia del directorio de trabajo
Use rutas absolutas o verifique el directorio de trabajo del proceso
JavaScript se queda sin memoria heap
Cargar muchos PDFs grandes simultáneamente
Aumente la memoria de Node.js: node --max-old-space-size=4096 script.js
PDF inválido o corrupto
El archivo fuente está dañado o no es un PDF válido
Valide los archivos fuente con un lector de PDF antes de procesar
Permiso denegado
No hay acceso de lectura en la entrada o no hay acceso de escritura en el directorio de salida
Verifique los permisos de archivos y directorios en el sistema operativo
PDF fuente cifrado
PDF de entrada requiere una contraseña para abrir
Pase la contraseña como el segundo argumento a fromFile()
Para problemas de configuración específicos del entorno, el cambios de IronPDF documentan problemas conocidos y soluciones. Si los problemas persisten después de revisar la tabla anterior, envuelva la llamada de fusión en un bloque try-catch para mostrar el mensaje completo de error de la biblioteca.
Precaución: Siempre valide que cada ruta de archivo en su conjunto de entrada exista antes de llamar a fromFile(). Un solo archivo faltante provoca el rechazo de toda la llamada Promise.all(), cancelando la fusión.
Node.js en sí proporciona herramientas útiles para la validación de rutas previa al vuelo. El método Node.js fs.promises.access le permite verificar si un archivo es legible antes de pasarlo a IronPDF. Para preguntas sobre cómo manejan escenarios de errores similares otros desarrolladores de la comunidad, el hilo de Stack Overflow sobre la fusión de PDFs en Node.js proporciona contexto adicional.
¿Cuáles son los próximos pasos para fusionar PDFs en Node.js?
Los ejemplos anteriores cubren los escenarios de fusión más comunes: combinación básica de archivos, selección de rango de páginas, inyección de encabezados y pies de página, protección con contraseña y firma digital. IronPDF también admite manejar formularios PDF a través de páginas fusionadas, estampar nuevo contenido en el documento combinado y producir imágenes rasterizadas del resultado final para la generación de vistas previas.
¿Listo para ver qué más puede hacer IronPDF? Visite la documentación de IronPDF for Node.js para un recorrido completo por la API y guías adicionales.
Preguntas Frecuentes
¿Cómo fusiono múltiples archivos PDF en uno en Node.js?
Carga cada archivo con PdfDocument.fromFile(), recopila los resultados en un arreglo, pasa el arreglo a PdfDocument.merge(), y guarda el resultado con toFile(). Usa Promise.all() para cargar archivos en paralelo al fusionar tres o más documentos.
¿IronPDF conserva el formato al fusionar PDFs?
Sí. IronPDF conserva fuentes, imágenes, formularios incrustados y geometría de página de cada documento de origen. La salida fusionada mantiene el diseño original de cada página en el orden que aparecen los archivos de origen en el arreglo de entrada.
¿Cómo fusiono solo páginas específicas de cada PDF?
Llama a extractPages(startPage, endPage) en cada documento cargado antes de pasarlo a PdfDocument.merge(). Los índices de página son de base cero, por lo que la primera página es el índice 0. El documento devuelto contiene solo el rango especificado.
¿Puedo agregar encabezados y pies de página a un PDF fusionado?
Sí. Después de fusionar, llama a addHtmlHeader() y addHtmlFooter() en el documento resultante. Ambos métodos aceptan una cadena HTML y un objeto de opciones. Usa los marcadores {page} y {total-pages} para numeración automática de páginas.
¿Cómo protejo con contraseña un PDF fusionado en Node.js?
Llama a saveAs() con un objeto de opciones de seguridad especificando userPassword, ownerPassword, y banderas de permiso como allowUserPrinting. La userPassword es necesaria para abrir el documento; la ownerPassword controla la configuración de permisos.
¿Qué debo hacer si la fusión falla con un error de archivo no encontrado?
Verifica que todas las rutas de archivo de entrada sean correctas en relación con el directorio de trabajo del proceso Node.js, o cambia a rutas absolutas. Usa fs.promises.access() para confirmar que cada archivo es legible antes de llamar a PdfDocument.fromFile().
¿Qué pasa si uno de los PDFs de origen está cifrado?
Intentar cargar un PDF cifrado sin proporcionar su contraseña lanzará un error y rechazará toda la llamada Promise.all(). Proporciona la contraseña del documento como segundo argumento para fromFile() antes de fusionar.
¿Necesito una clave de licencia para fusionar PDFs con IronPDF?
IronPDF funciona sin una clave de licencia durante el desarrollo, pero los documentos de salida incluyen una marca de agua de prueba. Configura una clave de licencia válida antes de desplegar en producción para eliminar la marca de agua y habilitar la funcionalidad completa.
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 tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien estructurados y visualmente atractivos.