@sead/page-format-checker
v0.2.0
Published
Check whether each page of a PDF is an integer grid of panels in a known print format (DIN A4, DIN lang, business card, etc.).
Readme
@sead/page-format-checker
Check whether each page of a PDF is an integer grid of panels in a known print format (DIN A4, DIN lang, business card, etc.).
Given a list of allowed formats and a PDF, it tries to fit cols × rows panels onto each sheet — in either orientation — and returns the layout that matches within a configurable bleed tolerance.
Install
pnpm add @sead/page-format-checkerUsage
import { readFileSync } from 'node:fs'
import { PDFDocument } from 'pdf-lib'
import PageFormatChecker, { type PageFormat } from '@sead/page-format-checker'
const formats: PageFormat[] = [
{ id: 5, name: 'DIN A4', width: 297, height: 210, unit: 'mm' },
{ id: 12, name: 'DIN lang plus', width: 210, height: 105, unit: 'mm' },
]
const pdf = await PDFDocument.load(readFileSync('sheet.pdf'))
const checker = new PageFormatChecker(formats, { bleedToleranceMm: 3 })
const result = checker.validate(pdf, 12)
// → { valid: true, totalPanels: 2, format: {...}, panel: { width: 210, height: 105 } }API
new PageFormatChecker(formats, options?)
| option | default | meaning |
| ------------------- | ------- | -------------------------------------------------------------------- |
| bleedToleranceMm | 3 | max difference (in mm) between sheet size and cols × panel grid |
| maxPanelsPerSheet | 16 | reject layouts with more than this many panels (sanity guard) |
| pxPerInch | 96 | DPI used when a format is declared in px |
| verbose | false | log fit attempts to console.log |
PageFormat shape:
{ id: string | number, name?: string, width: number, height: number, unit: 'mm' | 'cm' | 'px' }checker.validate(pdf, pageFormatId)
pdf is anything that satisfies the Pdf interface (getPageCount(), getPage(i).getWidth()/getHeight() returning PDF points). pdf-lib's PDFDocument works out of the box.
Returns either:
// success — every page fit
{ valid: true, format, panel: { width, height }, totalPanels }
// failure — bare on layout-mismatch, with `error` on resolution failure
{ valid: false, error?: string }totalPanels is the sum of panels detected across all pages. error is set only when the format id is unknown or the unit is unsupported.
Development
pnpm install
pnpm test
pnpm buildLicense
MIT
