UNPKG

react-pdf-builder

Version:
180 lines (179 loc) 5.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PageSizes = void 0; const pageSizes = { '4A0': [4767.87, 6740.79], '2A0': [3370.39, 4767.87], A0: [2383.94, 3370.39], A1: [1683.78, 2383.94], A2: [1190.55, 1683.78], A3: [841.89, 1190.55], A4: [595.28, 841.89], A5: [419.53, 595.28], A6: [297.64, 419.53], A7: [209.76, 297.64], A8: [147.4, 209.76], A9: [104.88, 147.4], A10: [73.7, 104.88], B0: [2834.65, 4008.19], B1: [2004.09, 2834.65], B2: [1417.32, 2004.09], B3: [1000.63, 1417.32], B4: [708.66, 1000.63], B5: [498.9, 708.66], B6: [354.33, 498.9], B7: [249.45, 354.33], B8: [175.75, 249.45], B9: [124.72, 175.75], B10: [87.87, 124.72], C0: [2599.37, 3676.54], C1: [1836.85, 2599.37], C2: [1298.27, 1836.85], C3: [918.43, 1298.27], C4: [649.13, 918.43], C5: [459.21, 649.13], C6: [323.15, 459.21], C7: [229.61, 323.15], C8: [161.57, 229.61], C9: [113.39, 161.57], C10: [79.37, 113.39], RA0: [2437.8, 3458.27], RA1: [1729.13, 2437.8], RA2: [1218.9, 1729.13], RA3: [864.57, 1218.9], RA4: [609.45, 864.57], SRA0: [2551.18, 3628.35], SRA1: [1814.17, 2551.18], SRA2: [1275.59, 1814.17], SRA3: [907.09, 1275.59], SRA4: [637.8, 907.09], EXECUTIVE: [521.86, 756.0], FOLIO: [612.0, 936.0], LEGAL: [612.0, 1008.0], LETTER: [612.0, 792.0], TABLOID: [792.0, 1224.0], ID1: [153, 243], }; /** Contains utilities for [page sizes](https://justinmahar.github.io/react-pdf-builder/?path=/docs/documentation-page-sizes--docs). */ class PageSizes { } exports.PageSizes = PageSizes; PageSizes.VALID_ORIENTATIONS = ['portrait', 'landscape']; /** * Get page orientation. Defaults to portrait * * @param {Object} page object * @returns {string} page orientation */ PageSizes.getOrientation = (page) => { var _a; const value = ((_a = page.props) === null || _a === void 0 ? void 0 : _a.orientation) || 'portrait'; return PageSizes.VALID_ORIENTATIONS.includes(value) ? value : 'portrait'; }; /** * Return true if page is landscape * * @param {Object} page instance * @returns {boolean} is page landscape */ PageSizes.isLandscape = (page) => PageSizes.getOrientation(page) === 'landscape'; // Page sizes for 72dpi. 72dpi is used internally by pdfkit. PageSizes.PAGE_SIZES = pageSizes; /** * Parses scalar value in value and unit pairs * * @param {string} value scalar value * @returns {Object} parsed value */ PageSizes.parseValue = (value) => { const match = /^(-?\d*\.?\d+)(in|mm|cm|pt|px)?$/g.exec(value); return match ? { value: parseFloat(match[1]), unit: match[2] || 'pt' } : { value, unit: undefined }; }; /** * Transform given scalar value to 72dpi equivalent of size * * @param {string} value styles value * @param {number} inputDpi user defined dpi * @returns {Object} transformed value */ PageSizes.transformUnit = (value, inputDpi) => { const scalar = PageSizes.parseValue(value); const outputDpi = 72; const mmFactor = (1 / 25.4) * outputDpi; const cmFactor = (1 / 2.54) * outputDpi; switch (scalar.unit) { case 'in': return scalar.value * outputDpi; case 'mm': return scalar.value * mmFactor; case 'cm': return scalar.value * cmFactor; case 'px': return Math.round(scalar.value * (outputDpi / inputDpi)); default: return scalar.value; } }; PageSizes.transformUnits = ({ width, height }, dpi) => ({ width: PageSizes.transformUnit(width, dpi), height: PageSizes.transformUnit(height, dpi), }); /** * Transforms array into size object * * @param {number[] | string[]} v array * @returns {{ width: number | string, height: number | string }} size object with width and height */ PageSizes.toSizeObject = (v) => ({ width: v[0], height: v[1] }); /** * Flip size object * * @param {{ width: number, height: number }} v size object * @returns {{ width: number, height: number }} flipped size object */ PageSizes.flipSizeObject = (v) => ({ width: v.height, height: v.width }); /** * Returns size object from a given string * * @param {string} v page size string * @returns {{ width: number, height: number }} size object with width and height */ PageSizes.getStringSize = (v) => { return PageSizes.toSizeObject(PageSizes.PAGE_SIZES[v]); }; /** * Returns size object from a single number * * @param {number|string} n page size number * @returns {{ width: number|string, height: number|string }} size object with width and height */ PageSizes.getNumberSize = (n) => PageSizes.toSizeObject([n, n]); /** * Return page size in an object { width, height } * * @param {Object} page instance * @returns {{ width: number, height: number }} size object with width and height */ PageSizes.getSize = (page) => { var _a, _b; const value = (((_a = page.props) === null || _a === void 0 ? void 0 : _a.size) || 'A4'); const dpi = parseFloat(`${((_b = page.props) === null || _b === void 0 ? void 0 : _b.dpi) || 72}`); const type = typeof value; /** * @type {{ width: number, height: number }} */ let size; if (type === 'string') { size = PageSizes.getStringSize(value); } else if (Array.isArray(value)) { size = PageSizes.transformUnits(PageSizes.toSizeObject(value), dpi); } else if (type === 'number') { size = PageSizes.transformUnits(PageSizes.getNumberSize(value), dpi); } else { size = PageSizes.transformUnits(value, dpi); } return PageSizes.isLandscape(page) ? PageSizes.flipSizeObject(size) : size; };