What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Use Puppeteer’s page.pdf() after your single-page application (SPA) has rendered the complete report or document. Wait for an application-specific selector or state, load content that normally appears only after scrolling or interaction, then choose print options deliberately. The fullPage: true option belongs to page.screenshot(); it does not make a PDF.
PDF or full-page image: choose the right API
Puppeteer has two separate output workflows:
| Goal | Method | Result |
|---|---|---|
| Searchable, selectable document with page breaks | page.pdf() |
Paginated PDF rendered with print CSS by default |
| Pixel-accurate visual capture of the entire document | page.screenshot({ fullPage: true }) |
Image capture, such as PNG or JPEG |
A PDF is laid out on paper-sized pages. It is not one infinitely tall screenshot. If you need an image for visual archiving, use the screenshot API; if you need a document users can search, print or annotate, use page.pdf().
Complete Node.js example
Install Puppeteer in a Node.js project, then replace the URL and readiness condition with values from your application. The selector below is illustrative: your SPA must set it only when all intended data and sections are rendered.
import puppeteer from 'puppeteer';
const browser = await puppeteer.launch();
try {
const page = await browser.newPage();
await page.goto('https://example.com/app/report', {
waitUntil: 'domcontentloaded'
});
// Implement this marker in the target application.
await page.waitForSelector('[data-pdf-ready="true"]', {
visible: true,
timeout: 30_000
});
// A heuristic only; keep the app-specific condition above.
await page.waitForNetworkIdle({
idleTime: 500,
concurrency: 0
});
await page.pdf({
path: 'report.pdf',
format: 'A4',
printBackground: true,
preferCSSPageSize: true,
waitForFonts: true
});
} finally {
await browser.close();
}
The current Puppeteer API reference reviewed for this workflow is version 25.12.0. Check the documentation matching the version installed in your project before relying on a version-specific option.
#1 Best Overall
- Portable Wireless Printer - The ETIKEZ D90E is an inkless printer and portable printer that uses advanced thermal technology, requiring no ink, toner, or ribbons, delivering cost-effective prints. Weighs only 2.08lb, the portable printer is incredibly lightweight and compact. Perfect for on-the-go printing during business travels, work, or university, it easily fits into backpacks or briefcases. Ideal for emergency scenarios, contracts, office documents, and more. only prints black and white
- Bluetooth & USB Connectivity - Connect this D90E portable printer to iPhones or Android via Bluetooth. This wireless printer also works with PC over USB. As a thermal printer, it requires the Labelnize app for mobile printing; for PC, install drivers from Labelnize.com or the USB drive. This small portable printeris not compatible with Chromebooks. (Note: For laptop and computer use, connect via USB after downloading the driver from Labelnize.com.)
- Multiple Printing and Format – The wireless portable printer supports 8.5" x 11" US Letter thermal paper (B0GD61HPDC, B0GD5JFC2Q). It meets all your various printing requirements, whether you're on the go or in a car. (Note: This thermal printer is compatible exclusively with A4 thermal paper and does not accept ordinary copy paper)
- Gift-Ready - This portable printer, a gift for pros & students, works as a thermal printer for classroom, classroom printer for teachers, printer for college student, small classroom printer, printer for dorm room, thermal printer for teachers, and portable printer for classroom. It combines thermal & inkless, ideal for notaries, truckers, teachers, parents. Package: D90E Printer, USB-C Cable, 10-sheet Paper, Travel Case, Guide. (Charging adapter not included.)
- How to solve paper jams: 1) Click once to pop up the paper - If the machine gets a paper jam, simply press the power button and the machine will automatically eject the paper. 2) Do not forcefully open the machine cover as it may cause injury or scratches . 3) Choose our flat thermal paper to avoid curling of the paper after printing. Note: Cannot use regular paper for printing
Make SPA readiness deterministic
domcontentloaded, load and network-idle events describe browser activity, not whether your application has finished rendering. A React, Vue or Angular view can fetch data after navigation, replace loading placeholders, poll continuously or defer sections until they enter the viewport.
Use a readiness selector
Have the application add a marker after data, charts and intended sections are complete:
<main data-pdf-ready="true">...complete report...</main>
Then wait for that marker with page.waitForSelector(). A visible match proves the element exists and is visible; it cannot prove that every child component contains final data, so place the marker at the point your application considers complete.
Use an application state condition
When a global flag is more reliable than a DOM marker, wait for it explicitly:
Recommended Free Tools
await page.waitForFunction(
() => window.reportState?.status === 'complete',
{ timeout: 30_000 }
);
Expose only a deliberate, stable readiness signal. Do not substitute an arbitrary sleep for a state condition.
Trigger deferred loading
Infinite lists, intersection observers and “load more” controls may not render content until a user scrolls or clicks. Reproduce those interactions before printing:
Rank #2
- Portable Printers Wireless for Travel [Compact & Space-saving]: The portable printer weighs only 1.5lb and is small in size. This inkless portable printer fits easily into a backpack or briefcase! Ideal for on-the-go printing during business travel, in car or truck, small office, construction site, school and home use. You can print documents, contracts, invoices, receipts, recipes, lists and boarding passes anytime, anywhere
- Wireless Bluetooth Printer [High Compatibility]: The portable thermal printer compatible with iPhone, Android Phone, iPad, Tablet via Bluetooth. Print documents, pictures, web pages from your phone anytime, anywhere. You can also use the USB-C cable to connect your laptop or computer for printing. (Note: Laptops and computers only work with USB connection, need to download the driver first: a285m.labelife.cc)
- Thermal Printer [Multi-Size Printing]: The wireless portable printer with built-in paper bin, support thermal roll paper, continuous and single sheet thermal paper. A285M small wireless printer also supports 5 sizes of thermal paper: 8.5“ X 11” US Letter, A4, 4.33'' (110mm), 3.14'' (80mm), 2.08'' (53mm) width thermal paper, can meet most of your needs
- Inkless Printer [Cost-Effective & Inkless Printing]: The Bluetooth mobile printer adopts advanced thermal technology, no ink, toner, or ribbon required during printing, no clogging and cleaning problems! (Note: Only support the thermal paper, Does not support regular copy paper. Only supports black and white printing.)
- Mobile Printer [High Quality Printing]: The compact printer is designed for people who work outside. A wireless inkless portable printer is good for mobile notaries, truck drivers, business travelers, office workers, teachers and students. Note: Charging with 5V 2A. Don't use the charger that outputs above 5V
await page.evaluate(async () => {
window.scrollTo(0, document.body.scrollHeight);
});
await new Promise(resolve => setTimeout(resolve, 300));
await page.waitForSelector('.report-last-section', { visible: true });
The delay here is only an example. Prefer a selector, count or state change that proves the newly requested content arrived. If the app has a load-more button, click it in a loop until it is disabled or the application reports completion.
Use network idle as a secondary heuristic
page.waitForNetworkIdle() resolves after network activity stays below its concurrency threshold for the configured idle interval and always waits at least that interval. The documented defaults include a 500 ms idle period and a concurrency threshold of zero. Polling, streaming and persistent connections can prevent it from resolving, while cached or already-rendered content can make it resolve too early. Keep your app-specific condition as the primary gate.
Ensure content beyond the viewport is present
Before export, inspect the document and the selectors that matter:
const details = await page.evaluate(() => ({
scrollHeight: document.documentElement.scrollHeight,
bodyHeight: document.body.scrollHeight,
sections: document.querySelectorAll('.report-section').length
}));
console.log(details);
- Confirm every intended section is in the DOM, not merely represented by a virtualized row that has not been rendered.
- Scroll or interact to activate lazy images and deferred modules.
- Wait for important images to finish loading and for fonts to become available.
- Check that print CSS does not hide sections or constrain a container with an unintended height or overflow rule.
Puppeteer’s PDF operation waits for document fonts by default in the current API. If text still appears with fallback fonts, inspect the page and font loading state rather than adding increasingly long sleeps.
Control print media, page size and appearance
Print CSS is the default
page.pdf() uses print media. A stylesheet may change colors, hide navigation, alter layout or remove elements under @media print. This is often desirable for a document, but it means a PDF will not necessarily look like the screen.
If the requirement is explicitly screen styling, request it before generating the PDF:
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Rank #3
- Inkless Printing – Gloryang portable printer uses advanced thermal technology, requiring no ink, toner, or ribbons. The package includes the printer, 3 thermal paper rolls (1 pre-installed + 2 extras), a carrying case, charging cable, manual, and guide card. Cost-effective and easy to use. Note: Only compatible with Gloryang thermal paper; not for regular, inkjet, or plain paper.
- Seamless Bluetooth Connectivity – The Gloryang mobile sticker printer connects easily to iOS and Android via Bluetooth through the “Jadens Printer” app. It also works as a compact printer for laptops and computers—simply turn on the printer first, then install the driver to set up. Print anytime, anywhere.
- Ultra-Portable Design - Weighing just 1.75lb and measuring 1.7in thick, the Gloryang portable printer is incredibly lightweight and compact. Perfect for on-the-go printing during travels, work, or university, it easily fits into backpacks or briefcases. Ideal for emergency scenarios, contracts, office documents, and more.
- Space-Saving Design - Say goodbye to clutter with the built-in paper bin of the Gloryang printer. It saves space and keeps your workspace tidy, whether you're on the go or in a car. With two ways to load thermal paper and the ability to print documents ranging from 2 to 8.5 inches, it caters to various printing needs.
- Perfect Gift for Holiday-Gloryang thermal printer can print clear photos, image, design drawings and text. It's perfect for busy professionals and students. Come with a nice case, making it as a perfect Christmas and new year gift for your families and friends.
await page.emulateMediaType('screen');
await page.pdf({
path: 'screen-styled.pdf',
format: 'A4',
printBackground: true
});
Review the result carefully. For exact colors, author print rules deliberately and consider the CSS -webkit-print-color-adjust property documented by Puppeteer. Screen emulation is not a guarantee that a browser screenshot and a paginated PDF will be identical.
Choose dimensions deliberately
| Option | Purpose |
|---|---|
format |
Preset paper size such as A4 |
width, height |
Explicit page dimensions |
margin |
Top, right, bottom and left printable margins |
printBackground |
Include background graphics; defaults to false |
preferCSSPageSize |
Give CSS @page dimensions priority over format or explicit dimensions |
pageRanges |
Restrict output to selected pages |
scale |
Change rendering scale |
waitForFonts |
Wait for document.fonts.ready; current API default is true |
Use normal paper-sized pages for reports users will print or share. A custom, very tall page can be defined with width and height, but it is less portable and usually harder to read than normal pagination.
Author page-break rules
Use print-specific CSS to keep headings with content and prevent cards from splitting where practical:
@media print {
.report-card { break-inside: avoid; }
h2 { break-after: avoid; }
@page { size: A4; margin: 14mm; }
}
With preferCSSPageSize: true, the @page size takes precedence. Test long tables, charts and images because browser pagination can still divide content at unexpected boundaries.
Inspect before exporting
When output is missing content, capture diagnostics in the same run:
console.log(await page.title());
console.log(await page.url());
console.log(await page.evaluate(() => ({
ready: document.querySelector('[data-pdf-ready="true"]') !== null,
height: document.documentElement.scrollHeight,
fonts: document.fonts.status
})));
await page.screenshot({ path: 'debug.png', fullPage: true });
The debug image helps distinguish an application-rendering problem from a print-CSS problem. Also log browser console errors and failed requests while developing the export.
Rank #4
- UPC: 198828789662
- Weight: 10.450 lbs
Troubleshooting common failures
PDF contains only the loading shell
Cause: navigation completed before asynchronous data rendering. Fix: add a readiness marker or state condition tied to the final report, then wait for it before calling page.pdf().
Lower sections or images are missing
Cause: lazy loading, virtualization or an interaction-gated section. Fix: scroll through the page, click required controls, wait for the last section or image state, and verify the DOM’s scroll height and section count.
Free tools Windows power users keep installed
One-click scans. No signup required.
Network-idle wait never finishes
Cause: polling, analytics, WebSockets or another persistent request. Fix: rely on an app-specific readiness condition, or configure a bounded network-idle wait only as a supplemental heuristic.
PDF looks different from the browser
Cause: print media and @media print rules are active. Fix: inspect print CSS; use page.emulateMediaType('screen') only when screen styling is the actual requirement, and set printBackground: true when backgrounds are needed.
Colors or backgrounds are absent
Cause: printBackground defaults to false, and print color handling can differ. Fix: enable printBackground and review print color-adjust rules.
Fonts or layout shift after export
Cause: a web font failed, was blocked or had not completed loading. Fix: verify font requests, inspect document.fonts.status, keep waitForFonts: true, and correct the underlying font or CSP issue.
Best Value
- Affordable Versatility - A budget-friendly all-in-one printer perfect for both home users and hybrid workers, offering exceptional value
- Crisp, Vibrant Prints - Experience impressive print quality for both documents and photos, thanks to its 2-cartridge hybrid ink system that delivers sharp text and vivid colors
- Effortless Setup & Use - Get started quickly with easy setup for your smartphone or computer, so you can print, scan, and copy without delay
- Reliable Wireless Connectivity - Enjoy stable and consistent connections with dual-band Wi-Fi (2.4GHz or 5GHz), ensuring smooth printing from anywhere in your home or office
- Scan & Copy Handling - Utilize the device’s integrated scanner for efficient scanning and copying operations
Blank PDF or navigation error
Cause: an incorrect URL, authentication requirement, certificate issue or application error. Fix: log the final URL, title, console errors and failed requests; establish authentication before navigation and confirm the page is usable in a headed browser during debugging.
Performance, reliability and cost considerations
- Reuse a browser process for batches, but create a fresh page per export and always close pages and the browser in
finallyblocks. - Set explicit navigation and readiness timeouts so a broken app cannot hold a worker indefinitely.
- Do not mistake a shorter delay for a faster export: deterministic readiness prevents both premature PDFs and unnecessary waiting.
- Large images, charts and custom fonts increase memory and PDF size. Optimize those assets in the application when possible.
- For repeatable output, pin Puppeteer and its browser revision, set viewport and timezone deliberately, and keep the target data stable.
- Generate a normal paginated PDF unless a downstream system specifically requires a single tall page; standard pages are more portable.
Or skip the browser setup
ScreenshotNeo provides a website screenshot API and MCP server when you need a hosted capture instead of maintaining Chromium. Its PDF endpoint accepts a URL and can handle full-page capture, lazy images, waits, custom headers and cookies, and PDF paper, margin, landscape and page-range settings. Before capture it accepts consent banners and removes more than 60 known consent platforms, newsletter popups and chat widgets. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads and cache hits are not billed, and response headers identify the page verdict and billing status. Its MCP tools—take_screenshot, get_page_info and capture_pdf—let Claude, Cursor and other MCP clients request captures.
See the ScreenshotNeo API documentation for authentication and options. A direct call is:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
The same request in Python:
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
And in Node.js:
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
The Free plan includes 1,000 shots per month with no card. Paid plans start at $5 for 3,000 shots; every feature is on every plan, and yearly billing gives two months free. Sign up free for ScreenshotNeo.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problemsFAQ
Does fullPage: true work with page.pdf()?
No. It is a screenshot option. PDF output is controlled by paper dimensions, print CSS and PDF options.
Can Puppeteer guarantee that any SPA is ready?
No universal wait exists. The application must expose a condition that represents completion for its own data and interactions.
Should I emulate screen media for every PDF?
No. Print media is the default and is usually the appropriate basis for a printable document. Emulate screen media only when preserving screen styling is an explicit requirement.
Frequently Asked Questions
Can I save just selected PDF pages?
Yes. Pass a page range such as pageRanges: '1-3' in the PDF options after the complete document has rendered.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteWhy is a normal paginated PDF preferable to one very tall page?
Standard pages are easier to print, view, share and process across PDF readers; choose a tall custom dimension only when a downstream requirement specifically calls for it.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

