Solved type issues in traverseOperations etc. Changed functions to take a object single parameter. Condensed endpoints into a function call

This commit is contained in:
Saud Fatayerji
2023-11-14 03:26:42 +03:00
parent 77274e6117
commit 9956367384
18 changed files with 377 additions and 260 deletions

View File

@@ -1,12 +1,25 @@
export async function impose(snapshot: any, nup: number, format: string, pdfcpuWrapper: any) {
return await pdfcpuWrapper.oneToOne([
import { PdfFile, fromPdfLib } from '../wrappers/PdfFile';
export type ImposeParamsType = {
file: any;
nup: number;
format: string;
}
export type ImposeParamsBaseType = {
file: any;
nup: number;
format: string;
pdfcpuWrapper: any;
}
export async function impose(params: ImposeParamsBaseType) {
return await params.pdfcpuWrapper.oneToOne([
"pdfcpu.wasm",
"nup",
"-c",
"disable",
'f:' + format,
'f:' + params.format,
"/output.pdf",
String(nup),
String(params.nup),
"input.pdf",
], snapshot);
], params.file);
}

View File

@@ -1,10 +1,15 @@
import { PDFDocument } from 'pdf-lib';
import { PdfFile, convertAllToPdfLibFile, fromPdfLib } from '../wrappers/PdfFile';
import Joi from 'joi';
export async function mergePDFs(files: PdfFile[]): Promise<PdfFile> {
export type MergeParamsType = {
files: PdfFile[];
}
const pdfLibFiles = await convertAllToPdfLibFile(files);
export async function mergePDFs(params: MergeParamsType): Promise<PdfFile> {
const pdfLibFiles = await convertAllToPdfLibFile(params.files);
const mergedPdf = await PDFDocument.create();
@@ -14,5 +19,5 @@ export async function mergePDFs(files: PdfFile[]): Promise<PdfFile> {
copiedPages.forEach((page) => mergedPdf.addPage(page));
}
return fromPdfLib(mergedPdf, files[0].filename);
return fromPdfLib(mergedPdf, params.files[0].filename);
};

View File

@@ -2,7 +2,14 @@
import { degrees } from 'pdf-lib';
import { PdfFile, fromPdfLib } from '../wrappers/PdfFile';
export async function rotatePages(file: PdfFile, rotation: number|number[]): Promise<PdfFile> {
export type RotateParamsType = {
file: PdfFile;
rotation: number|number[];
}
export async function rotatePages(params: RotateParamsType): Promise<PdfFile> {
const { file, rotation } = params;
const pdfDoc = await file.getAsPdfLib();
const pages = pdfDoc.getPages();

View File

@@ -2,7 +2,14 @@
import { PDFPage } from 'pdf-lib';
import { PdfFile, fromPdfLib } from '../wrappers/PdfFile';
export async function scaleContent(file: PdfFile, scaleFactor: number|number[]): Promise<PdfFile> {
export type ScaleContentParamsType = {
file: PdfFile;
scaleFactor: number|number[];
}
export async function scaleContent(params: ScaleContentParamsType): Promise<PdfFile> {
const { file, scaleFactor } = params;
const pdfDoc = await file.getAsPdfLib();
const pages = pdfDoc.getPages();

View File

@@ -2,7 +2,14 @@
import { PDFPage } from 'pdf-lib';
import { PdfFile, fromPdfLib } from '../wrappers/PdfFile';
export async function scalePage(file: PdfFile, pageSize: {width?:number,height?:number}|{width?:number,height?:number}[]): Promise<PdfFile> {
export type ScalePageParamsType = {
file: PdfFile;
pageSize: { width?:number,height?:number }|{ width?:number,height?:number }[];
}
export async function scalePage(params: ScalePageParamsType): Promise<PdfFile> {
const { file, pageSize } = params;
const pdfDoc = await file.getAsPdfLib();
const pages = pdfDoc.getPages();

View File

@@ -6,10 +6,15 @@ import { getImagesOnPage } from "./common/getImagesOnPage.js";
import { selectPages } from "./subDocumentFunctions";
import { PdfFile } from '../wrappers/PdfFile.js';
export async function splitOn(
file: PdfFile,
type: "BAR_CODE"|"QR_CODE"|"BLANK_PAGE",
whiteThreashold: number) {
export type SplitOnParamsType = {
file: PdfFile;
type: "BAR_CODE"|"QR_CODE"|"BLANK_PAGE";
whiteThreashold: number;
}
export async function splitOn(params: SplitOnParamsType) {
const { file, type, whiteThreashold } = params;
let splitAtPages: number[] = [];
switch (type) {
@@ -43,7 +48,7 @@ export async function splitOn(
console.log(i);
if(i == splitAfter) {
if(pagesArray.length > 0) {
subDocuments.push(await selectPages(file, pagesArray));
subDocuments.push(await selectPages({file, pagesToExtractArray:pagesArray}));
pagesArray = [];
}
splitAfter = splitAtPages.shift();
@@ -54,7 +59,7 @@ export async function splitOn(
}
}
if(pagesArray.length > 0) {
subDocuments.push(await selectPages(file, pagesArray));
subDocuments.push(await selectPages({file, pagesToExtractArray:pagesArray}));
}
pagesArray = [];

View File

@@ -2,7 +2,14 @@
import { selectPages } from "./subDocumentFunctions";
import { PdfFile } from '../wrappers/PdfFile';
export async function splitPDF(file: PdfFile, splitAfterPageArray: number[]): Promise<PdfFile[]> {
export type SplitPdfParamsType = {
file: PdfFile;
splitAfterPageArray: number[];
}
export async function splitPDF(params: SplitPdfParamsType): Promise<PdfFile[]> {
const { file, splitAfterPageArray } = params;
const byteFile = await file.convertToPdfLibFile();
if (!byteFile?.pdfLib) return [];
@@ -14,13 +21,13 @@ export async function splitPDF(file: PdfFile, splitAfterPageArray: number[]): Pr
for (let i = 0; i < numberOfPages; i++) {
if(splitAfter && i > splitAfter && pagesArray.length > 0) {
subDocuments.push(await selectPages(byteFile, pagesArray));
subDocuments.push(await selectPages({file:byteFile, pagesToExtractArray:pagesArray}));
splitAfter = splitAfterPageArray.shift();
pagesArray = [];
}
pagesArray.push(i);
}
subDocuments.push(await selectPages(byteFile, pagesArray));
subDocuments.push(await selectPages({file:byteFile, pagesToExtractArray:pagesArray}));
pagesArray = [];
return subDocuments;

View File

@@ -4,9 +4,16 @@ import { PdfFile, fromPdfLib } from '../wrappers/PdfFile.js';
import { detectEmptyPages } from "./common/detectEmptyPages.js";
export async function sortPagesWithPreset(file: PdfFile, sortPreset: string, fancyPageSelector: string) {
export type SortPagesWithPresetParamsType = {
file: PdfFile;
sortPreset: string;
fancyPageSelector: string;
}
export async function sortPagesWithPreset(params: SortPagesWithPresetParamsType) {
const { file, sortPreset } = params;
if (sortPreset === "CUSTOM_PAGE_ORDER") {
return rearrangePages(file, fancyPageSelector);
return rearrangePages(params); // fancyPageSelector passed down with params
}
const sortFunction = sorts[sortPreset];
@@ -19,19 +26,32 @@ export async function sortPagesWithPreset(file: PdfFile, sortPreset: string, fan
const pageCount = byteFile.pdfLib.getPageCount();
const sortIndecies = sortFunction(pageCount);
return selectPages(byteFile, sortIndecies);
return selectPages({file:byteFile, pagesToExtractArray:sortIndecies});
}
export async function rearrangePages(file: PdfFile, fancyPageSelector: string): Promise<PdfFile> {
export type RearrangePagesParamsType = {
file: PdfFile;
sortPreset: string;
fancyPageSelector: string;
}
export async function rearrangePages(params: RearrangePagesParamsType): Promise<PdfFile> {
const { file, fancyPageSelector } = params;
const byteFile = await file.convertToPdfLibFile();
if (!byteFile?.pdfLib) return byteFile;
const pagesToExtractArray = parseFancyPageSelector(fancyPageSelector, byteFile.pdfLib.getPageCount());
const newDocument = selectPages(byteFile, pagesToExtractArray);
const newDocument = selectPages({file:byteFile, pagesToExtractArray});
return newDocument;
};
export async function selectPages(file: PdfFile, pagesToExtractArray: number[]): Promise<PdfFile> {
export type SelectPagesParamsType = {
file: PdfFile;
pagesToExtractArray: number[];
}
export async function selectPages(params: SelectPagesParamsType): Promise<PdfFile> {
const { file, pagesToExtractArray } = params;
const byteFile = await file.convertToPdfLibFile();
if (!byteFile?.pdfLib) return byteFile;
@@ -51,18 +71,30 @@ export async function selectPages(file: PdfFile, pagesToExtractArray: number[]):
return fromPdfLib(subDocument, file.filename);
}
export async function removePages(file: PdfFile, pagesToRemoveArray: number[]): Promise<PdfFile> {
export type RemovePagesParamsType = {
file: PdfFile;
pagesToRemoveArray: number[];
}
export async function removePages(params: RemovePagesParamsType): Promise<PdfFile> {
const { file, pagesToRemoveArray } = params;
const byteFile = await file.convertToPdfLibFile();
if (!byteFile?.pdfLib) return byteFile;
const pagesToExtractArray = invertSelection(pagesToRemoveArray, byteFile.pdfLib.getPageIndices())
return selectPages(byteFile, pagesToExtractArray);
return selectPages({file:byteFile, pagesToExtractArray});
}
export async function removeBlankPages(file: PdfFile, whiteThreashold: number) {
export type RemoveBlankPagesParamsType = {
file: PdfFile;
whiteThreashold: number;
}
export async function removeBlankPages(params: RemoveBlankPagesParamsType) {
const { file, whiteThreashold } = params;
const emptyPages = await detectEmptyPages(file, whiteThreashold);
console.log("Empty Pages: ", emptyPages);
return removePages(file, emptyPages);
return removePages({file, pagesToRemoveArray:emptyPages});
}

View File

@@ -1,7 +1,8 @@
import { PdfFile, fromPdfLib } from '../wrappers/PdfFile';
export type Metadata = {
export type UpdateMetadataParams = {
file: PdfFile,
deleteAll?: boolean, // Delete all metadata if set to true
author?: string, // The author of the document
creationDate?: Date, // The creation date of the document (format: yyyy/MM/dd HH:mm:ss)
@@ -15,10 +16,10 @@ export type Metadata = {
//allRequestParams?: {[key: string]: [key: string]}, // Map list of key and value of custom parameters. Note these must start with customKey and customValue if they are non-standard
}
export async function updateMetadata(file: PdfFile, metadata: Metadata|null): Promise<PdfFile> {
const pdfDoc = await file.getAsPdfLib();
export async function updateMetadata(params: UpdateMetadataParams): Promise<PdfFile> {
const pdfDoc = await params.file.getAsPdfLib();
if (!metadata || metadata.deleteAll) {
if (params.deleteAll) {
pdfDoc.setAuthor("");
pdfDoc.setCreationDate(new Date(0))
pdfDoc.setCreator("")
@@ -28,28 +29,25 @@ export async function updateMetadata(file: PdfFile, metadata: Metadata|null): Pr
pdfDoc.setSubject("")
pdfDoc.setTitle("")
}
if (!metadata) {
return fromPdfLib(pdfDoc, file.filename);
}
if(metadata.author)
pdfDoc.setAuthor(metadata.author);
if(metadata.creationDate)
pdfDoc.setCreationDate(metadata.creationDate)
if(metadata.creator)
pdfDoc.setCreator(metadata.creator)
if(metadata.keywords)
pdfDoc.setKeywords(metadata.keywords.split(","))
if(metadata.modificationDate)
pdfDoc.setModificationDate(metadata.modificationDate)
if(metadata.producer)
pdfDoc.setProducer(metadata.producer)
if(metadata.subject)
pdfDoc.setSubject(metadata.subject)
if(metadata.title)
pdfDoc.setTitle(metadata.title)
if(params.author)
pdfDoc.setAuthor(params.author);
if(params.creationDate)
pdfDoc.setCreationDate(params.creationDate)
if(params.creator)
pdfDoc.setCreator(params.creator)
if(params.keywords)
pdfDoc.setKeywords(params.keywords.split(","))
if(params.modificationDate)
pdfDoc.setModificationDate(params.modificationDate)
if(params.producer)
pdfDoc.setProducer(params.producer)
if(params.subject)
pdfDoc.setSubject(params.subject)
if(params.title)
pdfDoc.setTitle(params.title)
// TODO add trapped and custom metadata. May need another library
return fromPdfLib(pdfDoc, file.filename);
return fromPdfLib(pdfDoc, params.file.filename);
};