From 9bca4848f30f956bccf322e2585e1cda691296e2 Mon Sep 17 00:00:00 2001 From: Saud Fatayerji Date: Sat, 18 Nov 2023 19:56:45 +0300 Subject: [PATCH] Added remove pages --- .../src/routes/api/operations-controller.ts | 5 +++++ .../src/functions/removePages.ts | 21 +++++++++++++++++++ shared-operations/src/index.ts | 3 +++ 3 files changed, 29 insertions(+) create mode 100644 shared-operations/src/functions/removePages.ts diff --git a/server-node/src/routes/api/operations-controller.ts b/server-node/src/routes/api/operations-controller.ts index 3d57e405..5e7484a0 100644 --- a/server-node/src/routes/api/operations-controller.ts +++ b/server-node/src/routes/api/operations-controller.ts @@ -73,6 +73,11 @@ registerEndpoint("/rotate-pdf", "", upload.single("file"), Operations.rotatePage rotation: Joi.alternatives().try(Joi.number(), Joi.array().items(Joi.number())).required(), }).required()); +registerEndpoint("/remove-pages", "", upload.single("file"), Operations.removePages, Joi.object({ + file: PdfFileSchema.required(), + pageSelector: Joi.string().required(), +}).required()); + //Remove Pages //impose //Adjust page size/scale diff --git a/shared-operations/src/functions/removePages.ts b/shared-operations/src/functions/removePages.ts new file mode 100644 index 00000000..6174e12c --- /dev/null +++ b/shared-operations/src/functions/removePages.ts @@ -0,0 +1,21 @@ + +import { PdfFile } from '../wrappers/PdfFile.js'; +import { getPages } from './common/getPagesByIndex.js'; +import { invertSelection, parsePageIndexSpecification } from './common/pageIndexesUtils.js'; + +export type RemovePagesParamsType = { + file: PdfFile; + pageSelector: string; +} +export async function removePages(params: RemovePagesParamsType) { + const { file, pageSelector } = params; + const pdfDoc = await file.pdfLibDocument; + const pageCount = pdfDoc.getPageCount(); + + const pageSelection = parsePageIndexSpecification(pageSelector, pageCount); + const pagesToKeep = invertSelection(pageSelection, pageCount); + + const newFile = await getPages(file, pagesToKeep); + newFile.filename += "_removedPages" + return newFile; +} \ No newline at end of file diff --git a/shared-operations/src/index.ts b/shared-operations/src/index.ts index 13fe808c..100e590b 100644 --- a/shared-operations/src/index.ts +++ b/shared-operations/src/index.ts @@ -4,6 +4,7 @@ import { extractPages, ExtractPagesParamsType } from "./functions/extractPages"; import { impose, ImposeParamsType } from "./functions/impose"; import { mergePDFs, MergeParamsType } from './functions/mergePDFs'; import { removeBlankPages, RemoveBlankPagesParamsType } from "./functions/removeBlankPages"; +import { removePages, RemovePagesParamsType } from "./functions/removePages"; import { rotatePages, RotateParamsType } from './functions/rotatePages'; import { scaleContent, ScaleContentParamsType} from './functions/scaleContent'; import { scalePage, ScalePageParamsType } from './functions/scalePage'; @@ -22,6 +23,7 @@ const toExport = { impose, mergePDFs, removeBlankPages, + removePages, rotatePages, scaleContent, scalePage, @@ -37,6 +39,7 @@ export type OperationsParametersBaseType = { impose: ImposeParamsType; mergePDFs: MergeParamsType; removeBlankPages: RemoveBlankPagesParamsType; + removePages: RemovePagesParamsType; rotatePages: RotateParamsType; scaleContent: ScaleContentParamsType; scalePage: ScalePageParamsType;