UNPKG

pdf-to-png-converter

Version:

Node.js utility to convert PDF file/buffer pages to PNG files/buffers. No build-time compilation required — pre-built native binaries included for all major platforms.

59 lines (58 loc) 3.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.normalizePdfToPngOptions = normalizePdfToPngOptions; const const_js_1 = require("./const.js"); const verbosity_level_js_1 = require("./types/verbosity.level.js"); function normalizePdfToPngOptions(props) { const viewportScale = props?.viewportScale ?? const_js_1.PDF_TO_PNG_OPTIONS_DEFAULTS.viewportScale; if (typeof viewportScale !== 'number' || !Number.isFinite(viewportScale) || viewportScale <= 0 || viewportScale > const_js_1.MAX_VIEWPORT_SCALE) { throw new Error(`viewportScale must be a finite number greater than 0 and at most ${const_js_1.MAX_VIEWPORT_SCALE}, received: ${viewportScale}`); } const outputFolder = props?.outputFolder; if (outputFolder?.trim() === '') { throw new Error('outputFolder must not be empty'); } const verbosityLevel = props?.verbosityLevel ?? verbosity_level_js_1.VerbosityLevel.ERRORS; if (verbosityLevel !== verbosity_level_js_1.VerbosityLevel.ERRORS && verbosityLevel !== verbosity_level_js_1.VerbosityLevel.WARNINGS && verbosityLevel !== verbosity_level_js_1.VerbosityLevel.INFOS) { throw new Error('verbosityLevel must be 0, 1, or 5'); } const pagesToProcess = props?.pagesToProcess?.map((pageNumber) => { if (!Number.isInteger(pageNumber) || pageNumber <= 0) { throw new Error(`pagesToProcess contains invalid page number: ${pageNumber}`); } return pageNumber; }); const processPagesInParallel = props?.processPagesInParallel ?? false; const renderInWorkerThreads = props?.renderInWorkerThreads ?? false; const concurrencyLimit = props?.concurrencyLimit ?? const_js_1.PDF_TO_PNG_OPTIONS_DEFAULTS.concurrencyLimit; // concurrencyLimit doubles as the worker-pool size, so worker mode validates it too. if (processPagesInParallel || renderInWorkerThreads) { if (!Number.isInteger(concurrencyLimit) || concurrencyLimit < 1) { throw new Error(`concurrencyLimit must be a positive integer >= 1, received: ${concurrencyLimit}`); } if (concurrencyLimit > const_js_1.MAX_CONCURRENCY_LIMIT) { throw new Error(`concurrencyLimit must be between 1 and ${const_js_1.MAX_CONCURRENCY_LIMIT}, received: ${concurrencyLimit}`); } } const maxInputBytes = props?.maxInputBytes ?? const_js_1.PDF_TO_PNG_OPTIONS_DEFAULTS.maxInputBytes; if (!Number.isInteger(maxInputBytes) || maxInputBytes <= 0) { throw new Error(`maxInputBytes must be a positive integer, received: ${maxInputBytes}`); } return { viewportScale, disableFontFace: props?.disableFontFace ?? const_js_1.PDF_TO_PNG_OPTIONS_DEFAULTS.disableFontFace, useSystemFonts: props?.useSystemFonts ?? const_js_1.PDF_TO_PNG_OPTIONS_DEFAULTS.useSystemFonts, enableXfa: props?.enableXfa ?? const_js_1.PDF_TO_PNG_OPTIONS_DEFAULTS.enableXfa, pdfFilePassword: props?.pdfFilePassword ?? const_js_1.PDF_TO_PNG_OPTIONS_DEFAULTS.pdfFilePassword, outputFolder, outputFileMaskFunc: props?.outputFileMaskFunc, pagesToProcess, verbosityLevel, returnPageContent: props?.returnPageContent ?? true, returnMetadataOnly: props?.returnMetadataOnly ?? false, processPagesInParallel, renderInWorkerThreads, concurrencyLimit, maxInputBytes, }; }