aboutsummaryrefslogtreecommitdiff
path: root/src/server/ApiManagers/PDFManager.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/ApiManagers/PDFManager.ts')
-rw-r--r--src/server/ApiManagers/PDFManager.ts50
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;
- }
+ };
}