UNPKG

@pdfme/pdf-lib

Version:

Create and modify PDF files with JavaScript

144 lines 7.08 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const pako_1 = __importDefault(require("pako")); const core_1 = require("../../src/core"); const utils_1 = require("../../src/utils"); describe(`PDFContext`, () => { it(`retains assigned objects`, () => { const context = core_1.PDFContext.create(); const pdfBool = core_1.PDFBool.True; const pdfHexString = core_1.PDFHexString.of('ABC123'); const pdfName = core_1.PDFName.of('Foo#Bar!'); const pdfNull = core_1.PDFNull; const pdfNumber = core_1.PDFNumber.of(-24.179); const pdfString = core_1.PDFString.of('foobar'); const pdfDict = context.obj({ Foo: core_1.PDFName.of('Bar') }); const pdfArray = context.obj([core_1.PDFBool.True, pdfDict]); context.assign(core_1.PDFRef.of(0), pdfBool); context.assign(core_1.PDFRef.of(1), pdfHexString); context.assign(core_1.PDFRef.of(2), pdfName); context.assign(core_1.PDFRef.of(3), pdfNull); context.assign(core_1.PDFRef.of(4), pdfNumber); context.assign(core_1.PDFRef.of(5), pdfString); context.assign(core_1.PDFRef.of(6), pdfDict); context.assign(core_1.PDFRef.of(7), pdfArray); expect(context.lookup(core_1.PDFRef.of(0))).toBe(pdfBool); expect(context.lookup(core_1.PDFRef.of(1))).toBe(pdfHexString); expect(context.lookup(core_1.PDFRef.of(2))).toBe(pdfName); expect(context.lookup(core_1.PDFRef.of(3))).toBe(pdfNull); expect(context.lookup(core_1.PDFRef.of(4))).toBe(pdfNumber); expect(context.lookup(core_1.PDFRef.of(5))).toBe(pdfString); expect(context.lookup(core_1.PDFRef.of(6))).toBe(pdfDict); expect(context.lookup(core_1.PDFRef.of(7))).toBe(pdfArray); }); it(`does not use object number 0 during registration`, () => { const context = core_1.PDFContext.create(); expect(context.register(core_1.PDFBool.True)).toBe(core_1.PDFRef.of(1)); }); it(`returns the given object during lookup if it is not a PDFRef`, () => { const context = core_1.PDFContext.create(); const pdfNumber = core_1.PDFNumber.of(21); expect(context.lookup(pdfNumber)).toBe(pdfNumber); }); it(`assigns the next highest object number during registration`, () => { const context = core_1.PDFContext.create(); const pdfBool = core_1.PDFBool.True; const pdfName = core_1.PDFName.of('FooBar'); const pdfNumber = core_1.PDFNumber.of(-21.436); const boolRef = context.register(pdfBool); expect(boolRef).toBe(core_1.PDFRef.of(1)); expect(context.lookup(boolRef)).toBe(pdfBool); context.assign(core_1.PDFRef.of(9000), pdfName); const numberRef = context.register(pdfNumber); expect(numberRef).toBe(core_1.PDFRef.of(9001)); expect(context.lookup(numberRef)).toBe(pdfNumber); }); it(`stream creation`, () => { const context = core_1.PDFContext.create(); const stream = context.flateStream('stuff and things!'); const buffer = new Uint8Array(stream.sizeInBytes()); stream.copyBytesInto(buffer, 0); expect(buffer).toEqual((0, utils_1.mergeIntoTypedArray)('<<\n', '/Filter /FlateDecode\n', '/Length 25\n', '>>\n', 'stream\n', pako_1.default.deflate('stuff and things!'), '\nendstream')); }); describe(`literal conversions`, () => { const context = core_1.PDFContext.create(); it(`converts null literals to the PDFNull instance`, () => { expect(context.obj(null)).toBe(core_1.PDFNull); }); it(`converts string literals to PDFName instances`, () => { expect(context.obj('foobar')).toBeInstanceOf(core_1.PDFName); expect(context.obj('foobar').toString()).toBe('/foobar'); }); it(`converts number literals to PDFNumber instances`, () => { expect(context.obj(-21.4e-3)).toBeInstanceOf(core_1.PDFNumber); expect(context.obj(-21.4e-3).toString()).toBe('-0.0214'); }); it(`converts boolean literals to PDFBool instances`, () => { expect(context.obj(true)).toBe(core_1.PDFBool.True); expect(context.obj(false)).toBe(core_1.PDFBool.False); }); it(`converts array literals to PDFArray instances`, () => { const array = [ core_1.PDFRef.of(21), true, core_1.PDFHexString.of('ABC123'), 'Foo#Bar!', [null, -24.179], { Foo: core_1.PDFName.of('Bar') }, ]; expect(context.obj(array)).toBeInstanceOf(core_1.PDFArray); expect(context.obj(array).toString()).toEqual('[ 21 0 R true <ABC123> /Foo#23Bar! [ null -24.179 ] <<\n/Foo /Bar\n>> ]'); }); it(`converts object literals to PDFDict instances`, () => { const dict = { Ref: core_1.PDFRef.of(21), Boolean: true, HexString: core_1.PDFHexString.of('ABC123'), Null: null, Number: -24.179, Name: 'Foo#Bar!', Dictionary: { Array: [true, null] }, }; expect(context.obj(dict)).toBeInstanceOf(core_1.PDFDict); expect(context.obj(dict).toString()).toEqual(`<< /Ref 21 0 R /Boolean true /HexString <ABC123> /Null null /Number -24.179 /Name /Foo#23Bar! /Dictionary << /Array [ true null ] >> >>`); }); }); it(`can provide a reference to a "pushGraphicsState" content stream`, () => { const context = core_1.PDFContext.create(); expect(context.enumerateIndirectObjects().length).toBe(0); const ref1 = context.getPushGraphicsStateContentStream(); expect(ref1).toBeInstanceOf(core_1.PDFRef); expect(context.enumerateIndirectObjects().length).toBe(1); const ref2 = context.getPushGraphicsStateContentStream(); expect(ref2).toBeInstanceOf(core_1.PDFRef); expect(context.enumerateIndirectObjects().length).toBe(1); expect(ref1).toBe(ref2); expect(context.lookup(ref1)).toBeInstanceOf(core_1.PDFContentStream); }); it(`can provide a reference to a "popGraphicsState" content stream`, () => { const context = core_1.PDFContext.create(); expect(context.enumerateIndirectObjects().length).toBe(0); const ref1 = context.getPopGraphicsStateContentStream(); expect(ref1).toBeInstanceOf(core_1.PDFRef); expect(context.enumerateIndirectObjects().length).toBe(1); const ref2 = context.getPopGraphicsStateContentStream(); expect(ref2).toBeInstanceOf(core_1.PDFRef); expect(context.enumerateIndirectObjects().length).toBe(1); expect(ref1).toBe(ref2); expect(context.lookup(ref1)).toBeInstanceOf(core_1.PDFContentStream); }); }); //# sourceMappingURL=PDFContext.spec.js.map