Socket
Socket
Sign inDemoInstall

pdf-to-png-converter

Package Overview
Dependencies
Maintainers
1
Versions
27
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pdf-to-png-converter - npm Package Compare versions

Comparing version 3.1.0 to 3.2.0

2

out/const.d.ts

@@ -0,3 +1,5 @@

import { DocumentInitParameters } from 'pdfjs-dist/types/src/display/api';
import { PdfToPngOptions } from './types/pdf.to.png.options';
export declare const PDF_TO_PNG_OPTIONS_DEFAULTS: PdfToPngOptions;
export declare const DOCUMENT_INIT_PARAMS_DEFAULTS: DocumentInitParameters;
//# sourceMappingURL=const.d.ts.map
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.PDF_TO_PNG_OPTIONS_DEFAULTS = void 0;
exports.DOCUMENT_INIT_PARAMS_DEFAULTS = exports.PDF_TO_PNG_OPTIONS_DEFAULTS = void 0;
const node_path_1 = require("node:path");
exports.PDF_TO_PNG_OPTIONS_DEFAULTS = {

@@ -13,2 +14,7 @@ viewportScale: 1,

};
exports.DOCUMENT_INIT_PARAMS_DEFAULTS = {
cMapUrl: (0, node_path_1.join)(__dirname, '../../node_modules/pdfjs-dist/cmaps/'),
cMapPacked: true,
standardFontDataUrl: (0, node_path_1.join)(__dirname, '../../node_modules/pdfjs-dist/standard_fonts/'),
};
//# sourceMappingURL=const.js.map

4

out/index.d.ts
export { pdfToPng } from './pdf.to.png';
export { PdfToPngOptions } from './types/pdf.to.png.options';
export { PngPageOutput } from './types/png.page.output';
export type { PdfToPngOptions } from './types/pdf.to.png.options';
export type { PngPageOutput } from './types/png.page.output';
//# sourceMappingURL=index.d.ts.map
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });

@@ -6,75 +15,77 @@ exports.pdfToPng = void 0;

const node_path_1 = require("node:path");
const pdf_1 = require("pdfjs-dist/legacy/build/pdf");
const const_1 = require("./const");
const node_canvas_factory_1 = require("./node.canvas.factory");
const props_to_pdf_doc_init_params_1 = require("./props.to.pdf.doc.init.params");
async function pdfToPng(pdfFilePathOrBuffer, props) {
const isBuffer = Buffer.isBuffer(pdfFilePathOrBuffer);
const pdfFileBuffer = isBuffer
? pdfFilePathOrBuffer
: await node_fs_1.promises.readFile(pdfFilePathOrBuffer);
const pdfDocInitParams = (0, props_to_pdf_doc_init_params_1.propsToPdfDocInitParams)(props);
pdfDocInitParams.data = new Uint8Array(pdfFileBuffer);
const canvasFactory = new node_canvas_factory_1.NodeCanvasFactory();
pdfDocInitParams.canvasFactory = canvasFactory;
const pdfDocument = await (0, pdf_1.getDocument)(pdfDocInitParams).promise;
const targetedPageNumbers = props?.pagesToProcess !== undefined
? props.pagesToProcess
: Array.from({ length: pdfDocument.numPages }, (_, index) => index + 1);
if (props?.strictPagesToProcess && targetedPageNumbers.some((pageNum) => pageNum < 1)) {
throw new Error('Invalid pages requested, page number must be >= 1');
}
if (props?.strictPagesToProcess && targetedPageNumbers.some((pageNum) => pageNum > pdfDocument.numPages)) {
throw new Error('Invalid pages requested, page number must be <= total pages');
}
if (props?.outputFolder) {
await node_fs_1.promises.mkdir(props.outputFolder, { recursive: true });
}
let pageName;
if (props?.outputFileMask) {
pageName = props.outputFileMask;
}
if (!pageName && !isBuffer) {
pageName = (0, node_path_1.parse)(pdfFilePathOrBuffer).name;
}
if (!pageName) {
pageName = const_1.PDF_TO_PNG_OPTIONS_DEFAULTS.outputFileMask;
}
const pngPagesOutput = [];
for (const pageNumber of targetedPageNumbers) {
if (pageNumber > pdfDocument.numPages || pageNumber < 1) {
continue;
function pdfToPng(pdfFilePathOrBuffer, props) {
return __awaiter(this, void 0, void 0, function* () {
const pdf = yield import('pdfjs-dist/legacy/build/pdf.mjs');
const isBuffer = Buffer.isBuffer(pdfFilePathOrBuffer);
const pdfFileBuffer = isBuffer
? pdfFilePathOrBuffer
: yield node_fs_1.promises.readFile(pdfFilePathOrBuffer);
const pdfDocInitParams = (0, props_to_pdf_doc_init_params_1.propsToPdfDocInitParams)(props);
pdfDocInitParams.data = new Uint8Array(pdfFileBuffer);
const canvasFactory = new node_canvas_factory_1.NodeCanvasFactory();
pdfDocInitParams.canvasFactory = canvasFactory;
const pdfDocument = yield pdf.getDocument(pdfDocInitParams).promise;
const targetedPageNumbers = (props === null || props === void 0 ? void 0 : props.pagesToProcess) !== undefined
? props.pagesToProcess
: Array.from({ length: pdfDocument.numPages }, (_, index) => index + 1);
if ((props === null || props === void 0 ? void 0 : props.strictPagesToProcess) && targetedPageNumbers.some((pageNum) => pageNum < 1)) {
throw new Error('Invalid pages requested, page number must be >= 1');
}
const page = await pdfDocument.getPage(pageNumber);
const viewport = page.getViewport({
scale: props?.viewportScale !== undefined
? props.viewportScale
: const_1.PDF_TO_PNG_OPTIONS_DEFAULTS.viewportScale,
});
const canvasAndContext = canvasFactory.create(viewport.width, viewport.height);
const renderContext = {
canvasContext: canvasAndContext.context,
viewport,
};
await page.render(renderContext).promise;
const pngPageOutput = {
pageNumber,
name: `${pageName}_page_${pageNumber}.png`,
content: canvasAndContext.canvas.toBuffer(),
path: '',
width: viewport.width,
height: viewport.height,
};
canvasFactory.destroy(canvasAndContext);
page.cleanup();
if (props?.outputFolder) {
pngPageOutput.path = (0, node_path_1.resolve)(props.outputFolder, pngPageOutput.name);
await node_fs_1.promises.writeFile(pngPageOutput.path, pngPageOutput.content);
if ((props === null || props === void 0 ? void 0 : props.strictPagesToProcess) && targetedPageNumbers.some((pageNum) => pageNum > pdfDocument.numPages)) {
throw new Error('Invalid pages requested, page number must be <= total pages');
}
pngPagesOutput.push(pngPageOutput);
}
await pdfDocument.cleanup();
return pngPagesOutput;
if (props === null || props === void 0 ? void 0 : props.outputFolder) {
yield node_fs_1.promises.mkdir(props.outputFolder, { recursive: true });
}
let pageName;
if (props === null || props === void 0 ? void 0 : props.outputFileMask) {
pageName = props.outputFileMask;
}
if (!pageName && !isBuffer) {
pageName = (0, node_path_1.parse)(pdfFilePathOrBuffer).name;
}
if (!pageName) {
pageName = const_1.PDF_TO_PNG_OPTIONS_DEFAULTS.outputFileMask;
}
const pngPagesOutput = [];
for (const pageNumber of targetedPageNumbers) {
if (pageNumber > pdfDocument.numPages || pageNumber < 1) {
continue;
}
const page = yield pdfDocument.getPage(pageNumber);
const viewport = page.getViewport({
scale: (props === null || props === void 0 ? void 0 : props.viewportScale) !== undefined
? props.viewportScale
: const_1.PDF_TO_PNG_OPTIONS_DEFAULTS.viewportScale,
});
const canvasAndContext = canvasFactory.create(viewport.width, viewport.height);
const renderContext = {
canvasContext: canvasAndContext.context,
viewport,
};
yield page.render(renderContext).promise;
const pngPageOutput = {
pageNumber,
name: `${pageName}_page_${pageNumber}.png`,
content: canvasAndContext.canvas.toBuffer(),
path: '',
width: viewport.width,
height: viewport.height,
};
canvasFactory.destroy(canvasAndContext);
page.cleanup();
if (props === null || props === void 0 ? void 0 : props.outputFolder) {
pngPageOutput.path = (0, node_path_1.resolve)(props.outputFolder, pngPageOutput.name);
yield node_fs_1.promises.writeFile(pngPageOutput.path, pngPageOutput.content);
}
pngPagesOutput.push(pngPageOutput);
}
yield pdfDocument.cleanup();
return pngPagesOutput;
});
}
exports.pdfToPng = pdfToPng;
//# sourceMappingURL=pdf.to.png.js.map

@@ -7,19 +7,12 @@ "use strict";

function propsToPdfDocInitParams(props) {
const cMapUrl = '../node_modules/pdfjs-dist/cmaps/';
const cMapPacked = true;
const standardFontDataUrl = '../node_modules/pdfjs-dist/standard_fonts/';
const pdfDocInitParams = {
cMapUrl,
cMapPacked,
standardFontDataUrl,
};
pdfDocInitParams.verbosity = props?.verbosityLevel !== undefined ? props?.verbosityLevel : verbosity_level_1.VerbosityLevel.ERRORS;
const pdfDocInitParams = Object.assign({}, const_1.DOCUMENT_INIT_PARAMS_DEFAULTS);
pdfDocInitParams.verbosity = (props === null || props === void 0 ? void 0 : props.verbosityLevel) !== undefined ? props === null || props === void 0 ? void 0 : props.verbosityLevel : verbosity_level_1.VerbosityLevel.ERRORS;
pdfDocInitParams.disableFontFace =
props?.disableFontFace !== undefined ? props.disableFontFace : const_1.PDF_TO_PNG_OPTIONS_DEFAULTS.disableFontFace;
(props === null || props === void 0 ? void 0 : props.disableFontFace) !== undefined ? props.disableFontFace : const_1.PDF_TO_PNG_OPTIONS_DEFAULTS.disableFontFace;
pdfDocInitParams.useSystemFonts =
props?.useSystemFonts !== undefined ? props.useSystemFonts : const_1.PDF_TO_PNG_OPTIONS_DEFAULTS.useSystemFonts;
(props === null || props === void 0 ? void 0 : props.useSystemFonts) !== undefined ? props.useSystemFonts : const_1.PDF_TO_PNG_OPTIONS_DEFAULTS.useSystemFonts;
pdfDocInitParams.enableXfa =
props?.enableXfa !== undefined ? props.enableXfa : const_1.PDF_TO_PNG_OPTIONS_DEFAULTS.enableXfa;
(props === null || props === void 0 ? void 0 : props.enableXfa) !== undefined ? props.enableXfa : const_1.PDF_TO_PNG_OPTIONS_DEFAULTS.enableXfa;
pdfDocInitParams.password =
props?.pdfFilePassword !== undefined ? props?.pdfFilePassword : const_1.PDF_TO_PNG_OPTIONS_DEFAULTS.pdfFilePassword;
(props === null || props === void 0 ? void 0 : props.pdfFilePassword) !== undefined ? props === null || props === void 0 ? void 0 : props.pdfFilePassword : const_1.PDF_TO_PNG_OPTIONS_DEFAULTS.pdfFilePassword;
return pdfDocInitParams;

@@ -26,0 +19,0 @@ }

{
"name": "pdf-to-png-converter",
"version": "3.1.0",
"version": "3.2.0",
"description": "Node.js utility to convert PDF file/buffer pages to PNG files/buffers with no native dependencies.",

@@ -28,33 +28,39 @@ "keywords": [

"scripts": {
"build": "npm run clean && npm run tsc",
"clean": "rimraf ./out ./coverage ./test-results",
"prebuild": "npm run clean",
"build": "tsc --pretty --project tsconfig.prod.json",
"build:test": "tsc --pretty --project tsconfig.test.json",
"clean": "npx rimraf ./out ./coverage ./test-results",
"docker:build": "docker build --compress -t test-pdf-to-png-converter .",
"predocker:run": "npm run clean",
"docker:run": "docker run --rm -it -v $PWD/test-results:/usr/pkg/test-results test-pdf-to-png-converter",
"docker:test": "jest",
"predocker:test": "tsc --project tsconfig.test.json",
"docker:test": "mocha",
"license-checker": "npx license-checker --production --onlyAllow 'MIT; MIT OR X11; BSD; ISC; Apache-2.0; Unlicense'",
"lint": "eslint .",
"lint:fix": "npm run lint -- --fix",
"pretest": "npm run clean",
"test": "jest",
"test:docker": "npm run docker:build && npm run docker:run",
"tsc": "tsc --pretty"
"pretest": "npm run clean && npm run build:test",
"test": "mocha",
"test:docker": "npm run docker:build && npm run docker:run"
},
"dependencies": {
"canvas": "^2.11.2",
"pdfjs-dist": "^3.8.162"
"pdfjs-dist": "^4.0.379"
},
"devDependencies": {
"@types/jest": "^29.5.2",
"@types/node": "^20.3.3",
"@typescript-eslint/eslint-plugin": "^5.60.1",
"@typescript-eslint/parser": "^5.60.1",
"eslint": "^8.44.0",
"jest": "^29.5.0",
"@types/chai": "^4.3.12",
"@types/mocha": "^10.0.6",
"@types/node": "^20.11.27",
"@typescript-eslint/eslint-plugin": "^7.2.0",
"@typescript-eslint/parser": "^7.2.0",
"chai": "^4.4.1",
"chai-as-promised": "^7.1.1",
"eslint": "^8.57.0",
"mocha": "^10.3.0",
"png-visual-compare": "^1.2.0",
"rimraf": "^5.0.1",
"ts-jest": "^29.1.1",
"ts-node": "^10.9.1",
"typescript": "^5.1.6"
"ts-node": "^10.9.2",
"typescript": "^5.4.2"
},
"engines": {
"node": ">=16.0.0"
}
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc