Changelog

Rendering engine upgraded to Chromium 156

PDFs are now generated with Chromium 156. Conversions are a little faster, some pages that used to time out now render, and a URL that cannot be rendered returns a 400 that says why instead of a generic 500.

ImprovedAPI

PDFs are now generated with Chromium 156. The rollout finished on November 3. You do not need to change your requests, and most PDFs come out the same.

What is better

  • Current rendering — pages render the way they do in today's browsers, including modern CSS.
  • A little faster — conversions take about 10% less time on typical pages.
  • Fewer timeouts — some slow pages that used to run out of time now render.
  • lazyLoad — a new parameter that scrolls through the page before generating the PDF, so that images loaded on scroll are included. It is off by default. See Parameters.

Clearer errors

A URL that cannot be rendered used to return a generic 500. It now returns a 400 with errorCode 12 and a message that says why:

{
  "errorCode": 12,
  "message": "net::ERR_CONNECTION_RESET at https://example.com/"
}

This covers URLs that point to a PDF or a file browsers download, sites that refuse or drop the connection, and pages too slow or heavy to finish in time.

If your integration retries only 5xx responses, note that a site being briefly unreachable now returns a 400, which it will no longer retry. See Errors and HTTP statuses for which of these are worth retrying.

What may look different

A few layouts change because Chromium itself changed. We kept its behaviour, since it matches current browsers.

  • Headings in sections — an <h1> inside section, article, aside or nav is now full size, 32px instead of 24px, which can move the content below it down. To keep the old size, set it in your CSS: section h1 { font-size: 24px; }.
  • Table borders — the outset, inset, ridge and groove border styles are lighter, including the default from a plain <table border="1">. Lines keep their position and thickness. To keep them darker, set them in your CSS: td { border: 1px solid #555; }.
  • Narrow table cells — text can wrap at different points, for example at a hyphen, which can occasionally add a page.
  • Table cards near a page end — a padded one-cell table that only just crosses the end of a page now moves whole to the next page, instead of splitting its last row. This can leave a gap and add a page, but no content is lost. See Page breaks for how to control this.
  • JSON URLs — Chromium's JSON viewer now wraps long lines, so these PDFs can run to more pages.

If a PDF looks different in a way that is not listed here, please contact support.