diff options
Diffstat (limited to 'src/server/ApiManagers/PDFManager.ts')
-rw-r--r-- | src/server/ApiManagers/PDFManager.ts | 50 |
1 files changed, 22 insertions, 28 deletions
diff --git a/src/server/ApiManagers/PDFManager.ts b/src/server/ApiManagers/PDFManager.ts index e419d3ac4..d634a241d 100644 --- a/src/server/ApiManagers/PDFManager.ts +++ b/src/server/ApiManagers/PDFManager.ts @@ -1,31 +1,26 @@ -import ApiManager, { Registration } from "./ApiManager"; -import { Method } from "../RouteManager"; -import RouteSubscriber from "../RouteSubscriber"; -import { existsSync, createReadStream, createWriteStream } from "fs"; -import * as Pdfjs from 'pdfjs-dist/legacy/build/pdf'; -import { createCanvas } from "canvas"; -const imageSize = require("probe-image-size"); -import * as express from "express"; -import * as path from "path"; -import { Directory, serverPathToFile, clientPathToFile, pathToDirectory } from "./UploadManager"; -import { red } from "colors"; -import { resolve } from "path"; +import ApiManager, { Registration } from './ApiManager'; +import { Method } from '../RouteManager'; +import RouteSubscriber from '../RouteSubscriber'; +import { existsSync, createReadStream, createWriteStream } from 'fs'; +//import * as Pdfjs from 'pdfjs-dist'; +import { createCanvas } from 'canvas'; +const imageSize = require('probe-image-size'); +import * as express from 'express'; +import { Directory, serverPathToFile, clientPathToFile, pathToDirectory } from './UploadManager'; +import { red } from 'colors'; +import { resolve } from 'path'; export default class PDFManager extends ApiManager { - protected initialize(register: Registration): void { - register({ method: Method.POST, - subscription: new RouteSubscriber("thumbnail"), + subscription: new RouteSubscriber('thumbnail'), secureHandler: async ({ req, res }) => { const { coreFilename, pageNum, subtree } = req.body; return getOrCreateThumbnail(coreFilename, pageNum, res, subtree); - } + }, }); - } - } async function getOrCreateThumbnail(coreFilename: string, pageNum: number, res: express.Response, subtree?: string): Promise<void> { @@ -51,7 +46,7 @@ async function getOrCreateThumbnail(coreFilename: string, pageNum: number, res: } async function CreateThumbnail(coreFilename: string, pageNum: number, res: express.Response, subtree?: string) { - const part1 = subtree ?? ""; + const part1 = subtree ?? ''; const filename = `${part1}${coreFilename}.pdf`; const sourcePath = resolve(pathToDirectory(Directory.pdfs), filename); const documentProxy = await Pdfjs.getDocument(sourcePath).promise; @@ -62,7 +57,7 @@ async function CreateThumbnail(coreFilename: string, pageNum: number, res: expre const renderContext = { canvasContext: context, canvasFactory: factory, - viewport + viewport, }; await page.render(renderContext).promise; const pngStream = canvas.createPNGStream(); @@ -71,11 +66,11 @@ async function CreateThumbnail(coreFilename: string, pageNum: number, res: expre const out = createWriteStream(pngFile); pngStream.pipe(out); return new Promise<void>((resolve, reject) => { - out.on("finish", () => { + out.on('finish', () => { dispatchThumbnail(res, viewport, resolved); resolve(); }); - out.on("error", error => { + out.on('error', error => { console.log(red(`In PDF thumbnail creation, encountered the following error when piping ${pngFile}:`)); console.log(error); reject(); @@ -87,30 +82,29 @@ function dispatchThumbnail(res: express.Response, { width, height }: Pdfjs.PageV res.send({ path: clientPathToFile(Directory.pdf_thumbnails, thumbnailName), width, - height + height, }); } class NodeCanvasFactory { - create = (width: number, height: number) => { const canvas = createCanvas(width, height); const context = canvas.getContext('2d'); return { canvas, - context + context, }; - } + }; reset = (canvasAndContext: any, width: number, height: number) => { canvasAndContext.canvas.width = width; canvasAndContext.canvas.height = height; - } + }; destroy = (canvasAndContext: any) => { canvasAndContext.canvas.width = 0; canvasAndContext.canvas.height = 0; canvasAndContext.canvas = null; canvasAndContext.context = null; - } + }; } |