UNPKG

@pdfme/pdf-lib

Version:

Create and modify PDF files with JavaScript

61 lines (45 loc) 3.43 kB
import { PDFDocument, PDFImage } from '../../src/api'; import { PngEmbedder } from '../../src/core'; import { toUint8Array } from '../../src/utils'; const examplePngImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TxaoVBzuIdMhQnSyIijhKFYtgobQVWnUwufQLmjQkKS6OgmvBwY/FqoOLs64OroIg+AHi5uak6CIl/i8ptIjx4Lgf7+497t4BQqPCVLNrAlA1y0jFY2I2tyr2vKIfAgLoRVhipp5IL2bgOb7u4ePrXZRneZ/7cwwoeZMBPpF4jumGRbxBPLNp6Zz3iUOsJCnE58TjBl2Q+JHrsstvnIsOCzwzZGRS88QhYrHYwXIHs5KhEk8TRxRVo3wh67LCeYuzWqmx1j35C4N5bSXNdZphxLGEBJIQIaOGMiqwEKVVI8VEivZjHv4Rx58kl0yuMhg5FlCFCsnxg//B727NwtSkmxSMAd0vtv0xCvTsAs26bX8f23bzBPA/A1da219tALOfpNfbWuQIGNwGLq7bmrwHXO4Aw0+6ZEiO5KcpFArA+xl9Uw4YugX61tzeWvs4fQAy1NXyDXBwCIwVKXvd492Bzt7+PdPq7wcdn3KFLu4iBAAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAlFJREFUeNrt289r02AYB/Dvk6Sl4EDKpllTlFKsnUdBHXgUBEHwqHj2IJ72B0zwKHhxJ08i/gDxX/AiRfSkBxELXTcVxTa2s2xTsHNN8ngQbQL70RZqG/Z9b29JnvflkydP37whghG3ZaegoxzfwB5vBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgwB5rstWPtnP0LqBX/vZNyLF6vVrpN/hucewhb4g+B2AyAwiwY7NGOXijviS9vBeYh6CEP4edBLDADCAAAQhAAAIQgAAEIAABCDAUAFF/GIN1DM+PBYCo/ohMXDQ1WPjoeUZH1mMBEEh0oqLGvsHCy0S4NzWVWotJBogbvZB+brDwQT7UWSmXy5sxyQB9HQEROdVv4HQ+vx+QmS4iXsWmCK7Usu8AhOqAXMzlcn3VgWTbugQgEYrxMkZ/gyUPgnuhe2C6/Stxvdeg2ezMJERvhOuoZ+JBrNYBRuDdBtDuXkDM25nCHLbZSv9X6A4VHU+DpwCcbvbjcetLtTaOANtuirrux08HM0euisjDEMKC7RQuq+C+pVJqpzx3NZ3+eeBza9I0rWJgyHnxg2sAJrqnaHUzFcyN60Jox13hprv8aNopZBS4GcqWWVHM+lAkN0zY7ncgkYBukRoKLPpiXVj9UFkfV4Bdl8Jf60u3IMZZAG/6iLuhkDvaSZ74VqtUx3kp3NN7gUZt8RmA43a2eEY1OCfQ04AcBpAGkAKwpkBLIG8BfQE/eNJsvG/G4VlARj0BfjDBx2ECEIAABCAAAQhAAAIQgAAE+P/tN8YvpvbTDBOlAAAAAElFTkSuQmCC'; describe(`PDFImage`, () => { describe(`embed() method`, () => { it(`clears the 'embedder' field after the first call`, async () => { const pdfDoc = await PDFDocument.create(); const bytes = toUint8Array(examplePngImage); const embedder = await PngEmbedder.for(bytes); const ref = pdfDoc.context.nextRef(); const pdfImage = PDFImage.of(ref, pdfDoc, embedder); const embedderVariable = 'embedder'; expect(pdfImage[embedderVariable]).toBeDefined(); await pdfImage.embed(); expect(pdfImage[embedderVariable]).toBeUndefined(); }); it(`may be called multiple times without causing an error`, async () => { const pdfDoc = await PDFDocument.create(); const bytes = toUint8Array(examplePngImage); const embedder = await PngEmbedder.for(bytes); const ref = pdfDoc.context.nextRef(); const pdfImage = PDFImage.of(ref, pdfDoc, embedder); await expect(pdfImage.embed()).resolves.not.toThrowError(); await expect(pdfImage.embed()).resolves.not.toThrowError(); }); it(`may be called in parallel without causing an error`, async () => { const pdfDoc = await PDFDocument.create(); const bytes = toUint8Array(examplePngImage); const embedder = await PngEmbedder.for(bytes); const ref = pdfDoc.context.nextRef(); const pdfImage = PDFImage.of(ref, pdfDoc, embedder); // tslint:disable-next-line const task = () => pdfImage['embedTask']; expect(task()).toBeUndefined(); const task1 = pdfImage.embed(); const firstTask = task(); const task2 = pdfImage.embed(); const secondTask = task(); await Promise.all([task1, task2]); expect(firstTask).toEqual(secondTask); }); }); });