fastify-xpdf
getPageCount / getMetadata
Get page count or full metadata (title, author, dates, size) from a PDF buffer using pdf-lib.
getPageCount / getMetadata
Two lightweight inspection methods that read a PDF buffer using pdf-lib. No browser or generation is involved.
Signatures
fastify.xPDF.getPageCount(pdfBuffer: Buffer): Promise<number>
fastify.xPDF.getMetadata(pdfBuffer: Buffer): Promise<PdfMetadata>
interface PdfMetadata {
pageCount: number
title: string | null
author: string | null
subject: string | null
creator: string | null
creationDate: Date | null
modificationDate: Date | null
size: number // bytes
}
Params
Both methods take a single param:
| Name | Type | Required | Description |
|---|---|---|---|
pdfBuffer | Buffer | Yes | PDF buffer to inspect (must start with %PDF) |
Returns
getPageCount—Promise<number>, the total page count.getMetadata—Promise<PdfMetadata>, with all standard XMP/Info fields plussizein bytes.
Throws
| Error | When |
|---|---|
[xPDF] Invalid PDF buffer | Buffer doesn't start with %PDF |
Examples
Validate page count before a merge
fastify.post("/documents/validate-and-merge", async (request, reply) => {
const parts = await request.saveRequestFiles();
const buffers = await Promise.all(parts.map((p) => p.toBuffer()));
const pageCounts = await Promise.all(
buffers.map((b) => fastify.xPDF.getPageCount(b)),
);
const totalPages = pageCounts.reduce((sum, n) => sum + n, 0);
if (totalPages > 200) {
return reply.code(422).send({ error: `Merge would produce ${totalPages} pages — limit is 200` });
}
const { buffer } = await fastify.xPDF.mergePDFs(buffers);
return reply.header("Content-Type", "application/pdf").send(buffer);
});
Display document metadata in an admin UI
fastify.get("/media/:id/pdf-info", async (request, reply) => {
const pdfBuffer = await fetchMediaBuffer(request.params.id);
const meta = await fastify.xPDF.getMetadata(pdfBuffer);
return {
pages: meta.pageCount,
title: meta.title,
author: meta.author,
created: meta.creationDate,
sizeKb: Math.round(meta.size / 1024),
};
});
See Also
- extractPages — Uses page count to validate indices
- mergePDFs — Use
getPageCountto guard total-page limits before merging
AI Context
package: "@xenterprises/fastify-xpdf"
methods: fastify.xPDF.getPageCount(pdfBuffer) | fastify.xPDF.getMetadata(pdfBuffer)
use-when: Inspect a PDF without generating or modifying it — getPageCount returns a number; getMetadata returns title, author, dates, page count, and byte size
