PageVera is a Chrome extension that saves any web page as a clean, high-quality PDF in one click. The name joins “page” with “vera”, Latin for true, because the PDF stays true to the original page. Navigation bars, sidebars, cookie banners and chat bubbles are left out. The text stays real text you can search and copy, and the images keep their original resolution.

Chrome can already save a page as a PDF, but only through the print dialog, and it prints the page exactly as it is at that moment. On many sites that means:
People who keep web content to read later, annotate or archive: students saving course lessons, analysts and researchers saving articles and documentation, and anyone who reads offline. I built it for my own use while taking an online course, to keep a PDF of each lesson next to its video.
Tools that build the PDF from a screenshot turn the page into a picture, so the text can’t be searched or copied and images lose sharpness. This extension drives the same engine Chrome uses for printing, which keeps real text and the original image files. The cost is a “started debugging” bar that Chrome shows for a few seconds during each save. The popup says so up front instead of letting it surprise people.
Rules for spotting navigation and popups handle most sites, but no rule set is right everywhere. The click-to-remove picker lets people fix the rest in a few clicks instead of giving up on the page.
The first version produced one tall page that matched the screen. Testing showed those PDFs were hard to read and print, so the default changed to normal paper pages. Saved settings from the old default are migrated automatically.
The extension doesn’t ask for access to any websites up front. It only works on a tab when you save it, and it never sends page content anywhere. That matters for a tool that reads every page you save.
Pages Chrome doesn’t let extensions touch, such as its settings pages, get a plain explanation. A tab that is already a PDF gets a “Download original” button instead of an error.
I tested each version on the real pages I needed it for and turned what broke into the next round of work. Every fix came with automated tests so the problem can’t quietly come back.
| Round | What I saw | Cause | What changed |
|---|---|---|---|
| 1 | A course lesson didn’t scroll, was cut off, and the course outline stayed in the PDF | The lesson runs inside frames nested two levels deep in a full-screen player | Prepare every frame on the page, grow each one to its full height, and print the player on its own |
| 2 | A blank first page, an image cut across two pages, and pages far too long to read | The page behind the player printed first, and the default was one long page | Paper pages by default, images and slides kept whole at page breaks, lesson starts on page 1 |
| 3 | A PDF that was one big blank page | Hiding an empty outline column collapsed the lesson to zero width | Fixed the layout step and added a check that no page is empty |
| 4 | Error entries on Chrome’s extensions page | A normal refusal was logged as an error, and the popup lost its connection when Chrome paused the extension after 30 idle seconds | Expected refusals are no longer logged, and the popup reconnects on its own |
| 5 | Every lesson got the same file name, and the save dialog always opened in the default folder | The page title names the module rather than the lesson, and Chrome sends extension-named downloads to the default folder | Files are named after the lesson heading, and saves go through Chrome’s normal download path so it remembers the folder |
| 6 | A lesson’s image carousel came out as its first image only | The other slides sat beside the first one, cut off by the carousel’s box and marked hidden, and the last two images never loaded | Carousels are laid out so every slide prints in order, loop copies and arrows are left out, and every slide’s image loads |
The original requirements became automated tests: 50 in total, 31 of which load the extension in a real Chrome and inspect the PDFs it produces. They cover these requirements:
The full list is in How it works.
I defined the problem and the requirements, chose between the options at each decision point, tested every version on real pages, and decided what to fix next. The code was written with Claude Code, an AI coding assistant, working from those requirements and my test feedback. It was built over two days in October 2026.
Requires Chrome 125 or newer.
chrome://extensions.pagevera-main if you used Download ZIP).To save local file:// pages, open the extension’s Details and turn on Allow access to file URLs.
Then click the toolbar button and choose Save as PDF.

chrome://extensions/shortcuts.While a PDF is being made, Chrome shows a “PageVera started debugging this browser” bar for a few seconds. It disappears when the save finishes. Clicking its Cancel button stops the save. To hide the bar permanently, start Chrome with --silent-debugger-extension-api.
All settings are in the popup and are remembered.
| Option | Default | What it does |
|---|---|---|
| Top navigation and header | on | Removes site headers, nav bars and announcement bars at the top, including sticky and fixed ones |
| Side navigation and sidebars | on | Removes left and right columns such as doc sidebars and “On this page” lists, then lets the content use the freed space |
| Popups, cookie banners, chat widgets | on | Removes consent banners, modals, chat launchers and bottom bars, and undoes scroll locks |
| Footer | off | Removes the site footer |
| Scroll to the end | on, 60 s | Scrolls through the page so lazy images and infinite feeds load, then returns to the top |
| Save as | Markdown saves the page’s text as a .md file, with headings, lists, tables, code blocks and links kept and the same removals applied. Images become links to the original files, so they show only while you’re online and the site still serves them. Content inside embedded players comes after the main page’s text. PNG image saves one picture of the whole page at its on-screen width, with the same removals and scrolling. Text in a PNG can’t be searched or copied, and the layout options don’t apply. Pages taller than 16,384 px at 2× are saved at a lower pixel ratio. |
|
| Layout | Pages, Auto size, small margins | Normal pages with the desktop layout scaled to fit the paper width. Auto size picks Letter in the US and similar regions and A4 elsewhere. Images, slides and lines of text are kept whole at page breaks, including inside embedded course players. One long page gives one tall page at your screen width instead; pages taller than 200 inches (the PDF viewer limit) are split into equal parts. |
| Load the highest-resolution images | on, 2× | Switches responsive images (srcset, <picture>, image-set()) to their largest version |
| Keep the on-screen look | on | Ignores the site’s print stylesheet |
| Stop animations | on | Finishes fade-in and slide-in animations so nothing prints half-transparent |
| Bookmarks and accessibility tags | on | Adds PDF bookmarks from headings and a tagged structure. Turned off automatically for very large pages. |
| Ask where to save | off | Shows the Save dialog even when Chrome’s own “Ask where to save each file” setting is off. Chrome opens this dialog in the default download folder, not the last one used, so turn on Chrome’s setting instead if you want that. |
| Downloads subfolder | none | Saves into a folder inside the default download folder |