compare-pdf-plus
Version:
Standalone node module that compares PDFs
92 lines (90 loc) • 3.05 kB
JavaScript
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