# Como mesclar arquivos PDF em um único PDF usando Node.js
O IronPDF permite mesclar vários arquivos PDF em um único documento no Node.js com apenas algumas linhas de código. Carregue cada arquivo com `PdfDocument.fromFile()`, passe o array para `PdfDocument.merge()` e salve o resultado com `toFile()`.
*as-heading:2(Início Rápido: Mesclar Arquivos 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>Fluxo de trabalho mínimo (5 etapas)</h3>
<ol>
<li>Instale o IronPDF: <code>npm install ironpdf</code></li>
<li>Importe a biblioteca: <code>const IronPdf = require('ironpdf')</code></li>
<li>Carregue cada arquivo PDF com <code>PdfDocument.fromFile()</code></li>
<li>Mescle os documentos carregados com <code>PdfDocument.merge()</code></li>
<li>Salve o resultado com <code>toFile()</code></li>
</ol>
</div>
IronPDF é uma biblioteca de manipulação de PDF for Node.js que realiza [conversão de HTML para PDF](https://ironpdf.com/nodejs/tutorials/html-to-pdf/) , montagem de documentos e modificação de PDFs sem exigir nenhuma ferramenta de PDF em nível de sistema. Ao mesclar documentos, o programa preserva as fontes, imagens, formulários incorporados e geometria da página de cada arquivo de origem.
Antes de implementar em produção, configure sua [chave de licença do IronPDF](https://ironpdf.com/nodejs/get-started/license-keys/) para remover a marca d'água da versão de avaliação e habilitar a saída completa. Para configurar o mecanismo de renderização para o seu sistema operacional, siga o [guia de configuração do IronPdfEngine](https://ironpdf.com/nodejs/get-started/use-ironpdfengine/) .
<hr />
## Como faço para mesclar vários arquivos PDF em Node.js?
`PdfDocument.merge()` aceita um array de objetos `PdfDocument` e retorna um novo documento contendo todas as páginas na ordem em que os documentos de origem aparecem no array. A operação não é destrutiva; os objetos de arquivo originais não são modificados.
```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()` carrega os arquivos de origem em paralelo, em vez de um de cada vez, o que é importante ao processar coleções maiores. A chamada `merge()` concatena os documentos na ordem do array, portanto, coloque os arquivos no array na sequência em que você deseja que eles apareçam na saída.
[[t:(Passe caminhos de arquivos como caminhos absolutos ou caminhos relativos ao diretório de trabalho do processo Node.js O método `fromFile()` não resolve caminhos relativos ao próprio arquivo de script.)]]
### O que cada parte do código faz?
- **`PdfDocument.fromFile()`**: Lê um PDF do disco e retorna um objeto `PdfDocument`. Para obter as assinaturas completas dos métodos, consulte a [Referência da API do IronPDF for Node.js](https://ironpdf.com/nodejs/object-reference/api/)
- **`Promise.all()`**: Despacha todas as operações de carga de arquivo simultaneamente, reduzindo o tempo total de carga para fusões de multidocumentos. Esse padrão também é adequado para cenários [de geração de PDFs multithread e concorrentes](https://ironpdf.com/nodejs/examples/threading/) .
- **`PdfDocument.merge()`**: Concatena o array de documentos carregados em um único `PdfDocument`, preservando toda a formatação, imagens e conteúdo embutido de cada origem.
- **`toFile()`**: Escreve o documento mesclado no caminho especificado. Combine isso com [a compressão de PDF](https://ironpdf.com/nodejs/examples/pdf-compression/) para reduzir o tamanho do arquivo de saída quando necessário.
<hr />
## Como faço para mesclar páginas específicas de cada PDF?
Nem sempre o objetivo é copiar todas as páginas de todos os documentos de origem. Para mesclar intervalos de páginas seletivas de cada arquivo de entrada, extraia as páginas desejadas antes de passar os documentos para `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)` aceita índices de página baseados em zero. Passar `0, 0` extrai apenas a primeira página, enquanto `0, 2` extrai as três primeiras páginas. O loop constrói um array de documentos de intervalo de página na ordem em que aparecem em `ranges`, então `merge()` os concatena na saída final.
Este padrão é útil ao montar contratos a partir de uma página de assinatura, um apêndice e uma folha de rosto armazenados em arquivos separados. Você pode coletar exatamente as páginas que importam de cada fonte sem duplicar arquivos no disco.
[[i:(Os índices de página no IronPDF são baseados em zero. A Página 1 de um documento é o índice 0, a Página 2 é o índice 1, e assim por diante.)]]
<hr />
## Como adiciono cabeçalhos e rodapés a um PDF mesclado?
Após a fusão, chame `addHtmlHeader()` e `addHtmlFooter()` no documento resultante para aplicar cabeçalhos e rodapés consistentes em todas as páginas. Esses métodos aceitam uma string HTML e um objeto de opções.
```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');
```
Os espaços reservados `{page}` e `{total-pages}` são resolvidos no momento da renderização contra a contagem de páginas do documento mesclado. Use `drawDividerLine: true` para separar visualmente o cabeçalho ou rodapé do conteúdo da página.
Aplicar cabeçalhos e rodapés após a mesclagem significa que cada página no documento combinado recebe o mesmo tratamento, independentemente de qual arquivo fonte veio. Para opções completas de configuração de cabeçalho e rodapé, veja os [exemplos de cabeçalhos e rodapés HTML](https://ironpdf.com/nodejs/examples/adding-headers-and-footers-advanced/).
<hr />
## Como protejo um PDF mesclado com senha?
Aplique proteção por senha e restrições de permissão após a fusão, chamando `saveAs()` com um objeto de opções de segurança. Isso impede o acesso não autorizado ao 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');
```
O `userPassword` é necessário para abrir o documento; o `ownerPassword` controla as próprias configurações de permissão. Definir `allowUserPrinting: true` enquanto desativa outros sinais de permissão permite que os destinatários imprimam o documento, mas impede a edição, cópia e anotação. Para uma lista completa de sinalizadores de permissão disponíveis, consulte a [Referência API IronPDF Node.js](https://ironpdf.com/nodejs/object-reference/api/).
[[n:(Se os PDFs de origem já estiverem protegidos por senha, forneça a senha de descriptografia de cada documento ao carregar com `fromFile()`. Tentar mesclar um documento criptografado sem fornecer sua senha resultará em um erro.)]]
<hr />
## Como mesclo PDFs e adiciono uma assinatura digital?
Mesclar PDFs e, em seguida, assinando imediatamente o resultado, produz um único documento assinado que cobre todo o conteúdo de origem. Aplique `applySignature()` após `merge()` para anexar um certificado digital à saída 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'
);
```
O método `applySignature()` insere o certificado nos metadados do PDF para que os leitores possam verificar a integridade do documento. Este fluxo de trabalho é comum em pipelines de montagem de contratos, onde várias seções são combinadas e depois co-assinadas antes da distribuição. Para um tutorial completo sobre assinatura baseada em certificado, consulte os [exemplos de assinaturas digitais](https://ironpdf.com/nodejs/examples/digitally-sign-a-pdf/).
[[t:(Assine o documento mesclado em vez dos arquivos fonte individuais quando você precisar de um certificado único que ateste todo o documento combinado.)]]
<hr />
## Como solucionar erros comuns de mesclagem de PDFs?
A maioria dos erros durante a mesclagem se enquadra em quatro categorias: arquivos ausentes, esgotamento de memória, entradas corrompidas e problemas de permissão. A tabela abaixo lista as causas mais frequentes e como resolver cada uma.
<table class="content__data-table" data-content-table>
<caption>Erros comuns de mesclagem de PDFs e suas soluções</caption>
<thead>
<tr><th>Erro</th><th>Causa Provável</th><th>Solução</th></tr>
</thead>
<tbody>
<tr><td>Arquivo não encontrado</td><td>Caminho incorreto ou incompatibilidade de diretório de trabalho</td><td>Use caminhos absolutos ou verifique o diretório de trabalho do processo</td></tr>
<tr><td>Esgotamento da memória heap do JavaScript</td><td>Carregando muitos PDFs grandes simultaneamente</td><td>Aumente a memória do Node.js: <code>node --max-old-space-size=4096 script.js</code></td></tr>
<tr><td>PDF inválido ou corrompido</td><td>Arquivo de origem está danificado ou não é um PDF válido</td><td>Valide arquivos de origem com um leitor de PDF antes de processar</td></tr>
<tr><td>Permissão negada</td><td>Sem acesso de leitura na entrada ou sem acesso de gravação no diretório de saída</td><td>Verifique as permissões de arquivos e diretórios no sistema operacional</td></tr>
<tr><td>PDF de origem criptografado</td><td>PDF de entrada requer uma senha para abrir</td><td>Passe a senha como o segundo argumento para <code>fromFile()</code></td></tr>
</tbody>
</table>
Para problemas de configuração específicos do ambiente, o [changelog do IronPDF](https://ironpdf.com/nodejs/product-updates/changelog/) documenta problemas conhecidos e correções. Se os problemas persistirem após verificar a tabela acima, envolva a chamada de mesclagem em um bloco `try-catch` para exibir a mensagem completa de erro da biblioteca.
[[e:(Sempre valide que cada caminho de arquivo em seu array de entrada existe antes de chamar `fromFile()`. Um único arquivo ausente faz com que toda chamada `Promise.all()` seja rejeitada, cancelando a fusão.)]]
O próprio Node.js fornece ferramentas úteis para validação de caminho antes do voo. O [método Node.js `fs.promises.access`](https://nodejs.org/api/fs.html#fspromisesaccesspath-mode) permite que você verifique se um arquivo é legível antes de passá-lo para o IronPDF. Para perguntas sobre como os desenvolvedores da comunidade lidam com cenários semelhantes de erro de mesclagem, o [tópico Stack Overflow sobre mesclagem de PDFs no Node.js](https://stackoverflow.com/questions/36766234/nodejs-merge-two-pdf-files-into-one-using-the-buffer-obtained-by-reading-them) fornece contexto adicional.
<hr />
## Quais são os próximos passos para mesclar PDFs no Node.js?
Os exemplos acima cobrem os cenários de mesclagem mais comuns: combinação básica de arquivo, seleção de intervalo de páginas, injeção de cabeçalho e rodapé, proteção por senha e assinatura digital. IronPDF também suporta [gerenciar formulários PDF](https://ironpdf.com/nodejs/examples/form-data/) em páginas mescladas, [carimbar novo conteúdo](https://ironpdf.com/nodejs/examples/stamping-new-content/) no documento combinado e [produzir imagens rasterizadas](https://ironpdf.com/nodejs/examples/rasterize-a-pdf-to-images/) do resultado final para geração de visualizações.
[Inicie seu teste gratuito de 30 dias](#trial-license) para testar a mesclagem sem uma marca d'água, ou [veja as opções de licenciamento](#licensing) se estiver pronto para implantar.
Pronto para ver o que mais o IronPDF pode fazer? Visite a [documentação do IronPDF for Node.js](https://ironpdf.com/nodejs/docs/) para o tutorial completo da API e guias adicionais de como fazer.
O IronPDF permite mesclar vários arquivos PDF em um único documento no Node.js com apenas algumas linhas de código. Carregue cada arquivo com PdfDocument.fromFile(), passe o array para PdfDocument.merge() e salve o resultado com toFile().
Importe a biblioteca: const IronPdf = require('ironpdf')
Carregue cada arquivo PDF com PdfDocument.fromFile()
Mescle os documentos carregados com PdfDocument.merge()
Salve o resultado com toFile()
IronPDF é uma biblioteca de manipulação de PDF for Node.js que realiza conversão de HTML para PDF , montagem de documentos e modificação de PDFs sem exigir nenhuma ferramenta de PDF em nível de sistema. Ao mesclar documentos, o programa preserva as fontes, imagens, formulários incorporados e geometria da página de cada arquivo de origem.
Antes de implementar em produção, configure sua chave de licença do IronPDF para remover a marca d'água da versão de avaliação e habilitar a saída completa. Para configurar o mecanismo de renderização para o seu sistema operacional, siga o guia de configuração do IronPdfEngine .
Como faço para mesclar vários arquivos PDF em Node.js?
PdfDocument.merge() aceita um array de objetos PdfDocument e retorna um novo documento contendo todas as páginas na ordem em que os documentos de origem aparecem no array. A operação não é destrutiva; os objetos de arquivo originais não são modificados.
//: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() carrega os arquivos de origem em paralelo, em vez de um de cada vez, o que é importante ao processar coleções maiores. A chamada merge() concatena os documentos na ordem do array, portanto, coloque os arquivos no array na sequência em que você deseja que eles apareçam na saída.
Pontas: Passe caminhos de arquivos como caminhos absolutos ou caminhos relativos ao diretório de trabalho do processo Node.js O método fromFile() não resolve caminhos relativos ao próprio arquivo de script.
O que cada parte do código faz?
PdfDocument.fromFile(): Lê um PDF do disco e retorna um objeto PdfDocument. Para obter as assinaturas completas dos métodos, consulte a Referência da API do IronPDF for Node.js
Promise.all(): Despacha todas as operações de carga de arquivo simultaneamente, reduzindo o tempo total de carga para fusões de multidocumentos. Esse padrão também é adequado para cenários de geração de PDFs multithread e concorrentes .
PdfDocument.merge(): Concatena o array de documentos carregados em um único PdfDocument, preservando toda a formatação, imagens e conteúdo embutido de cada origem.
toFile(): Escreve o documento mesclado no caminho especificado. Combine isso com a compressão de PDF para reduzir o tamanho do arquivo de saída quando necessário.
Como faço para mesclar páginas específicas de cada PDF?
Nem sempre o objetivo é copiar todas as páginas de todos os documentos de origem. Para mesclar intervalos de páginas seletivas de cada arquivo de entrada, extraia as páginas desejadas antes de passar os documentos para 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) aceita índices de página baseados em zero. Passar 0, 0 extrai apenas a primeira página, enquanto 0, 2 extrai as três primeiras páginas. O loop constrói um array de documentos de intervalo de página na ordem em que aparecem em ranges, então merge() os concatena na saída final.
Este padrão é útil ao montar contratos a partir de uma página de assinatura, um apêndice e uma folha de rosto armazenados em arquivos separados. Você pode coletar exatamente as páginas que importam de cada fonte sem duplicar arquivos no disco.
Observe: Os índices de página no IronPDF são baseados em zero. A Página 1 de um documento é o índice 0, a Página 2 é o índice 1, e assim por diante.
Como adiciono cabeçalhos e rodapés a um PDF mesclado?
Após a fusão, chame addHtmlHeader() e addHtmlFooter() no documento resultante para aplicar cabeçalhos e rodapés consistentes em todas as páginas. Esses métodos aceitam uma string HTML e um objeto de opções.
//: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');
Os espaços reservados {page} e {total-pages} são resolvidos no momento da renderização contra a contagem de páginas do documento mesclado. Use drawDividerLine: true para separar visualmente o cabeçalho ou rodapé do conteúdo da página.
Aplicar cabeçalhos e rodapés após a mesclagem significa que cada página no documento combinado recebe o mesmo tratamento, independentemente de qual arquivo fonte veio. Para opções completas de configuração de cabeçalho e rodapé, veja os exemplos de cabeçalhos e rodapés HTML.
Como protejo um PDF mesclado com senha?
Aplique proteção por senha e restrições de permissão após a fusão, chamando saveAs() com um objeto de opções de segurança. Isso impede o acesso não autorizado ao documento combinado.
O userPassword é necessário para abrir o documento; o ownerPassword controla as próprias configurações de permissão. Definir allowUserPrinting: true enquanto desativa outros sinais de permissão permite que os destinatários imprimam o documento, mas impede a edição, cópia e anotação. Para uma lista completa de sinalizadores de permissão disponíveis, consulte a Referência API IronPDF Node.js.
Importante: Se os PDFs de origem já estiverem protegidos por senha, forneça a senha de descriptografia de cada documento ao carregar com fromFile(). Tentar mesclar um documento criptografado sem fornecer sua senha resultará em um erro.
Como mesclo PDFs e adiciono uma assinatura digital?
Mesclar PDFs e, em seguida, assinando imediatamente o resultado, produz um único documento assinado que cobre todo o conteúdo de origem. Aplique applySignature() após merge() para anexar um certificado digital à saída 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
O método applySignature() insere o certificado nos metadados do PDF para que os leitores possam verificar a integridade do documento. Este fluxo de trabalho é comum em pipelines de montagem de contratos, onde várias seções são combinadas e depois co-assinadas antes da distribuição. Para um tutorial completo sobre assinatura baseada em certificado, consulte os exemplos de assinaturas digitais.
Pontas: Assine o documento mesclado em vez dos arquivos fonte individuais quando você precisar de um certificado único que ateste todo o documento combinado.
Como solucionar erros comuns de mesclagem de PDFs?
A maioria dos erros durante a mesclagem se enquadra em quatro categorias: arquivos ausentes, esgotamento de memória, entradas corrompidas e problemas de permissão. A tabela abaixo lista as causas mais frequentes e como resolver cada uma.
Erros comuns de mesclagem de PDFs e suas soluções
Erro
Causa Provável
Solução
Arquivo não encontrado
Caminho incorreto ou incompatibilidade de diretório de trabalho
Use caminhos absolutos ou verifique o diretório de trabalho do processo
Esgotamento da memória heap do JavaScript
Carregando muitos PDFs grandes simultaneamente
Aumente a memória do Node.js: node --max-old-space-size=4096 script.js
PDF inválido ou corrompido
Arquivo de origem está danificado ou não é um PDF válido
Valide arquivos de origem com um leitor de PDF antes de processar
Permissão negada
Sem acesso de leitura na entrada ou sem acesso de gravação no diretório de saída
Verifique as permissões de arquivos e diretórios no sistema operacional
PDF de origem criptografado
PDF de entrada requer uma senha para abrir
Passe a senha como o segundo argumento para fromFile()
Para problemas de configuração específicos do ambiente, o changelog do IronPDF documenta problemas conhecidos e correções. Se os problemas persistirem após verificar a tabela acima, envolva a chamada de mesclagem em um bloco try-catch para exibir a mensagem completa de erro da biblioteca.
Cuidado: Sempre valide que cada caminho de arquivo em seu array de entrada existe antes de chamar fromFile(). Um único arquivo ausente faz com que toda chamada Promise.all() seja rejeitada, cancelando a fusão.
O próprio Node.js fornece ferramentas úteis para validação de caminho antes do voo. O método Node.js fs.promises.access permite que você verifique se um arquivo é legível antes de passá-lo para o IronPDF. Para perguntas sobre como os desenvolvedores da comunidade lidam com cenários semelhantes de erro de mesclagem, o tópico Stack Overflow sobre mesclagem de PDFs no Node.js fornece contexto adicional.
Quais são os próximos passos para mesclar PDFs no Node.js?
Os exemplos acima cobrem os cenários de mesclagem mais comuns: combinação básica de arquivo, seleção de intervalo de páginas, injeção de cabeçalho e rodapé, proteção por senha e assinatura digital. IronPDF também suporta gerenciar formulários PDF em páginas mescladas, carimbar novo conteúdo no documento combinado e produzir imagens rasterizadas do resultado final para geração de visualizações.
Pronto para ver o que mais o IronPDF pode fazer? Visite a documentação do IronPDF for Node.js para o tutorial completo da API e guias adicionais de como fazer.
Perguntas frequentes
Como posso mesclar vários arquivos PDF em um no Node.js?
Carregue cada arquivo com PdfDocument.fromFile(), colete os resultados em uma matriz, passe a matriz para PdfDocument.merge() e salve o resultado com toFile(). Use Promise.all() para carregar arquivos em paralelo ao mesclar três ou mais documentos.
O IronPDF preserva a formatação ao mesclar PDFs?
Sim. O IronPDF preserva fontes, imagens, formulários incorporados e geometria de página de cada documento de origem. A saída mesclada mantém o layout original de cada página, na ordem em que os arquivos de origem aparecem na matriz de entrada.
Como posso mesclar apenas páginas específicas de cada PDF?
Chame extractPages(startPage, endPage) em cada documento carregado antes de passá-lo para PdfDocument.merge(). Os índices de página são baseados em zero, então a primeira página é o índice 0. O documento retornado contém apenas o intervalo especificado.
Posso adicionar cabeçalhos e rodapés a um PDF mesclado?
Sim. Após a mesclagem, chame addHtmlHeader() e addHtmlFooter() no documento resultante. Ambos os métodos aceitam uma string HTML e um objeto de opções. Use os marcadores {page} e {total-pages} para numeração de páginas automática.
Como posso proteger por senha um PDF mesclado no Node.js?
Chame saveAs() com um objeto de opções de segurança especificando userPassword, ownerPassword e flags de permissão, como allowUserPrinting. A userPassword é necessária para abrir o documento; a ownerPassword controla as configurações de permissão.
O que devo fazer se a mesclagem falhar com um erro de arquivo não encontrado?
Verifique se todos os caminhos dos arquivos de entrada estão corretos em relação ao diretório de trabalho do processo Node.js ou mude para caminhos absolutos. Use fs.promises.access() para confirmar se cada arquivo é legível antes de chamar PdfDocument.fromFile().
O que acontece se um dos PDFs de origem estiver criptografado?
Tentar carregar um PDF criptografado sem fornecer sua senha lançará um erro e rejeitará toda a chamada Promise.all(). Forneça a senha do documento como segundo argumento para fromFile() antes de mesclar.
Preciso de uma chave de licença para mesclar PDFs com IronPDF?
O IronPDF funciona sem uma chave de licença durante o desenvolvimento, mas os documentos de saída incluem uma marca d'água de avaliação. Configure uma chave valida para implantação em produção para remover a marca d'água e habilitar a funcionalidade 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 é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.