For one page, use your browser’s Print dialog and choose Save as PDF. For repeatable, programmable output, Puppeteer or Playwright render HTML with print CSS and expose controls for paper size, margins, backgrounds and page ranges. Acrobat is useful when you need local files, multi-level website capture or desktop conversion settings. An API is the better fit when HTML-to-PDF conversion belongs inside an application.
No single tool is proven to produce the best-looking PDF on every site. The right choice depends on whether your input is a URL, local HTML or generated markup; whether you need automation; how much print-layout control you require; and whether processing should happen locally or in a hosted service.
Quick comparison
| Need | Best starting point | What it provides |
|---|---|---|
| Save one page without setup | Chrome Print | Desktop Print > Save as PDF, with Ctrl+P on Windows/Linux or Command+P on Mac. |
| Automate JavaScript browser work | Puppeteer | page.pdf() with print CSS by default and an option to emulate screen media. |
| Control PDF layout in Playwright | Playwright | Paper dimensions, margins, backgrounds, page ranges and CSS page-size preference. |
| Capture several pages or local HTML from a desktop app | Acrobat desktop | URL or local HTML input, multi-level or entire-site capture, and path/server boundaries. |
| Integrate conversion into an application | Adobe PDF Services API | Documented conversion for static or dynamic HTML, ZIP input or a URL. |
This is a capability comparison, not a benchmark. The cited documentation does not establish relative speed, fidelity, privacy, retention, pricing, quotas or service-level guarantees.
Save a web page as PDF with Chrome
- Open the page in Chrome on your computer.
- Open the print dialog with Ctrl+P (Windows/Linux) or Command+P (Mac).
- Choose Save as PDF as the destination.
- Set the page range, paper size, orientation, margins, scale and background-graphics options offered by the dialog.
- Click Save, choose a filename and confirm the destination.
Chrome’s official instructions cover this desktop workflow: Print from Chrome – Computer. A browser print is usually the least complicated answer for a single, public page. It is less suitable when you must repeat the job, guarantee identical settings, wait for dynamic content or process many URLs.
Free tools Windows power users keep installed
One-click scans. No signup required.
#1 Best Overall
Generate PDFs in code with Puppeteer
Puppeteer’s page.pdf() generates a PDF using the print CSS media type by default. The official API reference also notes that you can emulate screen media before generating the file when the screen stylesheet is what you need: Puppeteer Page.pdf().
Minimal Node.js example
import puppeteer from 'puppeteer';
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com', { waitUntil: 'networkidle0' });
await page.pdf({
path: 'page.pdf',
format: 'A4',
printBackground: true,
margin: { top: '16mm', right: '16mm', bottom: '16mm', left: '16mm' }
});
await browser.close();
Install Puppeteer in the project that runs this script, and make sure the target page is reachable from that machine. Replace networkidle0 with a more appropriate readiness condition when a site keeps long-lived connections open. If the PDF should follow screen rather than print styling, call await page.emulateMediaType('screen') before page.pdf().
What can change the result
- Print-specific rules such as
@page, hidden print elements and page-break properties. - Fonts and images that have not finished loading when the PDF is created.
- Client-side rendering that needs a selector, delay or application-specific readiness signal.
- Cross-origin resources, authentication and pages that reject automated browsers.
Generate PDFs with Playwright
Playwright’s page.pdf() follows the same print-oriented default and returns a PDF buffer. Its documented options include paper size, margins, page ranges, backgrounds and whether CSS page size should be preferred: Playwright Page API.
import { chromium } from 'playwright';
import { writeFile } from 'node:fs/promises';
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com', { waitUntil: 'networkidle' });
const pdf = await page.pdf({
format: 'A4',
printBackground: true,
preferCSSPageSize: true,
margin: { top: '16mm', right: '16mm', bottom: '16mm', left: '16mm' }
});
await writeFile('page.pdf', pdf);
await browser.close();
Use Playwright when it already matches your browser-automation stack or when its page and context controls simplify the rest of your workflow. As with Puppeteer, the documentation describes behavior and options, not a universal fidelity ranking.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Convert HTML with Acrobat desktop
Acrobat documents converting a URL or local HTML file, capturing multiple levels of a site or an entire site, and restricting crawling to the same path or server. Its web-page conversion settings also cover layout, encoding, bookmarks, tagged PDF structure, headers and footers.
- Convert web pages to PDFs in Acrobat on desktop
- Customize web page to PDF conversion settings in Acrobat
This route makes sense if conversion is a desktop task, you need local HTML input, or you want Acrobat’s site-capture boundaries and document settings without maintaining browser code. The cited help does not establish which options depend on a particular operating system, edition or extension version, so check the controls in your installed release.
Use an HTML-to-PDF API
Adobe PDF Services documents an HTML-to-PDF operation for static and dynamic HTML, ZIP input and URLs: Adobe PDF Services API — HTML to PDF. This is an application-integration path rather than a claim about current price, quota, regional availability or service-level terms. Review the provider’s current processing and privacy terms before uploading confidential markup.
When a screenshot API is the simpler PDF workflow
If your requirement is a rendered representation of a URL rather than semantic PDF generation, ScreenshotNeo can return a clean screenshot or PDF from one GET request. It accepts cookie and consent banners before capture and removes more than 60 known consent platforms, newsletter popups and chat widgets; each step can be disabled. Bot checks, blank pages, timeouts, failed loads and cache hits are not billed, and response headers identify the page verdict and billing result.
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Or skip the browser setup
Use the API base documented at ScreenshotNeo’s documentation:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
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)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
ScreenshotNeo also provides an MCP server with take_screenshot, get_page_info and capture_pdf tools for Claude, Cursor and other MCP clients. Its Free plan includes 1,000 shots per month without a card; paid plans start at $5 for 3,000 shots. Create a free ScreenshotNeo account.
Choose print settings deliberately
Print CSS versus screen CSS
Both Puppeteer and Playwright use print media by default. That can hide navigation, change colors or rearrange columns. If the screen layout is the intended design, explicitly select screen media where the library supports it.
Paper, margins and page breaks
Set paper dimensions and margins in the tool rather than relying on a reader’s defaults. Use print CSS such as @page, break-before, break-after and break-inside to keep headings with content and prevent table rows from splitting where possible.
Backgrounds, fonts and images
Background colors and images are commonly optional. Enable background printing when the design depends on them, and wait for fonts and images before capture. No cited source establishes identical behavior across all sites, so inspect representative output.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Troubleshooting
The PDF is blank or missing content
Wait for the page’s actual readiness condition instead of only navigation completion. For browser automation, wait for a meaningful selector or application state, then confirm that images, fonts and client-rendered components have loaded.
The layout differs from the browser
Check whether print CSS is intentionally changing the design. In Puppeteer or Playwright, choose screen media when appropriate, set the paper size and margins explicitly, and test printBackground and CSS page-size preferences.
Pages are cut off or split badly
Reduce oversized fixed-width elements, set a suitable paper size, and add print page-break rules. Wide tables may require a landscape layout or a print-specific table style.
Rank #4
Fonts or images are absent
Verify that the conversion environment can fetch every resource, that authentication is supplied, and that the script waits for loading to finish. A local file may reference assets with paths that are invalid outside its original directory.
Automation hangs
Some pages keep WebSocket or analytics connections open, so a network-idle condition may never occur. Use a selector or bounded delay tied to the page’s known ready state, and always set an overall job timeout.
A hosted conversion raises confidentiality concerns
Keep sensitive HTML in a local browser workflow unless a hosted provider’s current privacy and processing terms meet your requirements. The cited material does not compare retention policies between services.
Practical decision guide
- One public page: Chrome Print > Save as PDF.
- Repeatable JavaScript jobs: Puppeteer or Playwright with explicit readiness and print settings.
- Desktop site capture or local files: Acrobat’s web-page conversion workflow.
- Application integration: Adobe PDF Services or your existing browser automation service.
- Rendered URL capture with cleanup and an MCP option: ScreenshotNeo, starting with its free monthly allowance.
Frequently Asked Questions
Does HTML-to-PDF preserve interactive form controls?
The cited documentation describes rendering and conversion options but does not establish preservation of interactive form behavior. Test the specific form and output requirements before choosing a workflow.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problemsCan these tools convert a local HTML file?
Acrobat’s desktop documentation explicitly covers local HTML input. Browser libraries can load local files when the runtime and file permissions are configured, but the supplied documentation does not define a universal local-file procedure.
Which option should handle confidential HTML?
Prefer a local Chrome, Puppeteer, Playwright or Acrobat workflow unless a hosted provider’s current privacy and processing terms satisfy your requirements.
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.

