From 09aa3a8bc98219aa855a32970f6c1f8657beef47 Mon Sep 17 00:00:00 2001 From: Felix Kaspar Date: Tue, 21 Nov 2023 23:06:52 +0100 Subject: [PATCH] updated format validator for impose kind of used ImposeParamConstraints for validator needs to be updated when file FieldConstraint issue is resolved --- shared-operations/src/functions/impose.ts | 58 +++++++++++++++++++---- 1 file changed, 50 insertions(+), 8 deletions(-) diff --git a/shared-operations/src/functions/impose.ts b/shared-operations/src/functions/impose.ts index 605d96c31..a92536ddf 100644 --- a/shared-operations/src/functions/impose.ts +++ b/shared-operations/src/functions/impose.ts @@ -22,6 +22,7 @@ export class Impose extends Operator { /** PDF-Imposition, PDF-N-Up: Put multiple pages of the input document into a single page of the output document. - see: {@link https://en.wikipedia.org/wiki/N-up} */ async run(input: PdfFile[], progressCallback: (state: Progress) => void): Promise { return this.oneToOne(input, async (input, index, max) => { + //TODO: Support custom Page Sizes // https://pdfcpu.io/generate/nup.html const uint8Array = await pdfcpuWrapper.oneToOne( [ @@ -56,19 +57,21 @@ export class Impose extends Operator { if(!baseValidationResults.valid) return baseValidationResults; + // TODO: This should be ported to SaudF's RecordValidator - if(this.actionValues.nup) { - if(![2, 3, 4, 8, 9, 12, 16].includes(parseInt(this.actionValues.nup))) { - return { valid: false, reason: "NUp accepted values are 2, 3, 4, 8, 9, 12, 16 - see: https://pdfcpu.io/generate/nup.html#n-up-value"} - } - } - else + if(!this.actionValues.nup) { return { valid: false, reason: "nup is not defined" } + } + if(!(ImposeParamConstraints.record["nup"].type as number[]).includes(parseInt(this.actionValues.nup))) { + return { valid: false, reason: "NUp accepted values are 2, 3, 4, 8, 9, 12, 16 - see: https://pdfcpu.io/generate/nup.html#n-up-value"} + } if(!this.actionValues.format) { return { valid: false, reason: "format is not defined" } } - // TODO: Format should be checked for all acceped formats + if(!(ImposeParamConstraints.record["format"].type as string[]).includes(this.actionValues.format)) { + return { valid: false, reason: "invalid fromat provided - see: https://pdfcpu.io/paper.html"} + } return { valid: true } } @@ -77,5 +80,44 @@ export class Impose extends Operator { export const ImposeParamConstraints = new RecordConstraint({ file: new FieldConstraint("display.key", "file.pdf", true, "hint.key"), nup: new FieldConstraint("display.key", [2, 3, 4, 8, 9, 12, 16], true, "hint.key"), - format: new FieldConstraint("display.key", ["A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","Letter","Legal"], true, "hint.key"), + format: new FieldConstraint("display.key", [ + // ISO 216:1975 A + "4A0", "2A0", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", + + // ISO 216:1975 B + "B0+", "B0", "B1+", "B1", "B2+", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "B10", + + // ISO 269:1985 C + "C0", "C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "C10", + + // ISO 217:2013 untrimmed + "RA0", "RA1", "RA2", "RA3", "RA4", "SRA0", "SRA1", "SRA2", "SRA3", "SRA4", "SRA1+", "SRA2+", "SRA3+", "SRA3++", + + // American + "SuperB", "Tabloid", "Legal", "GovLegal", "Letter", "GovLetter", "Executive", "HalfLetter", "JuniorLegal", "Photo", + + // ANSI/ASME Y14.1 + "ANSIA", "ANSIB", "ANSIC", "ANSID", "ANSIE", "ANSIF", + + // ANSI/ASME Y14.1 Architectural series + "ARCHA", "ARCHB", "ARCHC", "ARCHD", "ARCHE", "ARCHE1", "ARCHE2", "ARCHE3", + + // American uncut + "Bond", "Book", "Cover", "Index", "NewsPrint", "Offset", + + // English uncut + "Crown", "DoubleCrown", "Quad", "Demy", "DoubleDemy", "Medium", "Royal", "SuperRoyal", + "DoublePott", "DoublePost", "Foolscap", "DoubleFoolscap", + + // F4 + + // China GB/T 148-1997 D Series + "D0", "D1", "D2", "D3", "D4", "D5", "D6", + "RD0", "RD1", "RD2", "RD3", "RD4", "RD5", "RD6", + + // Japan + "JIS-B0", "JIS-B1", "JIS-B2", "JIS-B3", "JIS-B4", "JIS-B5", "JIS-B6", + "JIS-B7", "JIS-B8", "JIS-B9", "JIS-B10", "JIS-B11", "JIS-B12", + "Shirokuban4", "Shirokuban5", "Shirokuban6", "Kiku4", "Kiku5", "AB", "B40", "Shikisen" + ].flatMap(size => [size, size + "P", size + "L"]), true, "hint.key"), }) \ No newline at end of file