Added endpoint: scale-pages

This commit is contained in:
Saud Fatayerji 2023-11-19 01:19:57 +03:00
parent 7503d70377
commit facf1553ec
2 changed files with 32 additions and 4 deletions

View File

@ -2,6 +2,7 @@
import Operations from '../../utils/pdf-operations';
import { respondWithPdfFile, respondWithPdfFiles, response_mustHaveExactlyOneFile } from '../../utils/endpoint-utils';
import { PdfFile, PdfFileSchema } from '@stirling-pdf/shared-operations/src/wrappers/PdfFile'
import { ScalePageSchema } from '@stirling-pdf/shared-operations/src/functions/scalePage'
import express, { Request, Response, RequestHandler } from 'express';
const router = express.Router();
@ -84,7 +85,8 @@ registerEndpoint("/impose", "", upload.single("file"), Operations.impose, Joi.ob
format: Joi.string().required(),
}).required());
//Adjust page size/scale
registerEndpoint("/scale-pages", "", upload.single("file"), Operations.scalePage, ScalePageSchema.required());
//Auto Split Pages
//Adjust Colours/Contrast
//Crop

View File

@ -1,6 +1,32 @@
import Joi from 'joi';
import { PDFPage } from 'pdf-lib';
import { PdfFile, RepresentationType } from '../wrappers/PdfFile';
import { PdfFile, RepresentationType, PdfFileSchema } from '../wrappers/PdfFile';
const whSchema = Joi.string().custom((value, helpers) => {
console.log("value.pageSize", typeof value)
try {
const obj = JSON.parse(value);
if (!obj.width && !obj.height) {
return helpers.error('any.required', { message: 'At least one of width/height must be present' });
}
if (typeof obj.width != 'number' && typeof obj.width != 'undefined') {
return helpers.error('any.invalid', { message: 'Width must be a number if present' });
}
if (typeof obj.height != 'number' && typeof obj.height != 'undefined') {
return helpers.error('any.invalid', { message: 'Height must be a number if present' });
}
return obj;
} catch (error) {
return helpers.error('any.invalid', { message: 'Value must be a valid JSON' });
}
});
export const ScalePageSchema = Joi.object({
file: PdfFileSchema.required(),
pageSize: Joi.alternatives().try(whSchema, Joi.array().items(whSchema)).required(),
});
export type ScalePageParamsType = {
file: PdfFile;
@ -29,10 +55,10 @@ export async function scalePage(params: ScalePageParamsType): Promise<PdfFile> {
function resize(page: PDFPage, newSize: {width?:number,height?:number}) {
const calculatedSize = calculateSize(page, newSize);
page.setSize(calculatedSize.width, calculatedSize.height);
const xRatio = calculatedSize.width / page.getWidth();
const yRatio = calculatedSize.height / page.getHeight();
page.setSize(calculatedSize.width, calculatedSize.height);
page.scaleContent(xRatio, yRatio);
}