@pdfme/pdf-lib
Version:
Create and modify PDF files with JavaScript
130 lines • 7.99 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("fs"));
const index_1 = require("../../src/index");
const birdPng = fs_1.default.readFileSync('assets/images/greyscale_bird.png');
describe(`PDFDocument`, () => {
describe(`getSize() method`, () => {
it(`returns the width and height of the the page's MediaBox`, async () => {
const pdfDoc = await index_1.PDFDocument.create();
const page = pdfDoc.addPage();
page.node.set(index_1.PDFName.MediaBox, pdfDoc.context.obj([5, 5, 20, 50]));
expect(page.getSize()).toEqual({ width: 15, height: 45 });
});
});
describe(`setSize() method`, () => {
it(`sets the width and height of only the the page's MediaBox when the other boxes are not defined`, async () => {
const pdfDoc = await index_1.PDFDocument.create();
const page = pdfDoc.addPage();
page.setMediaBox(5, 5, 20, 50);
expect(page.getMediaBox()).toEqual({ x: 5, y: 5, width: 20, height: 50 });
expect(page.node.MediaBox()).toBeInstanceOf(index_1.PDFArray);
expect(page.node.CropBox()).toBeUndefined();
expect(page.node.BleedBox()).toBeUndefined();
expect(page.node.TrimBox()).toBeUndefined();
expect(page.node.ArtBox()).toBeUndefined();
page.setSize(15, 45);
expect(page.getSize()).toEqual({ width: 15, height: 45 });
expect(page.getMediaBox()).toEqual({ x: 5, y: 5, width: 15, height: 45 });
expect(page.node.MediaBox()).toBeInstanceOf(index_1.PDFArray);
expect(page.node.CropBox()).toBeUndefined();
expect(page.node.BleedBox()).toBeUndefined();
expect(page.node.TrimBox()).toBeUndefined();
expect(page.node.ArtBox()).toBeUndefined();
});
it(`sets the width and height of the the page's CropBox, BleedBox, TrimBox, and ArtBox when they equal the MediaBox`, async () => {
const pdfDoc = await index_1.PDFDocument.create();
const page = pdfDoc.addPage();
page.setMediaBox(5, 5, 20, 50);
page.setCropBox(5, 5, 20, 50);
page.setBleedBox(5, 5, 20, 50);
page.setTrimBox(5, 5, 20, 50);
page.setArtBox(5, 5, 20, 50);
expect(page.getMediaBox()).toEqual({ x: 5, y: 5, width: 20, height: 50 });
expect(page.getCropBox()).toEqual({ x: 5, y: 5, width: 20, height: 50 });
expect(page.getBleedBox()).toEqual({ x: 5, y: 5, width: 20, height: 50 });
expect(page.getTrimBox()).toEqual({ x: 5, y: 5, width: 20, height: 50 });
expect(page.getArtBox()).toEqual({ x: 5, y: 5, width: 20, height: 50 });
expect(page.node.MediaBox()).toBeInstanceOf(index_1.PDFArray);
expect(page.node.CropBox()).toBeInstanceOf(index_1.PDFArray);
expect(page.node.BleedBox()).toBeInstanceOf(index_1.PDFArray);
expect(page.node.TrimBox()).toBeInstanceOf(index_1.PDFArray);
expect(page.node.ArtBox()).toBeInstanceOf(index_1.PDFArray);
page.setSize(15, 45);
expect(page.getSize()).toEqual({ width: 15, height: 45 });
expect(page.getMediaBox()).toEqual({ x: 5, y: 5, width: 15, height: 45 });
expect(page.getCropBox()).toEqual({ x: 5, y: 5, width: 15, height: 45 });
expect(page.getBleedBox()).toEqual({ x: 5, y: 5, width: 15, height: 45 });
expect(page.getTrimBox()).toEqual({ x: 5, y: 5, width: 15, height: 45 });
expect(page.getArtBox()).toEqual({ x: 5, y: 5, width: 15, height: 45 });
});
it(`does not set the width and height of the the page's CropBox, BleedBox, TrimBox, or ArtBox when they do not equal the MediaBox`, async () => {
const pdfDoc = await index_1.PDFDocument.create();
const page = pdfDoc.addPage();
page.setMediaBox(5, 5, 20, 50);
page.setCropBox(0, 0, 20, 50);
page.setBleedBox(5, 5, 10, 25);
page.setTrimBox(5, 0, 10, 50);
page.setArtBox(0, 5, 20, 25);
expect(page.getMediaBox()).toEqual({ x: 5, y: 5, width: 20, height: 50 });
expect(page.getCropBox()).toEqual({ x: 0, y: 0, width: 20, height: 50 });
expect(page.getBleedBox()).toEqual({ x: 5, y: 5, width: 10, height: 25 });
expect(page.getTrimBox()).toEqual({ x: 5, y: 0, width: 10, height: 50 });
expect(page.getArtBox()).toEqual({ x: 0, y: 5, width: 20, height: 25 });
expect(page.node.MediaBox()).toBeInstanceOf(index_1.PDFArray);
expect(page.node.CropBox()).toBeInstanceOf(index_1.PDFArray);
expect(page.node.BleedBox()).toBeInstanceOf(index_1.PDFArray);
expect(page.node.TrimBox()).toBeInstanceOf(index_1.PDFArray);
expect(page.node.ArtBox()).toBeInstanceOf(index_1.PDFArray);
page.setSize(15, 45);
expect(page.getSize()).toEqual({ width: 15, height: 45 });
expect(page.getMediaBox()).toEqual({ x: 5, y: 5, width: 15, height: 45 });
expect(page.getCropBox()).toEqual({ x: 0, y: 0, width: 20, height: 50 });
expect(page.getBleedBox()).toEqual({ x: 5, y: 5, width: 10, height: 25 });
expect(page.getTrimBox()).toEqual({ x: 5, y: 0, width: 10, height: 50 });
expect(page.getArtBox()).toEqual({ x: 0, y: 5, width: 20, height: 25 });
});
});
// https://github.com/Hopding/pdf-lib/issues/1075
it(`drawImage() does not reuse existing XObject keys`, async () => {
const pdfDoc1 = await index_1.PDFDocument.create();
const image1 = await pdfDoc1.embedPng(birdPng);
const page1 = pdfDoc1.addPage();
expect(page1.node.normalizedEntries().XObject.keys().length).toEqual(0);
page1.drawImage(image1);
expect(page1.node.normalizedEntries().XObject.keys().length).toEqual(1);
const key1 = page1.node.normalizedEntries().XObject.keys()[0];
const pdfDoc2 = await index_1.PDFDocument.load(await pdfDoc1.save());
const image2 = await pdfDoc2.embedPng(birdPng);
const page2 = pdfDoc2.getPage(0);
expect(page2.node.normalizedEntries().XObject.keys().length).toEqual(1);
page2.drawImage(image2);
expect(page2.node.normalizedEntries().XObject.keys().length).toEqual(2);
const key2 = page2.node.normalizedEntries().XObject.keys()[1];
expect(key1).not.toEqual(key2);
expect(page2.node.normalizedEntries().XObject.keys()).toEqual([key1, key2]);
});
// https://github.com/Hopding/pdf-lib/issues/1075
it(`setFont() does not reuse existing Font keys`, async () => {
const pdfDoc1 = await index_1.PDFDocument.create();
const font1 = await pdfDoc1.embedFont(index_1.StandardFonts.Helvetica);
const page1 = pdfDoc1.addPage();
expect(page1.node.normalizedEntries().Font.keys().length).toEqual(0);
page1.setFont(font1);
expect(page1.node.normalizedEntries().Font.keys().length).toEqual(1);
const key1 = page1.node.normalizedEntries().Font.keys()[0];
const pdfDoc2 = await index_1.PDFDocument.load(await pdfDoc1.save());
const font2 = await pdfDoc2.embedFont(index_1.StandardFonts.Helvetica);
const page2 = pdfDoc2.getPage(0);
expect(page2.node.normalizedEntries().Font.keys().length).toEqual(1);
page2.setFont(font2);
expect(page2.node.normalizedEntries().Font.keys().length).toEqual(2);
const key2 = page2.node.normalizedEntries().Font.keys()[1];
expect(key1).not.toEqual(key2);
expect(page2.node.normalizedEntries().Font.keys()).toEqual([key1, key2]);
});
});
//# sourceMappingURL=PDFPage.spec.js.map