Recommended Free Tools
For a few files, use a browser print dialog or an online converter. For recurring or larger jobs, use an API that explicitly supports batches or automate a browser renderer. The right choice depends on whether your inputs are local files, raw HTML, public URLs, authenticated pages, or ZIP archives—and on how much control you need over JavaScript, print CSS, page breaks, and privacy.
Choose the conversion route first
“Online” can mean several different workflows. A form that accepts one URL is not automatically a batch converter. Before uploading anything, classify your job:
| Situation | Practical route | What to verify |
|---|---|---|
| One-off conversion of a few public pages | Browser print workflow or online playground | Whether it accepts multiple inputs and lets you download each PDF |
| Repeated jobs from URLs or generated markup | Hosted API with a documented batch endpoint | Items per request, concurrency, quotas, retries and per-item errors |
| Local files, login-protected pages or strict layout control | Automated Chromium with Playwright | Authentication, network access, fonts, JavaScript and print settings |
| Mixed HTML files packaged together | Service accepting ZIP or a script that walks a directory | Archive structure, output naming and whether assets are included |
Run a representative test batch before committing. Include a page with web fonts, a JavaScript-rendered section, long tables, images and intentional page breaks. Compare the PDFs with the source and record failures per input.
What a real batch API should provide
Input compatibility
Providers differ substantially. Adobe PDF Services documents conversion from static and dynamic HTML, ZIP and URL inputs in its HTML-to-PDF documentation: Adobe PDF Services documentation. Cloudflare’s Browser Run PDF endpoint accepts either a URL or supplied HTML: Cloudflare Browser Run PDF endpoint. Confirm the exact upload or URL pathway before designing your pipeline. A public URL, a local file and a page that requires a login are different technical cases.
#1 Best Overall
- Convert your PDF files into Word, Excel & Co. the easy way
- Convert scanned documents thanks to our new 2022 OCR technology
- Adjustable conversion settings
- No subscription! Lifetime license!
- Compatible with Windows 11, 10, 8.1, 7 - Internet connection required
Batch size and concurrency
Ask for both the maximum items in one request and the number rendered at once. GoPDF’s documented batch endpoint accepts 1–50 HTML strings or URLs per request and renders up to 10 items concurrently; its example response reports status and errors for individual items: GoPDF API Reference. Those are GoPDF limits, not an industry standard. Check current quotas, rate limits and whether a large job must be split into smaller requests.
Failure reporting
A useful response identifies each input, its status, an error message and (when successful) a downloadable result. Without item-level results, one bad URL can make you guess which documents need retrying. Design retries around transient failures only; do not repeatedly retry a deterministic authentication or malformed-HTML error.
Rendering controls
Check support for print CSS, page size, margins, orientation, backgrounds, page ranges, headers and footers, fonts and JavaScript waits. These controls determine whether a PDF is merely readable or matches the intended print layout.
Manual online conversion for a small batch
- Prepare an input list. Put public URLs in a text file or gather the saved
.htmlfiles. Note pages that require login, client-side rendering, remote fonts or image URLs. - Choose a converter that accepts your input type. If it offers only a single-document form, process files one at a time; do not assume that pasting several URLs creates a batch.
- Set print options. Select paper format, portrait or landscape, margins and background graphics when available. Use the provider’s documented naming or download controls.
- Convert a small representative set. Inspect page breaks, missing images, font substitution, blank pages and content hidden behind cookie or login dialogs.
- Download and verify every output. Keep a simple source-to-filename list. Re-run only failed items rather than silently accepting a partial batch.
HTMLPDF.dev advertises both a browser playground and an API on its product page; those are vendor descriptions, so verify current limits, privacy terms and pricing yourself: HTMLPDF.dev. PDFCrowd likewise describes an HTML-to-PDF API: PDFCrowd HTML-to-PDF API.
Rank #2
- Convert over 50 document file formats.
- Preview your files from Doxillion before converting them.
- Use batch conversion to convert thousands of files at once.
- Enjoy an easy-to-use, intuitive interface with a Drag and Drop file option.
- Burn your converted or original files directly to disc.
Automate local or authenticated pages with Playwright
When you need control over a login session, local files or exact browser behavior, run Chromium yourself. Playwright’s page.pdf() uses print CSS media by default and documents options for screen-media emulation, format, margins, backgrounds and page ranges: Playwright Page API.
Install and create a converter
npm install playwright
npx playwright install chromium
Save this as batch-html-to-pdf.mjs. It accepts URLs or local paths, writes one PDF per input and continues after an individual failure.
import { chromium } from 'playwright';
import fs from 'node:fs/promises';
import path from 'node:path';
const inputs = process.argv.slice(2);
if (!inputs.length) {
console.error('Usage: node batch-html-to-pdf.mjs URL_OR_FILE ...');
process.exit(1);
}
const browser = await chromium.launch();
const context = await browser.newContext();
const results = [];
for (const input of inputs) {
const page = await context.newPage();
const name = (new URL(input, 'file:///').pathname.split('/').pop() || 'document')
.replace(/.[^.]+$/, '')
.replace(/[^a-z0-9_-]+/gi, '-');
const output = path.resolve(`${name || 'document'}.pdf`);
try {
if (/^https?:///i.test(input)) {
await page.goto(input, { waitUntil: 'networkidle', timeout: 90000 });
} else {
await page.goto(`file://${path.resolve(input)}`, { waitUntil: 'networkidle', timeout: 90000 });
}
await page.pdf({
path: output,
format: 'A4',
printBackground: true,
margin: { top: '16mm', right: '14mm', bottom: '16mm', left: '14mm' }
});
results.push({ input, output, status: 'ok' });
} catch (error) {
results.push({ input, status: 'failed', error: error.message });
} finally {
await page.close();
}
}
await browser.close();
console.log(JSON.stringify(results, null, 2));
Run it with node batch-html-to-pdf.mjs https://example.com ./reports/index.html. For a page whose layout is designed for screens, call await page.emulateMedia({ media: 'screen' }) before page.pdf(). Use page.pdf({ format: 'Letter', landscape: true, pageRanges: '1-3', printBackground: true }) when those settings match your output requirement. Wait for a specific selector instead of relying only on network idle when an application renders after API calls; for example, await page.waitForSelector('.report-ready', { state: 'visible', timeout: 30000 }).
Handling login-protected pages
Create a context with the required cookies or authenticate through the UI before visiting each URL. Keep credentials out of source files and logs. If a page is internal, ensure the machine running Chromium can reach it; a hosted converter may not be able to access private network addresses.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Repair Windows errors before they cause bigger problemsFix Now →Rank #3
- EDIT text, images & designs in PDF documents. ORGANIZE PDFs. Convert PDFs to Word, Excel & ePub.
- READ and Comment PDFs – Intuitive reading modes & document commenting and mark up.
- CREATE, COMBINE, SCAN and COMPRESS PDFs
- FILL forms & Digitally Sign PDFs. PROTECT and Encrypt PDFs
- LIFETIME License for 1 Windows PC or Laptop. 5GB MobiDrive Cloud Storage Included.
Processing many inputs safely
Use bounded concurrency
Opening one page per URL is simple but slow. Opening hundreds at once can exhaust memory, file descriptors or the target site’s rate limits. Use a queue with a small worker count, such as 3–10, and measure browser memory in your environment. Close each page after writing its PDF.
Make outputs deterministic
Derive names from an input ID rather than a full URL, which may contain characters invalid on your operating system. Store a manifest containing source, timestamp, output path, status and error. If the same source is converted again, write to a new run directory or use a stable content hash to avoid overwriting an approved PDF.
Retry selectively
Retry timeouts, connection resets and temporary server errors with exponential backoff. Fix malformed URLs, missing files, permission errors and authentication failures before retrying. For APIs, observe their documented rate limits and response headers.
Privacy and security checks
Technical API pages do not, by themselves, establish retention, confidentiality or access-control practices. Before sending nonpublic HTML, inspect the provider’s current terms for data handling, retention, deletion, encryption, subprocessors and regional processing. Treat URL fetching as an exposure risk: a converter may receive a URL containing a private token, and a hosted browser may be able to request resources you did not intend to publish. Prefer self-hosted Playwright for highly sensitive material when your organization requires local processing, and remove secrets from query strings.
Rank #4
- Edit PDFs with Ease. Modify text, images, and layouts directly within your PDF documents.
- Convert & Organize. Export PDFs to Word, Excel, or ePub, and organize files with ease.
- Read & Annotate. Enjoy intuitive reading modes and powerful tools to comment, highlight, and mark up PDFs.
- Create & Manage PDFs. Create new PDFs, combine multiple files, scan documents, and compress for easy sharing.
- Fill & Sign Forms. Complete forms and digitally sign documents with secure e-signature tools.
Or skip the browser setup
ScreenshotNeo is a website capture API and MCP server that can return PNG, JPEG, WebP or PDF from one GET request. It is useful when your “HTML to PDF” input is a reachable web page and you do not want to maintain Chromium. Before capture it accepts cookie or consent banners and removes more than 60 known consent platforms, newsletter popups and chat widgets; each cleanup step can be disabled. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads and cache hits are not billed, and the response identifies the page verdict and billing with X-Page-Verdict and X-Billed headers.
For PDF output and other options, see the ScreenshotNeo documentation. The basic 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
Replace the output extension and request parameters as documented when you need PDF output. Equivalent requests:
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 plans include 1,000 shots per month free with no card; paid plans start at $5 for 3,000 shots. Create a free ScreenshotNeo account.
Free tools Windows power users keep installed
One-click scans. No signup required.
Troubleshooting common failures
The PDF is blank
The page may require JavaScript, be blocked by a bot check, or have content that appears only after an interaction. In Playwright, wait for the application’s ready selector and inspect console or network errors. For a hosted service, verify that it supports dynamic pages and that the URL is publicly reachable.
Best Value
- ALL-IN-ONE SOLUTION – read, edit, convert, merge and protect your PDF files
- MAXIMUM FUNCIONALITY – create interactive forms, compare PDFs, bates numbering, find and replace text or colors, convert documents, OCR engine, comment, highlight, fill out and print forms, document protection and others
- EASY TO INSTALL AND USE – well-structured user-interface, in-program instructions, free tech support whenever you need it
- GREAT VALUE FOR MONEY - why spend a fortune if you can have maximum functionality at a reasonable price - this also fits the requirements of companies very well
Images or fonts are missing
Check that asset URLs are absolute and accessible from the rendering environment. Local relative paths need a correct file:// base or a local web server. Wait for fonts and images before printing, and confirm that the converter allows background graphics.
Cookie banners cover the content
Dismiss the banner in an automation script before page.pdf(), hide its selector with CSS, or use a service that explicitly performs consent cleanup. Do not assume every provider removes the same vendors.
Page breaks split tables or headings
Add print-specific CSS such as break-inside: avoid for rows or cards, break-before: page for chapter headings and an explicit @page size. Then test with long and short content; browser engines can still move elements when a block cannot fit in the remaining space.
A batch partially fails
Use per-item status where available, save successful files immediately and retry only transient failures. If the service returns one aggregate error, split the batch into smaller groups to identify the offending input.
The result has the wrong paper size or colors
Set the format or paper size explicitly, choose orientation, enable print backgrounds and check whether the renderer uses print or screen media. Playwright defaults to print media unless you emulate screen media.
Final selection checklist
- Have you identified whether each input is a file, raw HTML, public URL, ZIP or authenticated page?
- Does the chosen route document batch size, concurrency, quotas and item-level errors?
- Have you tested JavaScript, fonts, images, backgrounds, page breaks and filenames?
- Are privacy, retention, access controls and URL-fetch behavior acceptable for the material?
- Do you have a manifest and a retry plan so one failure cannot hide a partial batch?
Frequently Asked Questions
Can I convert a folder of HTML files without uploading them to a third party?
Yes. Run Chromium with Playwright locally, pass each file path to a worker queue, and write PDFs to a local output directory. This keeps source content on your machine but requires maintaining the browser runtime.
Is converting a URL the same as converting an HTML file?
No. A URL may depend on JavaScript, authentication, remote assets, cookies and network access. A local file has different path and security behavior, so test the exact input type you will process.
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallCrashes, 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 minuteHow do I know whether an online converter really supports batching?
Look for a documented batch endpoint, an explicit maximum number of items per request, concurrency information and per-item result or error fields. A single-file form or a multi-upload button without those details is not proof of API batching.
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.




