@pdfme/pdf-lib
Version:
Create and modify PDF files with JavaScript
144 lines • 7.08 kB
JavaScript
;
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