Printguard

What changed in your PDF?

Compare an approved document with a new export. Inspect missing amounts, changed layouts and lost pages, then download a report you can share.

选择自己的两份 PDF,检查内容与版式变化。文件留在浏览器内,无需账号。

Local comparison. No PDF upload or server storage.

Northstar / September operationsExample baseline
Executive page of the synthetic operations packet with metrics, a budget bar chart and risk table

Try your own PDFs above, or inspect this four-page example: charts, 20 invoice rows, bilingual controls and a landscape schedule.

4Complete PDF pages
20Invoice lines with running totals
English + 中文Searchable bilingual appendix
Portrait + landscapeOriginal page sizes preserved

Five exports. Five concrete outcomes.

Every status and pixel count below is computed by Printguard. Open a report to inspect original pages, differences, precise masks and text evidence.

01Regression detected

A charge disappears inside a dense ledger

明细表丢失金额与唯一编号

One of 20 invoice lines loses its reference and $13,680 charge. Other rows, running totals and the three surrounding pages survive.

Actual / baseline
4 / 4 pages
Affected pages
1
Differing pixels
229

Page 2: find the blank reference and amount. The required-text failure links to the baseline row.

Open comparison report
02Passed with a precise mask

A new date passes a precise mask

只更新时间,正确通过

The generation date changes inside the same text item as the approved total. The rest of the four-page packet stays identical.

Actual / baseline
4 / 4 pages
Affected pages
0
Differing pixels
0

Page 1: enable mask bounds and use the overlay. The nearby $148,320 total remains visible and under test.

Open comparison report
03Regression detected

The masked date cannot hide a wrong total

日期遮罩不会放过相邻金额

The date changes again, but the total on that same line becomes $148,920. The exact same date rule must reject this export.

Actual / baseline
4 / 4 pages
Affected pages
1
Differing pixels
15

Page 1: compare the unmasked amount, then switch to Difference to locate the changed digits.

Open comparison report
04Regression detected

A font change pushes the report to five pages

字体、行高和分页发生连锁变化

Invoice rows use a wider serif font and taller spacing. The ledger spills onto a new page, shifting the bilingual appendix and landscape schedule.

Actual / baseline
5 / 4 pages
Affected pages
5
Differing pixels
1,301,167

Start on page 2, then inspect pages 3–5. Original sizes are preserved and the last page is reported as added.

Open comparison report
05Regression detected

The landscape handover page is lost

横向交付计划整页丢失

The executive summary, invoice ledger and bilingual appendix remain identical. The final schedule and KPI acceptance table disappear.

Actual / baseline
3 / 4 pages
Affected pages
1
Differing pixels
1,090,584

Page 4: the baseline schedule is present; the actual side clearly says the page is missing.

Open comparison report

What is inside the packet?

One baseline includes the dense content and mixed page layouts that make export regressions easy to overlook.

Page 1 executive metrics and spend chart
1. Executive reviewMetrics, spend against plan, exception owners and one same-line date / total.
Page 2 dense twenty-row invoice ledger
2. Invoice reconciliationUnique references, line amounts, cumulative totals and finance approval.
Page 3 English and Chinese control notes
3. Bilingual controlsEmbedded Chinese font and searchable English / Chinese text.
Page 4 landscape delivery schedule and KPI table
4. Delivery handoverLandscape workstream timeline and next-month acceptance controls.

Keep the exported document under test.

The same engine runs in Node, the command line and Playwright. Reports keep the original document images and can be opened as standalone files.

  • Compare every page, including added or deleted pages.
  • Assert required text with baseline page evidence.
  • Mask exact date glyphs while continuing to test the adjacent amount.
Installation and API documentation
Your PDF export test
import { expect } from 'printguard/playwright';

await expect(await download.path()).toMatchPdf('baseline.pdf', {
  requiredText: ['OPS-26-0917'],
  textMasks: [{
    pattern: '\\b\\d{4}-\\d{2}-\\d{2}\\b',
    label: 'Generated date'
  }]
});