pdf-visual-compare 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/compare.pdf.d.ts.map +1 -1
- package/out/compare.pdf.js +31 -8
- package/out/compare.pdf.js.map +1 -1
- package/out/const.d.ts +2 -0
- package/out/const.d.ts.map +1 -0
- package/out/const.js +6 -0
- package/out/const.js.map +1 -0
- package/package.json +14 -11
package/out/compare.pdf.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compare.pdf.d.ts","sourceRoot":"","sources":["../src/compare.pdf.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"compare.pdf.d.ts","sourceRoot":"","sources":["../src/compare.pdf.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAqC,MAAM,SAAS,CAAC;AAE/E,wBAA8B,UAAU,CACtC,yBAAyB,EAAE,MAAM,GAAG,eAAe,EACnD,2BAA2B,EAAE,MAAM,GAAG,eAAe,EACrD,IAAI,CAAC,EAAE,iBAAiB,GACvB,OAAO,CAAC,OAAO,CAAC,CAmElB"}
|
package/out/compare.pdf.js
CHANGED
|
@@ -7,6 +7,8 @@ const fs_1 = require("fs");
|
|
|
7
7
|
const path_1 = require("path");
|
|
8
8
|
const pdf_to_png_converter_1 = require("pdf-to-png-converter");
|
|
9
9
|
const png_visual_compare_1 = __importDefault(require("png-visual-compare"));
|
|
10
|
+
const pngjs_1 = require("pngjs");
|
|
11
|
+
const const_1 = require("./const");
|
|
10
12
|
async function comparePdf(actualPdfFilePathOrBuffer, expectedPdfFilePathOrBuffer, opts) {
|
|
11
13
|
if (!Buffer.isBuffer(actualPdfFilePathOrBuffer) && !(0, fs_1.existsSync)(actualPdfFilePathOrBuffer)) {
|
|
12
14
|
throw Error('Actual PDF file not found.');
|
|
@@ -23,7 +25,7 @@ async function comparePdf(actualPdfFilePathOrBuffer, expectedPdfFilePathOrBuffer
|
|
|
23
25
|
}
|
|
24
26
|
const diffsOutputFolder = opts?.diffsOutputFolder
|
|
25
27
|
? opts.diffsOutputFolder
|
|
26
|
-
:
|
|
28
|
+
: const_1.DEFAULT_DIFFS_FOLDER;
|
|
27
29
|
const compareThreshold = opts?.compareThreshold
|
|
28
30
|
? opts?.compareThreshold
|
|
29
31
|
: 0;
|
|
@@ -33,19 +35,27 @@ async function comparePdf(actualPdfFilePathOrBuffer, expectedPdfFilePathOrBuffer
|
|
|
33
35
|
if (compareThreshold < 0) {
|
|
34
36
|
throw Error('Compare Threshold cannot be less than 0.');
|
|
35
37
|
}
|
|
36
|
-
|
|
38
|
+
let [actualPdfPngPages, expectedPdfPngPages] = await Promise.all([
|
|
37
39
|
(0, pdf_to_png_converter_1.pdfToPng)(actualPdfFilePathOrBuffer, pdfToPngConvertOpts),
|
|
38
40
|
(0, pdf_to_png_converter_1.pdfToPng)(expectedPdfFilePathOrBuffer, pdfToPngConvertOpts),
|
|
39
41
|
]);
|
|
40
|
-
if (actualPdfPngPages.length
|
|
41
|
-
|
|
42
|
+
if (actualPdfPngPages.length < expectedPdfPngPages.length) {
|
|
43
|
+
[actualPdfPngPages, expectedPdfPngPages] = [expectedPdfPngPages, actualPdfPngPages];
|
|
42
44
|
}
|
|
43
45
|
let documentCompareResult = true;
|
|
44
|
-
actualPdfPngPages.forEach((
|
|
46
|
+
actualPdfPngPages.forEach((pngPage, index) => {
|
|
45
47
|
const comparePngOpts = { ...opts?.pdfToPngConvertOptions, ...excludedAreas[index] };
|
|
46
|
-
comparePngOpts.diffFilePath = (0, path_1.resolve)(diffsOutputFolder, `diff_${
|
|
47
|
-
const
|
|
48
|
-
|
|
48
|
+
comparePngOpts.diffFilePath = (0, path_1.resolve)(diffsOutputFolder, `diff_${pngPage.name}`);
|
|
49
|
+
const pngPageOutputToCompareWith = expectedPdfPngPages.find((p) => p.name === pngPage.name);
|
|
50
|
+
let bufferToCompareWith;
|
|
51
|
+
if (pngPageOutputToCompareWith) {
|
|
52
|
+
bufferToCompareWith = pngPageOutputToCompareWith.content;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
const originalPngMetaData = pngjs_1.PNG.sync.read(pngPage.content);
|
|
56
|
+
bufferToCompareWith = getEmptyPngBuffer(originalPngMetaData.width, originalPngMetaData.height);
|
|
57
|
+
}
|
|
58
|
+
const pageCompareResult = (0, png_visual_compare_1.default)(pngPage.content, bufferToCompareWith, comparePngOpts);
|
|
49
59
|
if (pageCompareResult > compareThreshold) {
|
|
50
60
|
documentCompareResult = false;
|
|
51
61
|
}
|
|
@@ -53,4 +63,17 @@ async function comparePdf(actualPdfFilePathOrBuffer, expectedPdfFilePathOrBuffer
|
|
|
53
63
|
return documentCompareResult;
|
|
54
64
|
}
|
|
55
65
|
exports.default = comparePdf;
|
|
66
|
+
function getEmptyPngBuffer(width, height) {
|
|
67
|
+
const image = new pngjs_1.PNG({ width, height });
|
|
68
|
+
for (let y = 0; y < image.height; y++) {
|
|
69
|
+
for (let x = 0; x < image.width; x++) {
|
|
70
|
+
const position = (image.width * y + x) << 2;
|
|
71
|
+
image.data[position + 0] = 255;
|
|
72
|
+
image.data[position + 1] = 255;
|
|
73
|
+
image.data[position + 2] = 255;
|
|
74
|
+
image.data[position + 3] = 255;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return pngjs_1.PNG.sync.write(image);
|
|
78
|
+
}
|
|
56
79
|
//# sourceMappingURL=compare.pdf.js.map
|
package/out/compare.pdf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compare.pdf.js","sourceRoot":"","sources":["../src/compare.pdf.ts"],"names":[],"mappings":";;;;;AAAA,2BAAgC;AAChC,+BAA+B;AAC/B,+DAA+D;AAC/D,4EAAmE;
|
|
1
|
+
{"version":3,"file":"compare.pdf.js","sourceRoot":"","sources":["../src/compare.pdf.ts"],"names":[],"mappings":"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"}
|
package/out/const.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../src/const.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,QAAgC,CAAC"}
|
package/out/const.js
ADDED
package/out/const.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../src/const.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAElB,QAAA,oBAAoB,GAAG,IAAA,cAAO,EAAC,oBAAoB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pdf-visual-compare",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Visual regression testing library for PDFs in Js/Ts without binary and OS dependencies.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pdf",
|
|
@@ -35,22 +35,25 @@
|
|
|
35
35
|
"lint:fix": "npm run lint -- --fix",
|
|
36
36
|
"pretest": "npm run build",
|
|
37
37
|
"test": "jest",
|
|
38
|
+
"test:debug": "jest --runInBand",
|
|
38
39
|
"test:docker": "npm run docker:build && npm run docker:run",
|
|
39
40
|
"tsc": "tsc --pretty"
|
|
40
41
|
},
|
|
41
42
|
"dependencies": {
|
|
42
|
-
"pdf-to-png-converter": "2.
|
|
43
|
-
"png-visual-compare": "0.4.
|
|
43
|
+
"pdf-to-png-converter": "2.6.0",
|
|
44
|
+
"png-visual-compare": "0.4.15",
|
|
45
|
+
"pngjs": "^6.0.0"
|
|
44
46
|
},
|
|
45
47
|
"devDependencies": {
|
|
46
|
-
"@types/jest": "
|
|
47
|
-
"@types/node": "18.
|
|
48
|
-
"@
|
|
49
|
-
"@typescript-eslint/
|
|
50
|
-
"eslint": "
|
|
51
|
-
"
|
|
52
|
-
"
|
|
48
|
+
"@types/jest": "29.0.3",
|
|
49
|
+
"@types/node": "18.7.18",
|
|
50
|
+
"@types/pngjs": "^6.0.1",
|
|
51
|
+
"@typescript-eslint/eslint-plugin": "5.37.0",
|
|
52
|
+
"@typescript-eslint/parser": "5.37.0",
|
|
53
|
+
"eslint": "8.23.1",
|
|
54
|
+
"jest": "29.0.3",
|
|
55
|
+
"ts-jest": "29.0.1",
|
|
53
56
|
"ts-node": "10.9.1",
|
|
54
|
-
"typescript": "4.
|
|
57
|
+
"typescript": "4.8.3"
|
|
55
58
|
}
|
|
56
59
|
}
|