X Enterprises
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:

NameTypeRequiredDescription
pdfBufferBufferYesPDF buffer to inspect (must start with %PDF)

Returns

  • getPageCountPromise<number>, the total page count.
  • getMetadataPromise<PdfMetadata>, with all standard XMP/Info fields plus size in bytes.

Throws

ErrorWhen
[xPDF] Invalid PDF bufferBuffer 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 getPageCount to 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
Copyright © 2026