fastify-xpdf
mergePDFs
Merge multiple PDF buffers into a single document using pdf-lib.
mergePDFs
Merge an ordered array of PDF buffers into a single document using pdf-lib. All pages from each source are appended in order.
Signature
fastify.xPDF.mergePDFs(
pdfBuffers: Buffer[],
options?: MergeOptions,
): Promise<MergeResult>
interface MergeOptions {
filename?: string
saveToStorage?: boolean
folder?: string
}
interface MergeResult {
buffer: Buffer
filename: string
size: number
pageCount: number // total pages in merged output
storageKey?: string
url?: string
}
Params
| Name | Type | Required | Description |
|---|---|---|---|
pdfBuffers | Buffer[] | Yes | Non-empty array of valid PDF buffers, merged in order |
options.filename | string | No | Output filename |
options.saveToStorage | boolean | No | Upload result to xStorage |
options.folder | string | No | Storage folder override |
Returns
MergeResult — includes pageCount (total pages in the merged document) in addition to the standard PdfResult fields.
Throws
| Error | When |
|---|---|
[xPDF] pdfBuffers must be a non-empty array... | pdfBuffers is empty, null, or not an array |
[xPDF] One or more invalid PDF buffers provided | Any buffer in the array doesn't start with %PDF |
[xPDF] Failed to process PDF during merge | Corrupt or unreadable PDF encountered |
Examples
Combine cover page, body, and appendix
fastify.post("/contracts/:id/compile", async (request, reply) => {
const [cover, body, appendix] = await Promise.all([
fastify.xPDF.generateFromHtml(coverHtml),
fastify.xPDF.generateFromHtml(bodyHtml),
fastify.xPDF.generateFromHtml(appendixHtml),
]);
const { buffer, pageCount, filename } = await fastify.xPDF.mergePDFs(
[cover.buffer, body.buffer, appendix.buffer],
{ filename: `contract-${request.params.id}.pdf` },
);
return reply
.header("Content-Type", "application/pdf")
.header("Content-Disposition", `attachment; filename="${filename}"`)
.send(buffer);
});
Merge multiple uploaded PDFs and save to storage
fastify.post("/documents/merge", async (request, reply) => {
const parts = await request.saveRequestFiles();
const buffers = await Promise.all(parts.map((p) => p.toBuffer()));
const { url, pageCount } = await fastify.xPDF.mergePDFs(buffers, {
saveToStorage: true,
folder: "merged",
filename: `merged-${Date.now()}.pdf`,
});
return { url, pageCount };
});
See Also
- extractPages — Extract a subset of pages before merging
- getPageCount / getMetadata — Inspect individual PDFs before merging
- fillForm — Fill forms first, then merge the results
AI Context
package: "@xenterprises/fastify-xpdf"
method: fastify.xPDF.mergePDFs(pdfBuffers, options?)
use-when: Merge multiple PDF buffers into a single document using pdf-lib
params: pdfBuffers (Buffer[]), options ({ saveToStorage, filename, folder })
returns: { buffer, size, pageCount } | { buffer, size, pageCount, storageKey, url }
