pdf-visual-comparer v1.3.5
pdf-visual-comparer
This is a Node.js package that allows you to compare two PDF files and calculate the number of different pixels between their pages. Also provides a custom matcher for playwright.
Installation
To use this package, first install it via npm:
npm install pdf-visual-comparerUsage
To use the determineDifferentPixelsCount function, import it from the pdf-visual-comparer package and pass in the file paths or buffers of the PDF files you want to compare:
import determineDifferentPixelsCount from 'pdf-visual-comparer';
const firstPdfSrc = '/path/to/first.pdf';
const secondPdfSrc = '/path/to/second.pdf';
determineDifferentPixelsCount(firstPdfSrc, secondPdfSrc)
.then((diffPixelsCount) => {
console.log(`Number of different pixels between PDFs: ${diffPixelsCount}`);
})
.catch((error) => {
console.error(error);
});You can also pass in TypedArray or ArrayBuffer objects as the PDF sources.
Playwright Custom Matcher
The custom playwright matcher compares two given PDFs and fails a playwright test if the PDFs have different pixels. In that case a screenshot of the pages with different pixels are attached. In any case both PDFs will be attached to the test result.
To use the toMatchPdf function inside a playwright test, you need to add the following:
Add the global typings reference inside your tsconfig.json.
A global.d.ts file with the following content.
{
"typeRoots": [
"pdf-visual-compare/typings/global.d.ts"
]
}Extend the playwright expect with toMatchPdf.
import { defineConfig, devices, expect } from '@playwright/test';
import toMatchPdf from 'pdf-visual-comparer/playwright';
expect.extend({
toMatchPdf
});Import it from the pdf-visual-comparer/playwright package.
import { expect, test } from '@playwright/test';
import toMatchPdf from 'pdf-visual-comparer/playwright';
test('should match given pdfs', async () => {
await expect('/path/to/first.pdf').toMatchPdf('/path/to/second.pdf');
});Pass the testInfo object to toMatchPdf to attach the following to the test result:
- the expected PDF
- the actual PDF
- if two compared pages have different pixels:
- a screenshot of each page of the expected and actual PDF
- a screenshot with a visual diff of each page of the PDFs
import { expect, test } from '@playwright/test';
import toMatchPdf from 'pdf-visual-comparer/playwright';
test('should match given pdfs', async ({page}, testInfo) => {
await expect('/path/to/first.pdf').toMatchPdf('/path/to/second.pdf', testInfo);
});Pass a threshold to toMatchPdf to allow the amount of pixels to vary between the actual and the expected PDF:
import { expect, test } from '@playwright/test';
import toMatchPdf from 'pdf-visual-comparer/playwright';
test('should match given pdfs with threshold', async ({page}, testInfo) => {
const threshold = 100;
await expect('/path/to/first.pdf').toMatchPdf('/path/to/second.pdf', testInfo, threshold);
});Contributing
Contributions are welcome! If you find a bug or want to add a new feature, please open an issue or pull request on the GitHub repository.
License
This package is licensed under the MIT License. See the LICENSE file for details.