mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2025-02-12 00:15:51 +01:00
added rearrange-pages endpoint
This commit is contained in:
parent
26cb467156
commit
3496a5d658
@ -63,7 +63,10 @@ registerEndpoint("/split-pdf", "_split", upload.single("file"), Operations.split
|
|||||||
pageIndexes: Joi.string().required(),
|
pageIndexes: Joi.string().required(),
|
||||||
}).required());
|
}).required());
|
||||||
|
|
||||||
//organise/arrange
|
registerEndpoint("/rearrange-pages", "", upload.single("file"), Operations.arrangePages, Joi.object({
|
||||||
|
file: PdfFileSchema.required(),
|
||||||
|
arrangementConfig: Joi.string().required(),
|
||||||
|
}).required());
|
||||||
|
|
||||||
registerEndpoint("/rotate-pdf", "", upload.single("file"), Operations.rotatePages, Joi.object({
|
registerEndpoint("/rotate-pdf", "", upload.single("file"), Operations.rotatePages, Joi.object({
|
||||||
file: PdfFileSchema.required(),
|
file: PdfFileSchema.required(),
|
||||||
|
27
shared-operations/src/functions/arrangePages.ts
Normal file
27
shared-operations/src/functions/arrangePages.ts
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
|
||||||
|
import { PdfFile } from '../wrappers/PdfFile.js';
|
||||||
|
import { Sorts } from './common/pageIndexesSorting.js';
|
||||||
|
import { getPages } from './common/getPagesByIndex.js';
|
||||||
|
import { parsePageIndexSpecification } from './common/pageIndexesUtils.js';
|
||||||
|
|
||||||
|
export type ArrangePagesParamsType = {
|
||||||
|
file: PdfFile;
|
||||||
|
arrangementConfig: string; // a member of Sorts, or a page index specification
|
||||||
|
}
|
||||||
|
export async function arrangePages(params: ArrangePagesParamsType) {
|
||||||
|
const { file, arrangementConfig } = params;
|
||||||
|
const pdfLibDocument = await file.pdfLibDocument;
|
||||||
|
const pageCount = pdfLibDocument.getPageCount();
|
||||||
|
|
||||||
|
let sortIndexes: number[];
|
||||||
|
if (arrangementConfig in Sorts) {
|
||||||
|
const sortFunction = Sorts[arrangementConfig];
|
||||||
|
sortIndexes = sortFunction(pageCount);
|
||||||
|
} else {
|
||||||
|
sortIndexes = parsePageIndexSpecification(arrangementConfig, pageCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
const newFile = await getPages(file, sortIndexes);
|
||||||
|
newFile.filename += "arrangedPages"
|
||||||
|
return newFile;
|
||||||
|
}
|
@ -1,25 +0,0 @@
|
|||||||
|
|
||||||
import { PdfFile } from '../wrappers/PdfFile.js';
|
|
||||||
import { Sorts } from './common/pageIndexesSorting.js';
|
|
||||||
import { getPages } from './common/getPagesByIndex.js';
|
|
||||||
|
|
||||||
export type SortPagesWithPresetParamsType = {
|
|
||||||
file: PdfFile;
|
|
||||||
sortPreset: string;
|
|
||||||
}
|
|
||||||
export async function sortPagesWithPreset(params: SortPagesWithPresetParamsType) {
|
|
||||||
const { file, sortPreset } = params;
|
|
||||||
const pdfLibDocument = await file.pdfLibDocument;
|
|
||||||
|
|
||||||
if (!(sortPreset in Sorts)) {
|
|
||||||
throw new Error("Supplied parameters not supported");
|
|
||||||
}
|
|
||||||
|
|
||||||
const sortFunction = Sorts[sortPreset];
|
|
||||||
const pageCount = pdfLibDocument.getPageCount();
|
|
||||||
const sortIndexes = sortFunction(pageCount);
|
|
||||||
|
|
||||||
const newFile = await getPages(file, sortIndexes);
|
|
||||||
newFile.filename += "_sortedPages"
|
|
||||||
return newFile;
|
|
||||||
}
|
|
@ -1,4 +1,5 @@
|
|||||||
|
|
||||||
|
import { arrangePages, ArrangePagesParamsType } from './functions/arrangePages'
|
||||||
import { extractPages, ExtractPagesParamsType } from "./functions/extractPages";
|
import { extractPages, ExtractPagesParamsType } from "./functions/extractPages";
|
||||||
import { impose, ImposeParamsBaseType, ImposeParamsType } from "./functions/impose";
|
import { impose, ImposeParamsBaseType, ImposeParamsType } from "./functions/impose";
|
||||||
import { mergePDFs, MergeParamsType } from './functions/mergePDFs';
|
import { mergePDFs, MergeParamsType } from './functions/mergePDFs';
|
||||||
@ -6,7 +7,6 @@ import { removeBlankPages, RemoveBlankPagesParamsType } from "./functions/remove
|
|||||||
import { rotatePages, RotateParamsType } from './functions/rotatePages';
|
import { rotatePages, RotateParamsType } from './functions/rotatePages';
|
||||||
import { scaleContent, ScaleContentParamsType} from './functions/scaleContent';
|
import { scaleContent, ScaleContentParamsType} from './functions/scaleContent';
|
||||||
import { scalePage, ScalePageParamsType } from './functions/scalePage';
|
import { scalePage, ScalePageParamsType } from './functions/scalePage';
|
||||||
import { sortPagesWithPreset, SortPagesWithPresetParamsType } from './functions/sortPagesWithPreset'
|
|
||||||
import { splitPagesByPreset, SplitPageByPresetParamsType } from './functions/splitPagesByPreset';
|
import { splitPagesByPreset, SplitPageByPresetParamsType } from './functions/splitPagesByPreset';
|
||||||
import { splitPdfByIndex, SplitPdfByIndexParamsType } from './functions/splitPdfByIndex';
|
import { splitPdfByIndex, SplitPdfByIndexParamsType } from './functions/splitPdfByIndex';
|
||||||
import { updateMetadata, UpdateMetadataParams } from "./functions/updateMetadata";
|
import { updateMetadata, UpdateMetadataParams } from "./functions/updateMetadata";
|
||||||
@ -17,6 +17,7 @@ import { Override } from '../declarations/TypeScriptUtils'
|
|||||||
// Import injected libraries here!
|
// Import injected libraries here!
|
||||||
|
|
||||||
const toExport = {
|
const toExport = {
|
||||||
|
arrangePages,
|
||||||
extractPages,
|
extractPages,
|
||||||
impose,
|
impose,
|
||||||
mergePDFs,
|
mergePDFs,
|
||||||
@ -24,7 +25,6 @@ const toExport = {
|
|||||||
rotatePages,
|
rotatePages,
|
||||||
scaleContent,
|
scaleContent,
|
||||||
scalePage,
|
scalePage,
|
||||||
sortPagesWithPreset,
|
|
||||||
splitPagesByPreset,
|
splitPagesByPreset,
|
||||||
splitPdfByIndex,
|
splitPdfByIndex,
|
||||||
updateMetadata,
|
updateMetadata,
|
||||||
@ -32,6 +32,7 @@ const toExport = {
|
|||||||
export default toExport;
|
export default toExport;
|
||||||
|
|
||||||
export type OperationsParametersBaseType = {
|
export type OperationsParametersBaseType = {
|
||||||
|
arrangePages: ArrangePagesParamsType
|
||||||
extractPages: ExtractPagesParamsType;
|
extractPages: ExtractPagesParamsType;
|
||||||
impose: ImposeParamsBaseType;
|
impose: ImposeParamsBaseType;
|
||||||
mergePDFs: MergeParamsType;
|
mergePDFs: MergeParamsType;
|
||||||
@ -39,7 +40,6 @@ export type OperationsParametersBaseType = {
|
|||||||
rotatePages: RotateParamsType;
|
rotatePages: RotateParamsType;
|
||||||
scaleContent: ScaleContentParamsType;
|
scaleContent: ScaleContentParamsType;
|
||||||
scalePage: ScalePageParamsType;
|
scalePage: ScalePageParamsType;
|
||||||
sortPagesWithPreset: SortPagesWithPresetParamsType;
|
|
||||||
splitPagesByPreset: SplitPageByPresetParamsType;
|
splitPagesByPreset: SplitPageByPresetParamsType;
|
||||||
splitPdfByIndex: SplitPdfByIndexParamsType;
|
splitPdfByIndex: SplitPdfByIndexParamsType;
|
||||||
updateMetadata: UpdateMetadataParams;
|
updateMetadata: UpdateMetadataParams;
|
||||||
|
@ -84,7 +84,7 @@ export async function * traverseOperations(operations: Action[], input: PdfFile[
|
|||||||
break;
|
break;
|
||||||
case "sortPagesWithPreset":
|
case "sortPagesWithPreset":
|
||||||
yield* nToN(input, action, async (input) => {
|
yield* nToN(input, action, async (input) => {
|
||||||
const newPdf = await Operations.sortPagesWithPreset({file: input, sortPreset: action.values["sortPreset"]});
|
const newPdf = await Operations.arrangePages({file: input, arrangementConfig: action.values["arrangementConfig"]});
|
||||||
return newPdf;
|
return newPdf;
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user