UNPKG

compare-pdf-plus

Version:

Standalone node module that compares PDFs

92 lines (90 loc) 3.05 kB
import { getDocument } from 'pdfjs-dist/legacy/build/pdf.mjs'; import fs from 'fs-extra'; import { Image, createCanvas } from 'canvas'; // src/engines/native.ts var CMAP_URL = "../../node_modules/pdfjs-dist/cmaps/"; var CMAP_PACKED = true; var STANDARD_FONT_DATA_URL = "../../node_modules/pdfjs-dist/standard_fonts/"; var pdfPageToPng = async (pdfDocument, pageNumber, filename, isSinglePage = false) => { const page = await pdfDocument.getPage(pageNumber); const viewport = page.getViewport({ scale: 1.38889 }); const canvasFactory = pdfDocument.canvasFactory; const canvasAndContext = canvasFactory.create( viewport.width, viewport.height ); const renderContext = { canvasContext: canvasAndContext.context, viewport }; await page.render(renderContext).promise; const image = canvasAndContext.canvas.toBuffer("image/png"); const pngFileName = isSinglePage ? filename : filename.replace(".png", `-${pageNumber - 1}.png`); fs.writeFileSync(pngFileName, image); }; var pdfToPng = async (pdfDetails, pngFilePath, config) => { const pdfData = new Uint8Array(pdfDetails.buffer); const pdfDocument = await getDocument({ disableFontFace: config.settings?.disableFontFace ?? true, data: pdfData, cMapUrl: CMAP_URL, cMapPacked: CMAP_PACKED, standardFontDataUrl: STANDARD_FONT_DATA_URL, verbosity: config.settings?.verbosity ?? 0 }).promise; for (let index = 1; index <= pdfDocument.numPages; index++) { await pdfPageToPng( pdfDocument, index, pngFilePath, pdfDocument.numPages === 1 ); } }; var applyMask = async (pngFilePath, coordinates = { x0: 0, y0: 0, x1: 0, y1: 0 }, color = "black") => { return new Promise((resolve, reject) => { const data = fs.readFileSync(pngFilePath); const img = new Image(); img.src = data; const canvas = createCanvas(img.width, img.height); const ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0, img.width, img.height); ctx.beginPath(); ctx.fillRect( coordinates.x0, coordinates.y0, coordinates.x1 - coordinates.x0, coordinates.y1 - coordinates.y0 ); fs.writeFileSync(pngFilePath, canvas.toBuffer()); resolve(); }); }; var applyCrop = async (pngFilePath, coordinates = { width: 0, height: 0, x: 0, y: 0 }, index = 0) => { return new Promise((resolve, reject) => { const data = fs.readFileSync(pngFilePath); const img = new Image(); img.src = data; const canvas = createCanvas(coordinates.width, coordinates.height); const ctx = canvas.getContext("2d"); ctx.drawImage( img, coordinates.x, coordinates.y, coordinates.width, coordinates.height, 0, 0, coordinates.width, coordinates.height ); fs.writeFileSync( pngFilePath.replace(".png", `-${index}.png`), canvas.toBuffer() ); resolve(); }); }; export { applyCrop, applyMask, pdfPageToPng, pdfToPng }; //# sourceMappingURL=native-3O5WQ2H7.js.map //# sourceMappingURL=native-3O5WQ2H7.js.map