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
JavaScript
;
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,
};
}