UNPKG

@pdfme/pdf-lib

Version:

Create and modify PDF files with JavaScript

253 lines 14.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const index_1 = require("../../../src/index"); describe(`PDFPageLeaf`, () => { it(`can be constructed directly from a Map and PDFContext`, () => { const context = index_1.PDFContext.create(); const dict = new Map(); const pageTree = index_1.PDFPageLeaf.fromMapWithContext(dict, context); expect(pageTree).toBeInstanceOf(index_1.PDFPageLeaf); expect(pageTree.get(index_1.PDFName.of('Type'))).toBeUndefined(); expect(pageTree.get(index_1.PDFName.of('Kids'))).toBeUndefined(); expect(pageTree.get(index_1.PDFName.of('Count'))).toBeUndefined(); expect(pageTree.get(index_1.PDFName.of('Parent'))).toBeUndefined(); }); it(`is constructed with the correct Type and entries`, () => { const context = index_1.PDFContext.create(); const parentRef = index_1.PDFRef.of(1); const pageTree = index_1.PDFPageLeaf.withContextAndParent(context, parentRef); expect(pageTree).toBeInstanceOf(index_1.PDFPageLeaf); expect(pageTree.get(index_1.PDFName.of('Type'))).toBe(index_1.PDFName.of('Page')); expect(pageTree.get(index_1.PDFName.of('Parent'))).toBe(parentRef); expect(pageTree.get(index_1.PDFName.of('Resources'))).toBeInstanceOf(index_1.PDFDict); expect(pageTree.get(index_1.PDFName.of('MediaBox'))).toBeInstanceOf(index_1.PDFArray); }); it(`returns its Parent, Contents, Annots, BleedBox, TrimBox, Resources, MediaBox, CropBox, and Rotate entry values when they are references`, () => { const context = index_1.PDFContext.create(); const parent = index_1.PDFPageTree.withContext(context); const parentRef = context.register(parent); const contents = context.obj([]); const contentsRef = context.register(contents); const annots = context.obj([]); const annotsRef = context.register(annots); const bleedBox = context.obj([]); const bleedBoxRef = context.register(bleedBox); const trimBox = context.obj([]); const trimBoxRef = context.register(trimBox); const resources = context.obj({}); const resourcesRef = context.register(resources); const mediaBox = context.obj([]); const mediaBoxRef = context.register(mediaBox); const cropBox = context.obj([]); const cropBoxRef = context.register(cropBox); const rotate = context.obj(270); const rotateRef = context.register(rotate); const pageLeaf = index_1.PDFPageLeaf.withContextAndParent(context, parentRef); const pageLeafRef = context.register(pageLeaf); parent.pushLeafNode(pageLeafRef); pageLeaf.set(index_1.PDFName.of('Contents'), contentsRef); pageLeaf.set(index_1.PDFName.of('Annots'), annotsRef); pageLeaf.set(index_1.PDFName.of('BleedBox'), bleedBoxRef); pageLeaf.set(index_1.PDFName.of('TrimBox'), trimBoxRef); pageLeaf.set(index_1.PDFName.of('Resources'), resourcesRef); pageLeaf.set(index_1.PDFName.of('MediaBox'), mediaBoxRef); pageLeaf.set(index_1.PDFName.of('CropBox'), cropBoxRef); pageLeaf.set(index_1.PDFName.of('Rotate'), rotateRef); expect(pageLeaf.Parent()).toBe(parent); expect(pageLeaf.Contents()).toBe(contents); expect(pageLeaf.Annots()).toBe(annots); expect(pageLeaf.BleedBox()).toBe(bleedBox); expect(pageLeaf.TrimBox()).toBe(trimBox); expect(pageLeaf.Resources()).toBe(resources); expect(pageLeaf.MediaBox()).toBe(mediaBox); expect(pageLeaf.CropBox()).toBe(cropBox); expect(pageLeaf.Rotate()).toBe(rotate); }); it(`returns its Parent, Contents, Annots, BleedBox, TrimBox, Resources, MediaBox, CropBox, and Rotate entry values when they are direct objects`, () => { const context = index_1.PDFContext.create(); const parent = index_1.PDFPageTree.withContext(context); const parentRef = context.register(parent); const contents = context.obj([]); const annots = context.obj([]); const bleedBox = context.obj([]); const trimBox = context.obj([]); const resources = context.obj({}); const mediaBox = context.obj([]); const cropBox = context.obj([]); const rotate = context.obj(270); const pageLeaf = index_1.PDFPageLeaf.withContextAndParent(context, parentRef); const pageLeafRef = context.register(pageLeaf); parent.pushLeafNode(pageLeafRef); pageLeaf.set(index_1.PDFName.of('Contents'), contents); pageLeaf.set(index_1.PDFName.of('Annots'), annots); pageLeaf.set(index_1.PDFName.of('BleedBox'), bleedBox); pageLeaf.set(index_1.PDFName.of('TrimBox'), trimBox); pageLeaf.set(index_1.PDFName.of('Resources'), resources); pageLeaf.set(index_1.PDFName.of('MediaBox'), mediaBox); pageLeaf.set(index_1.PDFName.of('CropBox'), cropBox); pageLeaf.set(index_1.PDFName.of('Rotate'), rotate); expect(pageLeaf.Parent()).toBe(parent); expect(pageLeaf.Contents()).toBe(contents); expect(pageLeaf.Annots()).toBe(annots); expect(pageLeaf.BleedBox()).toBe(bleedBox); expect(pageLeaf.TrimBox()).toBe(trimBox); expect(pageLeaf.Resources()).toBe(resources); expect(pageLeaf.MediaBox()).toBe(mediaBox); expect(pageLeaf.CropBox()).toBe(cropBox); expect(pageLeaf.Rotate()).toBe(rotate); }); it(`returns its Resources, MediaBox, CropBox, and Rotate entry values when they are inherited`, () => { const context = index_1.PDFContext.create(); const resources = context.obj({}); const resourcesRef = context.register(resources); const mediaBox = context.obj([]); const mediaBoxRef = context.register(mediaBox); const cropBox = context.obj([]); const cropBoxRef = context.register(cropBox); const rotate = context.obj(270); const rotateRef = context.register(rotate); const parent = index_1.PDFPageTree.withContext(context); const parentRef = context.register(parent); parent.set(index_1.PDFName.of('Resources'), resourcesRef); parent.set(index_1.PDFName.of('MediaBox'), mediaBoxRef); parent.set(index_1.PDFName.of('CropBox'), cropBoxRef); parent.set(index_1.PDFName.of('Rotate'), rotateRef); const pageLeaf = index_1.PDFPageLeaf.withContextAndParent(context, parentRef); const pageLeafRef = context.register(pageLeaf); parent.pushLeafNode(pageLeafRef); pageLeaf.delete(index_1.PDFName.of('Resources')); pageLeaf.delete(index_1.PDFName.of('MediaBox')); expect(pageLeaf.Parent()).toBe(parent); expect(pageLeaf.Resources()).toBe(resources); expect(pageLeaf.MediaBox()).toBe(mediaBox); expect(pageLeaf.CropBox()).toBe(cropBox); expect(pageLeaf.Rotate()).toBe(rotate); }); it(`returns its Resources, MediaBox, CropBox, and Rotate entry values after being normalized, when they are inherited`, () => { const context = index_1.PDFContext.create(); const resources = context.obj({ Font: { Foo: index_1.PDFRef.of(2100) }, XObject: { Foo: index_1.PDFRef.of(9000) }, }); const resourcesRef = context.register(resources); const mediaBox = context.obj([]); const mediaBoxRef = context.register(mediaBox); const cropBox = context.obj([]); const cropBoxRef = context.register(cropBox); const rotate = context.obj(270); const rotateRef = context.register(rotate); const parent = index_1.PDFPageTree.withContext(context); const parentRef = context.register(parent); parent.set(index_1.PDFName.of('Resources'), resourcesRef); parent.set(index_1.PDFName.of('MediaBox'), mediaBoxRef); parent.set(index_1.PDFName.of('CropBox'), cropBoxRef); parent.set(index_1.PDFName.of('Rotate'), rotateRef); const pageLeaf = index_1.PDFPageLeaf.withContextAndParent(context, parentRef); const pageLeafRef = context.register(pageLeaf); parent.pushLeafNode(pageLeafRef); pageLeaf.delete(index_1.PDFName.of('Resources')); pageLeaf.delete(index_1.PDFName.of('MediaBox')); const { Resources, Font, XObject } = pageLeaf.normalizedEntries(); expect(pageLeaf.Parent()).toBe(parent); expect(pageLeaf.Resources()).toBe(resources); expect(pageLeaf.MediaBox()).toBe(mediaBox); expect(pageLeaf.CropBox()).toBe(cropBox); expect(pageLeaf.Rotate()).toBe(rotate); expect(Resources).toBe(resources); expect(Font).toBe(resources.get(index_1.PDFName.Font)); expect(XObject).toBe(resources.get(index_1.PDFName.XObject)); }); it(`can set its Parent`, () => { const context = index_1.PDFContext.create(); const parentRef = index_1.PDFRef.of(1); const pageTree = index_1.PDFPageLeaf.withContextAndParent(context, parentRef); pageTree.setParent(index_1.PDFRef.of(21)); expect(pageTree.get(index_1.PDFName.of('Parent'))).toBe(index_1.PDFRef.of(21)); }); it(`can add content stream refs`, () => { const context = index_1.PDFContext.create(); const parentRef = index_1.PDFRef.of(1); const pageTree = index_1.PDFPageLeaf.withContextAndParent(context, parentRef); pageTree.addContentStream(index_1.PDFRef.of(21)); expect(pageTree.Contents().toString()).toBe('[ 21 0 R ]'); pageTree.addContentStream(index_1.PDFRef.of(99)); expect(pageTree.Contents().toString()).toBe('[ 21 0 R 99 0 R ]'); }); it(`can set font dictionary refs`, () => { const context = index_1.PDFContext.create(); const parentRef = index_1.PDFRef.of(1); const pageTree = index_1.PDFPageLeaf.withContextAndParent(context, parentRef); const Font = index_1.PDFName.of('Font'); pageTree.setFontDictionary(index_1.PDFName.of('Foo'), index_1.PDFRef.of(21)); expect(pageTree.Resources().get(Font).toString()).toBe('<<\n/Foo 21 0 R\n>>'); pageTree.setFontDictionary(index_1.PDFName.of('Bar'), index_1.PDFRef.of(99)); expect(pageTree.Resources().get(Font).toString()).toBe('<<\n/Foo 21 0 R\n/Bar 99 0 R\n>>'); }); it(`can set XObject refs`, () => { const context = index_1.PDFContext.create(); const parentRef = index_1.PDFRef.of(1); const pageTree = index_1.PDFPageLeaf.withContextAndParent(context, parentRef); const XObject = index_1.PDFName.of('XObject'); pageTree.setXObject(index_1.PDFName.of('Foo'), index_1.PDFRef.of(21)); expect(pageTree.Resources().get(XObject).toString()).toBe('<<\n/Foo 21 0 R\n>>'); pageTree.setXObject(index_1.PDFName.of('Bar'), index_1.PDFRef.of(99)); expect(pageTree.Resources().get(XObject).toString()).toBe('<<\n/Foo 21 0 R\n/Bar 99 0 R\n>>'); }); it(`can set ExtGState refs and dicts`, () => { const context = index_1.PDFContext.create(); const parentRef = index_1.PDFRef.of(1); const pageTree = index_1.PDFPageLeaf.withContextAndParent(context, parentRef); const ExtGState = index_1.PDFName.of('ExtGState'); pageTree.setExtGState(index_1.PDFName.of('Foo'), index_1.PDFRef.of(21)); expect(pageTree.Resources().get(ExtGState).toString()).toBe('<<\n/Foo 21 0 R\n>>'); pageTree.setExtGState(index_1.PDFName.of('Bar'), context.obj({ CA: 0.1 })); expect(pageTree.Resources().get(ExtGState).toString()).toBe('<<\n/Foo 21 0 R\n/Bar <<\n/CA 0.1\n>>\n>>'); }); it(`can be ascended`, () => { const context = index_1.PDFContext.create(); const pageTree1 = index_1.PDFPageTree.withContext(context); const pageTree1Ref = context.register(pageTree1); const pageTree2 = index_1.PDFPageTree.withContext(context, pageTree1Ref); const pageTree2Ref = context.register(pageTree2); pageTree1.pushTreeNode(pageTree2Ref); const pageLeaf = index_1.PDFPageLeaf.withContextAndParent(context, pageTree2Ref); const pageLeafRef = context.register(pageLeaf); pageTree2.pushLeafNode(pageLeafRef); const visitations = []; pageLeaf.ascend((node) => { visitations.push(node); }); expect(visitations).toEqual([pageLeaf, pageTree2, pageTree1]); }); it(`can be normalized with autoNormalizeCTM=false`, () => { const context = index_1.PDFContext.create(); const parentRef = index_1.PDFRef.of(1); const pageTree = index_1.PDFPageLeaf.withContextAndParent(context, parentRef); const stream = context.stream('foo'); const streamRef = index_1.PDFRef.of(21); context.assign(streamRef, stream); pageTree.set(index_1.PDFName.of('Contents'), streamRef); expect(pageTree.Contents()).toBe(stream); expect(pageTree.Resources().toString()).toBe('<<\n>>'); pageTree.normalize(); expect(pageTree.Contents().toString()).toBe('[ 21 0 R ]'); expect(pageTree.Resources().toString()).toBe('<<\n/Font <<\n>>\n/XObject <<\n>>\n/ExtGState <<\n>>\n>>'); }); it(`can be normalized with autoNormalizeCTM=true`, () => { const context = index_1.PDFContext.create(); const map = new Map(); const pageTree = index_1.PDFPageLeaf.fromMapWithContext(map, context); const stream = context.stream('foo'); const streamRef = index_1.PDFRef.of(21); context.assign(streamRef, stream); pageTree.set(index_1.PDFName.of('Contents'), streamRef); expect(pageTree.Contents()).toBe(stream); expect(pageTree.get(index_1.PDFName.of('Resources'))).toBeUndefined(); pageTree.normalize(); const pushRef = context.getPushGraphicsStateContentStream(); const popRef = context.getPopGraphicsStateContentStream(); expect(pageTree.Contents().toString()).toBe(`[ ${pushRef} 21 0 R ${popRef} ]`); expect(pageTree.Resources().toString()).toBe('<<\n/Font <<\n>>\n/XObject <<\n>>\n/ExtGState <<\n>>\n>>'); }); }); //# sourceMappingURL=PDFPageLeaf.spec.js.map