node.js - 两个渲染的空 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!
});
});
两个 Buffers 中的大多数值是相同的,但其中一些不是。这里发生了什么事?
解决方案
我相信由于创建时间以某种方式被计入缓冲区,字节可能会略有不同。当我使用mockdate
(https://www.npmjs.com/package/mockdate)修复“现在”时,我最终得到了一致的缓冲区。
推荐阅读
- python - 在python中检查差异数小于10或大于10
- android - 如何使用 react-native-camera-kit 捕获图像和视频?
- cocoapods - 如何使用令牌拨打电话
- java - 如何在 Firestore 文档中获取嵌套对象?
- c++ - 哪个 STL 容器可用于快速查找和擦除其中的元素
- sql-server - 违反 PRIMARY KEY 的数据流
- scala - SBT 发布:未指定发布的存储库
- vue.js - 如何使用 Vuejs 处理输入文本框上使用特殊字符的警告
- javascript - 在 js 或 Jquery 中恢复 removeAttr
- python - 如何评估 DataFrame 中包含的逐行表达式(如 df.eval() 但动态)?