mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2025-05-24 01:16:29 +02:00
Added endpoint: scale-pages
This commit is contained in:
parent
7503d70377
commit
facf1553ec
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user