两个渲染的空 PDF 不相同

问题描述

我正在使用 TypeScript + Node.js + pdfkit 库来创建 PDF 并验证它们是否一致。

然而,当只是创建最基本的 PDF 时,一致性已经失败。这是我的测试。

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!
    });
});

两个 Buffer 中的大多数值是相同的,但有一些不是。这里发生了什么?

解决方法

我相信由于创建时间以某种方式被计入缓冲区,因此字节可能略有不同。当我使用 mockdate(https://www.npmjs.com/package/mockdate) 修复“现在”时,我最终获得了一致的缓冲区。