37 lines
1.1 KiB
TypeScript
37 lines
1.1 KiB
TypeScript
export type PageFormatId = "a4" | "letter" | "legal" | "a5" | "tabloid"
|
|
|
|
export type PageFormat = {
|
|
id: PageFormatId
|
|
label: string
|
|
widthMm: number
|
|
heightMm: number
|
|
}
|
|
|
|
/** 96 CSS px per inch, 25.4 mm per inch */
|
|
const MM_TO_PX = 96 / 25.4
|
|
|
|
export const PAGE_FORMATS: PageFormat[] = [
|
|
{ id: "a4", label: "A4", widthMm: 210, heightMm: 297 },
|
|
{ id: "letter", label: "Letter", widthMm: 216, heightMm: 279 },
|
|
{ id: "legal", label: "Legal", widthMm: 216, heightMm: 356 },
|
|
{ id: "a5", label: "A5", widthMm: 148, heightMm: 210 },
|
|
{ id: "tabloid", label: "Tabloid", widthMm: 279, heightMm: 432 },
|
|
]
|
|
|
|
export const DEFAULT_PAGE_FORMAT_ID: PageFormatId = "a4"
|
|
|
|
export function getPageFormat(id: PageFormatId): PageFormat {
|
|
return PAGE_FORMATS.find((f) => f.id === id) ?? PAGE_FORMATS[0]!
|
|
}
|
|
|
|
export function pageFormatWidthPx(format: PageFormat): number {
|
|
return Math.round(format.widthMm * MM_TO_PX)
|
|
}
|
|
|
|
export function pageFormatHeightPx(format: PageFormat): number {
|
|
return Math.round(format.heightMm * MM_TO_PX)
|
|
}
|
|
|
|
/** Approximate print margins (1 inch) */
|
|
export const PAGE_MARGIN_PX = Math.round(25.4 * MM_TO_PX)
|