Search code examples
node.jspdfkit

Two rendered empty PDFs are not identical


I'm using TypeScript + Node.js + the pdfkit library to create PDFs and verify that they're consistent.

However, when just creating the most basic PDF, consistency already fails. Here's my test.

import {readFileSync, createWriteStream} from "fs";
const PDFDocument = require('pdfkit');

const assert = require('assert').strict;
const fileName = '/tmp/tmp.pdf'

async function makeSimplePDF() {
    return new Promise(resolve => {
        const stream = createWriteStream(fileName);
        const doc = new PDFDocument();
        doc.pipe(stream);
        doc.end();
        stream.on('finish', resolve);
    })
}

describe('test that pdfs are consistent', () => {
    it('simple pdf test.', async () => {
        await makeSimplePDF();
        const data: Buffer = readFileSync(fileName);
        await makeSimplePDF(); // make PDF again
        const data2: Buffer = readFileSync(fileName);
        assert.deepStrictEqual(data, data2); // fails!
    });
});

Most of the values in the two Buffers are identical but a few of them are not. What's happening here?


Solution

  • I believe that the bytes may be slightly different due to the creation time being factored into the Buffer somehow. When I used mockdate(https://www.npmjs.com/package/mockdate) to fix 'now', I ended up getting consistent Buffers.