Skip to content

Sample PDFs

Three documents rendered by the pagenull API from HTML we wrote. Every name, address and figure in them is made up. Open the PDF, read the HTML it came from, and check its receipt.

  • Invoice

    One A4 page: a table of items, VAT and payment details, laid out with CSS grid.

    1 page · A4 · 106 KB · rendered in 190 ms on the live API (one run)

    pagenull-receipt

    v1.eyJ2IjoxLCJraWQiOiJiZWRhODYzYTkwYjFjMzg1IiwicmVuZGVyX2lkIjoiOTIyY2UyMGUtOGZjMi00YWU2LTg4NzgtNzE2OWY4NzdjY2ZiIiwic2hhMjU2IjoiOTQ0NDg1OWQ4NTY1YzQwYzEzYjcwNjljMmE1ZGJmMGRhNTQ5ZTM0YzRkZWE2NzkwOWY5NDEyZDU3MjljMGIwMiIsInRpbWVzdGFtcCI6IjIwMjYtMTEtMDVUMTY6NTg6NTkuOTU3WiIsInJlZ2lvbiI6ImhldHpuZXItaGVsc2lua2kiLCJyZW5kZXJlciI6InNoYTI1NjphMzRkNzIxMmQxYTgwZmU3OTgzY2YwNWJiNGEwZGZjMGI1M2JiYTYyMzllMTU5YWU1ODFjMzc1ZjQ0YTRlNzI2Iiwic3RvcmVkIjpmYWxzZX0.6BAzVQd9dsba1BtT4epb6GdVEp_MfQpFQhThhq_yEOtrl0NpXrglwKfFsiYeBfwnIAU6lgfyNqjTPSQnG1iXAw

    The header that came back with this file. Copy it, download the PDF, and check both on /verify.

    The HTML that was sent
    invoice.html
    <!doctype html>
    <html lang="en"><head><meta charset="utf-8"><title>Invoice HPW-2026-0117</title>
    <style>
    @page { size: A4; margin: 0 }
    * { box-sizing: border-box }
    body { margin: 0; font-family: Inter, sans-serif; color: #16181d; font-size: 10pt; line-height: 1.45 }
    .page { padding: 22mm 20mm }
    .top { display: flex; justify-content: space-between; align-items: flex-start; border-bottom: 2px solid #16181d; padding-bottom: 8mm }
    .name { font-size: 17pt; font-weight: 700; letter-spacing: -0.01em }
    .muted { color: #5a5f68 }
    .doc { text-align: right }
    .label { font-size: 9pt; text-transform: uppercase; letter-spacing: 0.12em; color: #1f5f8b; font-weight: 700 }
    .no { font-variant-numeric: tabular-nums; font-size: 13pt; margin-top: 2mm }
    .parties { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 8mm; margin: 9mm 0 }
    .h { font-size: 8pt; text-transform: uppercase; letter-spacing: 0.12em; color: #5a5f68; margin-bottom: 2mm }
    .strong { font-weight: 600 }
    table { width: 100%; border-collapse: collapse; margin-top: 2mm }
    th { font-size: 8pt; text-transform: uppercase; letter-spacing: 0.1em; color: #5a5f68; text-align: left; padding: 0 0 3mm; border-bottom: 1px solid #16181d }
    td { padding: 4mm 0; border-bottom: 1px solid #dcdfe3; vertical-align: top; font-variant-numeric: tabular-nums }
    .r { text-align: right }
    .sub { font-size: 8.5pt; color: #5a5f68 }
    .sums { margin: 6mm 0 0 auto; width: 75mm }
    .sums div { display: flex; justify-content: space-between; padding: 1.5mm 0; font-variant-numeric: tabular-nums }
    .sums .total { border-top: 2px solid #16181d; margin-top: 2mm; padding-top: 3mm; font-size: 13pt; font-weight: 700 }
    .pay { margin-top: 12mm; background: #f3f4f1; padding: 6mm }
    .pay dl { display: grid; grid-template-columns: 32mm 1fr; gap: 2mm 4mm; margin: 3mm 0 0 }
    .pay dt { color: #5a5f68 }
    .pay dd { margin: 0 }
    .foot { margin-top: 12mm; color: #5a5f68; font-size: 8.5pt }
    </style></head>
    <body><div class="page">
    <div class="top">
      <div><div class="name">Hollowmere Print Works</div><div class="muted">billing@hollowmere.example · VAT EX-0000-1742</div></div>
      <div class="doc"><div class="label">Invoice</div><div class="no">HPW-2026-0117</div></div>
    </div>
    <div class="parties">
      <div><div class="h">From</div><div class="strong">Hollowmere Print Works</div>7 Lantern Row<br>1000 Marrowdale</div>
      <div><div class="h">Bill to</div><div class="strong">Quillfeather Tea Co.</div>22 Orchard Steps<br>2040 Fennick Bay<br><span class="muted">accounts@quillfeather.example</span></div>
      <div><div class="h">Invoice date</div>3 November 2026<div class="h" style="margin-top:4mm">Due</div>17 November 2026</div>
    </div>
    <table>
    <thead><tr><th style="width:46%">Description</th><th class="r">Quantity</th><th class="r">Unit price</th><th class="r">Amount</th></tr></thead>
    <tbody>
    <tr><td><div class="strong">Letterpress business cards</div><div class="sub">Two colours on 600 g cotton board</div></td><td class="r">500</td><td class="r">€0.36</td><td class="r">€180.00</td></tr>
    <tr><td><div class="strong">Recycled kraft envelopes</div><div class="sub">C5, printed return address</div></td><td class="r">1,000</td><td class="r">€0.095</td><td class="r">€95.00</td></tr>
    <tr><td><div class="strong">Design proof revisions</div><div class="sub">Three rounds, by the hour</div></td><td class="r">3 h</td><td class="r">€45.00</td><td class="r">€135.00</td></tr>
    </tbody></table>
    <div class="sums">
      <div><span>Subtotal</span><span>€410.00</span></div>
      <div><span>VAT 20 %</span><span>€82.00</span></div>
      <div class="total"><span>Total due</span><span>€492.00</span></div>
    </div>
    <div class="pay"><div class="h" style="color:#16181d">Payment</div>
    <dl><dt>Bank transfer</dt><dd>IBAN XX00 SAMP 0000 0000 0000 00</dd><dt>Reference</dt><dd>HPW-2026-0117</dd><dt>Terms</dt><dd>14 days</dd></dl></div>
    <div class="foot">Sample document made with pagenull. All names, addresses and figures are made up.</div>
    </div></body></html>

    Options: {"format":"A4","allowNetwork":false}

  • Quarterly report

    Several pages: an SVG chart, a 52-row table whose header repeats on every page, and page numbers.

    3 pages · A4 · 98 KB · rendered in 118 ms on the live API (one run)

    pagenull-receipt

    v1.eyJ2IjoxLCJraWQiOiJiZWRhODYzYTkwYjFjMzg1IiwicmVuZGVyX2lkIjoiNjI5MTYwMjEtYmE4NC00NWZjLWEzN2ItNTNiMzc0NTRkOGE0Iiwic2hhMjU2IjoiMWFiZDIxNGYyNTAxNTljNTJjNDU3YWZkYTMzY2E0MGU2MzU1MzlhZWQ2YjZjNWRlOWU3NDQzOWUwMmI3YWUwZCIsInRpbWVzdGFtcCI6IjIwMjYtMTEtMDVUMTY6NTk6MDAuODI0WiIsInJlZ2lvbiI6ImhldHpuZXItaGVsc2lua2kiLCJyZW5kZXJlciI6InNoYTI1NjphMzRkNzIxMmQxYTgwZmU3OTgzY2YwNWJiNGEwZGZjMGI1M2JiYTYyMzllMTU5YWU1ODFjMzc1ZjQ0YTRlNzI2Iiwic3RvcmVkIjpmYWxzZX0.MBqaYXv1AAcW8NZbenLQ62XUyIf_4mhrICY2qkO1N5WTrbTDYtkr1QG8No3ctpR9nEEAIN5LXI8pOaLINWvBCQ

    The header that came back with this file. Copy it, download the PDF, and check both on /verify.

    The HTML that was sent
    report.html
    <!doctype html>
    <html lang="en"><head><meta charset="utf-8"><title>Quarterly report Q3 2026</title>
    <style>
    @page { size: A4; margin: 18mm 18mm 20mm }
    body { margin: 0; font-family: Inter, sans-serif; color: #16181d; font-size: 10pt; line-height: 1.5 }
    h1 { font-size: 22pt; letter-spacing: -0.02em; margin: 0 0 2mm }
    h2 { font-size: 13pt; margin: 9mm 0 3mm; break-after: avoid }
    .muted { color: #5a5f68 }
    .kpis { display: grid; grid-template-columns: repeat(3, 1fr); gap: 5mm; margin: 7mm 0 }
    .kpi { border-top: 2px solid #16181d; padding-top: 2mm }
    .kpi b { display: block; font-size: 16pt; font-variant-numeric: tabular-nums }
    table { width: 100%; border-collapse: collapse; font-variant-numeric: tabular-nums }
    thead { display: table-header-group }
    th { text-align: left; font-size: 8pt; text-transform: uppercase; letter-spacing: 0.08em; color: #5a5f68; border-bottom: 1px solid #16181d; padding: 2mm 0 }
    td { border-bottom: 1px solid #dcdfe3; padding: 1.8mm 0 }
    tr { break-inside: avoid }
    .r { text-align: right }
    figure { margin: 4mm 0 }
    figcaption { font-size: 9pt; color: #5a5f68; margin-top: 2mm }
    .foot { margin-top: 8mm; font-size: 8.5pt; color: #5a5f68 }
    </style></head>
    <body>
    <h1>Quarterly report, Q3 2026</h1>
    <div class="muted">Hollowmere Print Works · July to September 2026</div>
    <div class="kpis">
      <div class="kpi">Orders<b>1,825</b></div>
      <div class="kpi">Order value<b>€97,896</b></div>
      <div class="kpi">Product lines<b>4</b></div>
    </div>
    <h2>Summary</h2>
    <p>Orders grew through the quarter, led by posters for the autumn fairs. Envelope orders stayed level. The second press was
    serviced in August, which is why that month's turnaround was a day longer than usual.</p>
    <figure><svg viewBox="0 0 380 180" width="380" height="180" role="img" aria-label="Orders per month: July 701, August 568, September 556"><line x1="30" y1="150" x2="370" y2="150" stroke="#16181d"/><rect x="40" y="30" width="64" height="120" fill="#1f5f8b"/><text x="72" y="24" text-anchor="middle" font-size="12">701</text><text x="72" y="170" text-anchor="middle" font-size="12" fill="#5a5f68">July</text><rect x="150" y="53" width="64" height="97" fill="#1f5f8b"/><text x="182" y="47" text-anchor="middle" font-size="12">568</text><text x="182" y="170" text-anchor="middle" font-size="12" fill="#5a5f68">August</text><rect x="260" y="55" width="64" height="95" fill="#1f5f8b"/><text x="292" y="49" text-anchor="middle" font-size="12">556</text><text x="292" y="170" text-anchor="middle" font-size="12" fill="#5a5f68">September</text></svg><figcaption>Orders per month, all product lines.</figcaption></figure>
    <h2>Orders by week</h2>
    <p>Every week of the quarter, per product line. The table continues across pages; its header repeats on each one.</p>
    <table>
    <thead><tr><th>Week</th><th>Month</th><th>Product line</th><th class="r">Orders</th><th class="r">Value</th></tr></thead>
    <tbody>
    <tr><td>1</td><td>July</td><td>Business cards</td><td class="r">25</td><td class="r">€1,050</td></tr>
    <tr><td>1</td><td>July</td><td>Envelopes</td><td class="r">40</td><td class="r">€1,240</td></tr>
    <tr><td>1</td><td>July</td><td>Letterheads</td><td class="r">32</td><td class="r">€1,856</td></tr>
    <tr><td>1</td><td>July</td><td>Posters</td><td class="r">47</td><td class="r">€3,572</td></tr>
    <tr><td>2</td><td>July</td><td>Business cards</td><td class="r">32</td><td class="r">€1,344</td></tr>
    <tr><td>2</td><td>July</td><td>Envelopes</td><td class="r">24</td><td class="r">€744</td></tr>
    <tr><td>2</td><td>July</td><td>Letterheads</td><td class="r">39</td><td class="r">€2,262</td></tr>
    <tr><td>2</td><td>July</td><td>Posters</td><td class="r">31</td><td class="r">€2,356</td></tr>
    <tr><td>3</td><td>July</td><td>Business cards</td><td class="r">39</td><td class="r">€1,638</td></tr>
    <tr><td>3</td><td>July</td><td>Envelopes</td><td class="r">31</td><td class="r">€961</td></tr>
    <tr><td>3</td><td>July</td><td>Letterheads</td><td class="r">46</td><td class="r">€2,668</td></tr>
    <tr><td>3</td><td>July</td><td>Posters</td><td class="r">38</td><td class="r">€2,888</td></tr>
    <tr><td>4</td><td>July</td><td>Business cards</td><td class="r">23</td><td class="r">€966</td></tr>
    <tr><td>4</td><td>July</td><td>Envelopes</td><td class="r">38</td><td class="r">€1,178</td></tr>
    <tr><td>4</td><td>July</td><td>Letterheads</td><td class="r">30</td><td class="r">€1,740</td></tr>
    <tr><td>4</td><td>July</td><td>Posters</td><td class="r">45</td><td class="r">€3,420</td></tr>
    <tr><td>5</td><td>July</td><td>Business cards</td><td class="r">30</td><td class="r">€1,260</td></tr>
    <tr><td>5</td><td>July</td><td>Envelopes</td><td class="r">22</td><td class="r">€682</td></tr>
    <tr><td>5</td><td>July</td><td>Letterheads</td><td class="r">37</td><td class="r">€2,146</td></tr>
    <tr><td>5</td><td>July</td><td>Posters</td><td class="r">52</td><td class="r">€3,952</td></tr>
    <tr><td>6</td><td>August</td><td>Business cards</td><td class="r">37</td><td class="r">€1,554</td></tr>
    <tr><td>6</td><td>August</td><td>Envelopes</td><td class="r">29</td><td class="r">€899</td></tr>
    <tr><td>6</td><td>August</td><td>Letterheads</td><td class="r">44</td><td class="r">€2,552</td></tr>
    <tr><td>6</td><td>August</td><td>Posters</td><td class="r">36</td><td class="r">€2,736</td></tr>
    <tr><td>7</td><td>August</td><td>Business cards</td><td class="r">21</td><td class="r">€882</td></tr>
    <tr><td>7</td><td>August</td><td>Envelopes</td><td class="r">36</td><td class="r">€1,116</td></tr>
    <tr><td>7</td><td>August</td><td>Letterheads</td><td class="r">28</td><td class="r">€1,624</td></tr>
    <tr><td>7</td><td>August</td><td>Posters</td><td class="r">43</td><td class="r">€3,268</td></tr>
    <tr><td>8</td><td>August</td><td>Business cards</td><td class="r">28</td><td class="r">€1,176</td></tr>
    <tr><td>8</td><td>August</td><td>Envelopes</td><td class="r">43</td><td class="r">€1,333</td></tr>
    <tr><td>8</td><td>August</td><td>Letterheads</td><td class="r">35</td><td class="r">€2,030</td></tr>
    <tr><td>8</td><td>August</td><td>Posters</td><td class="r">50</td><td class="r">€3,800</td></tr>
    <tr><td>9</td><td>August</td><td>Business cards</td><td class="r">35</td><td class="r">€1,470</td></tr>
    <tr><td>9</td><td>August</td><td>Envelopes</td><td class="r">27</td><td class="r">€837</td></tr>
    <tr><td>9</td><td>August</td><td>Letterheads</td><td class="r">42</td><td class="r">€2,436</td></tr>
    <tr><td>9</td><td>August</td><td>Posters</td><td class="r">34</td><td class="r">€2,584</td></tr>
    <tr><td>10</td><td>September</td><td>Business cards</td><td class="r">19</td><td class="r">€798</td></tr>
    <tr><td>10</td><td>September</td><td>Envelopes</td><td class="r">34</td><td class="r">€1,054</td></tr>
    <tr><td>10</td><td>September</td><td>Letterheads</td><td class="r">26</td><td class="r">€1,508</td></tr>
    <tr><td>10</td><td>September</td><td>Posters</td><td class="r">41</td><td class="r">€3,116</td></tr>
    <tr><td>11</td><td>September</td><td>Business cards</td><td class="r">26</td><td class="r">€1,092</td></tr>
    <tr><td>11</td><td>September</td><td>Envelopes</td><td class="r">41</td><td class="r">€1,271</td></tr>
    <tr><td>11</td><td>September</td><td>Letterheads</td><td class="r">33</td><td class="r">€1,914</td></tr>
    <tr><td>11</td><td>September</td><td>Posters</td><td class="r">48</td><td class="r">€3,648</td></tr>
    <tr><td>12</td><td>September</td><td>Business cards</td><td class="r">33</td><td class="r">€1,386</td></tr>
    <tr><td>12</td><td>September</td><td>Envelopes</td><td class="r">25</td><td class="r">€775</td></tr>
    <tr><td>12</td><td>September</td><td>Letterheads</td><td class="r">40</td><td class="r">€2,320</td></tr>
    <tr><td>12</td><td>September</td><td>Posters</td><td class="r">32</td><td class="r">€2,432</td></tr>
    <tr><td>13</td><td>September</td><td>Business cards</td><td class="r">40</td><td class="r">€1,680</td></tr>
    <tr><td>13</td><td>September</td><td>Envelopes</td><td class="r">32</td><td class="r">€992</td></tr>
    <tr><td>13</td><td>September</td><td>Letterheads</td><td class="r">47</td><td class="r">€2,726</td></tr>
    <tr><td>13</td><td>September</td><td>Posters</td><td class="r">39</td><td class="r">€2,964</td></tr>
    </tbody></table>
    <h2>Next quarter</h2>
    <p>Plans for Q4: a second paper supplier for kraft stock, and a shorter proof cycle for repeat orders.</p>
    <div class="foot">Sample document made with pagenull. All names, addresses and figures are made up.</div>
    </body></html>

    Options: {"format":"A4","pageNumbers":"Page {page} of {pages}","pageNumbersPosition":"bottom-center","allowNetwork":false}

  • Services agreement

    Numbered clauses and signature lines, in the built-in Source Serif 4. The kind of document a receipt is for.

    2 pages · A4 · 119 KB · rendered in 159 ms on the live API (one run)

    pagenull-receipt

    v1.eyJ2IjoxLCJraWQiOiJiZWRhODYzYTkwYjFjMzg1IiwicmVuZGVyX2lkIjoiM2I3YzU0MGUtMmZlMi00ZmRjLTljMjUtZjk2MzVjNjA3YmU4Iiwic2hhMjU2IjoiMDRjMDcwMmY2Yzk0YTY5ZTQxMWVjYjE5YjdhZmQyMWUxYTg4YjUyYjg3ZTQyNTJjMDMwOTBmMjU4MWE2ZjFlNiIsInRpbWVzdGFtcCI6IjIwMjYtMTEtMDVUMTY6NTk6MDEuMzc5WiIsInJlZ2lvbiI6ImhldHpuZXItaGVsc2lua2kiLCJyZW5kZXJlciI6InNoYTI1NjphMzRkNzIxMmQxYTgwZmU3OTgzY2YwNWJiNGEwZGZjMGI1M2JiYTYyMzllMTU5YWU1ODFjMzc1ZjQ0YTRlNzI2Iiwic3RvcmVkIjpmYWxzZX0.utJ4ifOJYzOWrrPtIR4hnBo5ELidXVtuB_ULaRIWqsApK3kFODiP9TbAa6uAui76HCnQR8HCCrzIhB7Huh4sCg

    The header that came back with this file. Copy it, download the PDF, and check both on /verify.

    The HTML that was sent
    contract.html
    <!doctype html>
    <html lang="en"><head><meta charset="utf-8"><title>Design services agreement</title>
    <style>
    @page { size: A4; margin: 24mm 22mm 24mm }
    body { margin: 0; font-family: "Source Serif 4", serif; color: #16181d; font-size: 11pt; line-height: 1.55 }
    h1 { font-family: Inter, sans-serif; font-size: 18pt; letter-spacing: -0.01em; margin: 0 0 6mm }
    .parties p { margin: 0 0 3mm }
    ol.clauses { counter-reset: clause; list-style: none; padding: 0; margin: 8mm 0 0 }
    ol.clauses > li { counter-increment: clause; margin-bottom: 5mm; break-inside: avoid }
    ol.clauses > li > h2 { font-family: Inter, sans-serif; font-size: 11pt; margin: 0 0 2mm }
    ol.clauses > li > h2::before { content: counter(clause) ". " }
    ol.sub { counter-reset: sub; list-style: none; padding: 0; margin: 0 }
    ol.sub > li { counter-increment: sub; padding-left: 10mm; text-indent: -10mm; margin-bottom: 1.5mm }
    ol.sub > li::before { content: counter(clause) "." counter(sub) "\00a0\00a0"; display: inline-block; width: 10mm; text-indent: 0; font-family: Inter, sans-serif; font-size: 9.5pt; color: #5a5f68 }
    .sign { display: grid; grid-template-columns: 1fr 1fr; gap: 14mm; margin-top: 14mm; break-inside: avoid }
    .line { border-bottom: 1px solid #16181d; height: 14mm }
    .cap { font-family: Inter, sans-serif; font-size: 9pt; color: #5a5f68; margin-top: 2mm }
    .foot { margin-top: 10mm; font-family: Inter, sans-serif; font-size: 8.5pt; color: #5a5f68 }
    </style></head>
    <body>
    <h1>Design services agreement</h1>
    <div class="parties">
    <p>This agreement is made on 3 November 2026 between:</p>
    <p><b>Quillfeather Tea Co.</b>, 22 Orchard Steps, 2040 Fennick Bay (the &ldquo;Client&rdquo;), and</p>
    <p><b>Ardent Loom Studio</b>, 3 Kiln Yard, 1000 Marrowdale (the &ldquo;Designer&rdquo;).</p>
    </div>
    <ol class="clauses">
    <li><h2>Services</h2><ol class="sub"><li>The Designer will design a new range of stationery for the Client: business cards, letterheads and envelopes, as described in the brief of 20 October 2026.</li><li>The Designer will deliver print-ready files for each item, and the source files once the final invoice is paid.</li></ol></li>
    <li><h2>Timeline</h2><ol class="sub"><li>First concepts are due on 17 November 2026. The Client will give feedback within five working days of each delivery.</li><li>Two rounds of revisions are included. Further rounds are charged at the hourly rate in clause 3.2.</li></ol></li>
    <li><h2>Fees and payment</h2><ol class="sub"><li>The fixed fee for the services is €2,400, excluding VAT.</li><li>Extra work agreed in writing is charged at €45 per hour.</li><li>The Designer invoices half of the fee on signing and the rest on delivery of the final files. Invoices are due within 14 days.</li></ol></li>
    <li><h2>Ownership</h2><ol class="sub"><li>Once the fee is paid in full, the Client owns the final designs and may use them without limit.</li><li>The Designer may show the final designs in their portfolio, unless the Client asks otherwise in writing.</li></ol></li>
    <li><h2>Confidentiality</h2><ol class="sub"><li>Each party keeps the other's non-public information confidential, during this agreement and for two years after it ends.</li></ol></li>
    <li><h2>Ending the agreement</h2><ol class="sub"><li>Either party may end this agreement with 14 days' written notice.</li><li>If the Client ends it, the Client pays for the work done up to the end of the notice period.</li></ol></li>
    <li><h2>General</h2><ol class="sub"><li>This agreement is the whole agreement between the parties about the services. Changes must be in writing and signed by both.</li></ol></li>
    </ol>
    <div class="sign">
      <div><div class="line"></div><div class="cap">For the Client: name, signature and date</div></div>
      <div><div class="line"></div><div class="cap">For the Designer: name, signature and date</div></div>
    </div>
    <div class="foot">Sample document made with pagenull. All names, addresses and figures are made up.</div>
    </body></html>

    Options: {"format":"A4","pageNumbers":"Page {page} of {pages}","pageNumbersPosition":"bottom-center","allowNetwork":false}