anything-llm/collector/utils/OCRLoader/CanvasFactory.js
2025-02-14 10:31:06 -08:00

52 lines
1.6 KiB
JavaScript

/**
* This is a factory for creating a canvas and context in Node.js
* it is used to create a canvas and context for the PDFLoader for turning the PDF into an image
* so we can later use the image to extract text from the PDF.
*/
class NodeCanvasFactory {
constructor() {
this.CanvasModule = null;
}
async init() {
this.CanvasModule = await import("canvas");
this.Image = this.CanvasModule.Image;
}
/**
* Creates a canvas and context for the PDFLoader
* @param {number} width - The width of the canvas
* @param {number} height - The height of the canvas
* @param {boolean} transparent - Whether the canvas is transparent
* @returns {{canvas: HTMLCanvasElement, context: CanvasRenderingContext2D}} - The canvas and context
*/
create(width, height, transparent = false) {
const canvas = this.CanvasModule.createCanvas(width, height);
const context = canvas.getContext("2d", { alpha: transparent });
if (transparent) context.clearRect(0, 0, width, height);
return {
canvas,
context,
};
}
/**
* Required for the PDFLoader pdfjs interation - do not remove or use directly.
*/
reset(canvasAndContext, width, height) {
canvasAndContext.canvas.width = width;
canvasAndContext.canvas.height = height;
}
/**
* Required for the PDFLoader pdfjs interation - do not remove or use directly.
*/
destroy(canvasAndContext) {
canvasAndContext.canvas.width = 0;
canvasAndContext.canvas.height = 0;
canvasAndContext.canvas = null;
canvasAndContext.context = null;
}
}
module.exports = NodeCanvasFactory;