UNPKG

@pdfme/pdf-lib

Version:

Create and modify PDF files with JavaScript

130 lines 7.99 kB
"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