What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

To keep links clickable when converting HTML to PDF, preserve ordinary <a href="..."> elements, make sure relative links have a valid base URL, and use a renderer suited to the page: WeasyPrint for mostly static HTML and Python workflows, Puppeteer for JavaScript-dependent pages, or wkhtmltopdf when its command-line controls fit your deployment. Then open the generated PDF in the viewer your readers use and test external, internal, and fragment links.

Choose a converter that matches the page

Clickable links are PDF annotations generated from links in the rendered HTML; they are not guaranteed merely because a URL appears as text. The source markup, URL resolution, rendering timing, PDF output, and viewer all matter. The three options below document link support, but none promises a universal link-success rate. Test the actual output with your page and target PDF viewer.

Tool Best fit Link handling JavaScript and styles Runtime
WeasyPrint Python projects and mostly static HTML/CSS Documents clickable internal and external hyperlinks; relative external links are resolved to absolute URLs when the base is known. Use when the page does not depend on browser JavaScript. Python API or CLI.
Puppeteer Pages whose final content depends on JavaScript or browser rendering Renders the page in a browser before producing the PDF; test the resulting links. Uses print CSS by default; can emulate screen media instead. Node.js application plus a browser runtime.
wkhtmltopdf Deployments where a command-line converter and its controls meet requirements External and internal links are enabled by default; switches can be stated explicitly. Offers JavaScript and delay switches, as well as controls for images, forms, and local files. Standalone CLI.

The cited tool documentation establishes these capabilities, not comparative speed, resource use, or success percentages. Those depend on the page and deployment.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Keep links intact in the HTML

Use real anchor elements

Write links as ordinary HTML anchors, for example <a href="https://example.com/guide">Read the guide</a>. A URL printed as plain text is not necessarily a clickable link in the PDF. Keep meaningful link text so the destination is understandable when the PDF is read or printed.

#1 Best Overall
Canon Canoscan Lide 300 Scanner (PDF, AUTOSCAN, Copy, Send)
  • Scanner type: Document
  • Connectivity technology: USB
  • With Auto Scan Mode, the scanner automatically detects what you're scanning
  • Digitize documents and images

Resolve relative URLs

A link such as <a href="/contact">Contact</a> needs a base address. When converting a web page by URL, the page address normally provides that context. When converting a local file or an HTML string, relative destinations and assets can resolve differently; use absolute URLs or provide a correct base URL using the selected renderer’s supported mechanism. WeasyPrint documents resolving relative external links to absolute URLs.

Preserve fragment targets

For in-document navigation, retain both the fragment link and its target ID: <a href="#pricing">Pricing</a> and <h2 id="pricing">Pricing</h2>. Render the PDF and click the link; confirm that it lands at the intended location. A fragment reference can exist in the source yet fail if its target is missing or the conversion does not preserve the relationship as expected.

Let scripts finish before rendering

If JavaScript inserts, changes, or removes anchors, take the PDF only after that work has finished. Puppeteer can wait for a navigation condition or a page-specific selector. wkhtmltopdf exposes JavaScript and delay options, but a fixed delay cannot guarantee that every asynchronous page is ready. Prefer a readiness condition you can verify when the chosen tool offers one.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Convert with WeasyPrint in Python

Install WeasyPrint using the instructions for your operating system and Python environment in its documentation, then run this minimal example:

Rank #2
Sale
Epson Workforce ES-50 Compact & Lightweight Mobile Document Scanner
  • PORTABLE SCANNER FOR USE ON-THE-GO — The fastest and lightest mobile single-sheet-fed compact document scanner in its class¹
  • QUICK DOCUMENT SCANNING ― This Epson ultra-fast scanner scans a single page as quickly as 5.5 seconds²; Windows and Mac compatible
  • VERSATILE PAPER HANDLING ― Portable scanner scans documents up to 8.5 x 72 in; Also easily digitizes receipts and ID cards to make accounting, bookkeeping, and organizing simpler
  • INTUITIVE, HIGH-SPEED SOFTWARE — Epson ScanSmart Software³ is a smart tool allowing you to easily scan, review, and save; Stay organized easily with the help of this Epson scanner
  • EASY SETUP — USB-powered connect to your computer for quick and simple scanning; No batteries or external power supply required to operate portable document scanner; Standard Connectivity: USB 2.0
from weasyprint import HTML

HTML(url="https://example.com/article").write_pdf("article.pdf")

WeasyPrint accepts a URL, filename, or HTML string as input and writes a PDF. Its documentation describes hyperlinks, bookmarks, attachments, and forms in PDF output. For a local file, provide a filename instead of url; for an HTML string, use the API’s string input and make sure relative references have the intended base URL. See the WeasyPrint documentation for installation, input forms, and API details.

Choose this path when the content is already available in HTML/CSS and does not require JavaScript execution to become complete. If a page relies on scripts to create its final content or links, render it with a browser-based tool instead.

Convert with Puppeteer in Node.js

With Puppeteer installed in your Node.js project, navigate to the page, wait for it to be ready, and generate a PDF:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
import puppeteer from "puppeteer";

const browser = await puppeteer.launch();
try {
  const page = await browser.newPage();
  await page.goto("https://example.com/article", { waitUntil: "networkidle0" });
  await page.pdf({ path: "article.pdf", format: "A4", printBackground: true });
} finally {
  await browser.close();
}

page.pdf() uses print CSS by default. If the screen stylesheet is the intended output, emulate screen media before making the PDF:

Rank #3
Sale
Brother DS-640 Compact Mobile Document Scanner, (Model: DS640)
  • FAST SPEEDS - Scans color and black and white documents a blazing speed up to 16ppm (1). Color scanning won’t slow you down as the color scan speed is the same as the black and white scan speed.
  • ULTRA COMPACT – At less than 1 foot in length and only about 1. 5lbs in weight you can fit this device virtually anywhere (a bag, a purse, even a pocket).
  • READY WHENEVER YOU ARE – The DS-640 mobile scanner is powered via an included micro USB 3. 0 cable allowing you to use it even where there is no outlet available. Plug it into you PC or laptop and you are ready to scan.
  • WORKS YOUR WAY – Use the Brother free iPrint&Scan desktop app for scanning to multiple “Scan-to” destinations like PC, Network, cloud services, Email and OCR. (2) Supports Windows, Mac and Linux and TWAIN/WIA for PC/ICA for Mac/SANE drivers. (3)
  • OPTIMIZE IMAGES AND TEXT – Automatic color detection/adjustment, image rotation (PC only), bleed through prevention/background removal, text enhancement, color drop to enhance scans. Software suite includes document management and OCR software. (4)
await page.emulateMediaType("screen");
await page.pdf({ path: "article.pdf", format: "A4", printBackground: true });

See the Puppeteer PDF API for the PDF method and media emulation API for media selection. Pick a navigation wait condition that suits the page: network quiet may be inappropriate for a site that continually polls or holds connections open. For critical pages, wait for a selector that indicates the content and links have appeared, then inspect the PDF.

Convert with wkhtmltopdf from the command line

The usage reference documents explicit controls for external and internal links, JavaScript, and a JavaScript delay. The following makes those choices visible in the command:

wkhtmltopdf --enable-external-links --enable-internal-links 
  --enable-javascript --javascript-delay 500 page.html page.pdf

External and internal links are enabled by default in the documented usage, so the explicit switches make the intended behavior clear rather than changing the default. The delay value is an example setting, not a universal readiness guarantee. Adjust it to the page and verify that scripts have completed before relying on the output. The wkhtmltopdf usage reference also documents image, form, and local-file controls. Review local-file access carefully when converting untrusted input or running the converter in a service.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Check the PDF, not just the command

  1. Inspect the source. Confirm that each intended destination is an anchor with a valid href, and that fragment links have matching target IDs.
  2. Check URL context. Resolve relative links against the correct page or base URL, especially for local files and HTML strings.
  3. Render after content is ready. If scripts create links, use a readiness condition or a suitable delay before capture.
  4. Open the generated PDF in the target viewer. Click representative external links, internal links, and fragment links; confirm each opens or navigates to the expected destination.
  5. Check output styling separately. If the page looks different from the browser, verify whether the converter used print or screen CSS and whether backgrounds or other resources were included.

PDF viewers can handle navigation differently, so test with the viewer and workflow that matter to your readers. If the link annotation is absent in the PDF itself, revisit markup and renderer behavior; if it is present but not acting as expected, compare in another viewer.

Rank #4
Sale
Epson Workforce ES-400 II High-Speed Color Duplex Desktop Document Scanner
  • FAST DOCUMENT SCANNING — Document scanner with feeder allows you to speed through stacks with a 50-sheet Auto Document Feeder (ADF); Efficient office scanner to help you scan more productively
  • INTUITIVE, HIGH-SPEED SOFTWARE — Quickly scan with this desktop document scanner; Epson ScanSmart Software lets you easily preview scans, email files, upload to the cloud, and more; Plus, automatic file naming saves even more time
  • SEAMLESS INTEGRATION — Easily incorporate your data into most document management software with the included TWAIN driver; Office document scanner integrates seamlessly with business workflows
  • EASY SHARING — Duplex scanner allows you to scan straight to email or popular cloud storage2 services like Dropbox, Evernote, Google Drive, and OneDrive for simple storage and sharing
  • SIMPLE FILE MANAGEMENT — Scanner allows the creation of searchable PDFs with Optical Character Recognition (OCR) and convert scans to editable Word or Excel files effortlessly; Designed for home and office document scanning

When archival or accessibility output matters

WeasyPrint documents PDF/A and PDF/UA output variants, but support for a variant does not guarantee that a particular file conforms. Correct document structure and separate conformance checks remain necessary. Do not treat a successful conversion as proof of archival validity or accessibility compliance. See the WeasyPrint PDF/A documentation and PDF/UA documentation.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshoot missing or broken links

Links appear as text but do not click

  • Check that the text is inside an <a href="..."> element rather than being a bare URL or styled text.
  • Ensure scripts that create anchors have run before the PDF is produced.
  • Test another PDF viewer to distinguish missing PDF annotations from viewer-specific behavior.

Links work on one page but not another

  • Inspect the failing link for an empty, malformed, or unexpected href.
  • For relative links, verify the page URL or base URL used by the converter.
  • For fragments, verify that the target element still has the exact matching ID after scripts run.

JavaScript-generated content is absent

  • Use Puppeteer when browser execution determines the final page.
  • Wait for a page-specific element that indicates content is ready; avoid assuming a fixed delay suits every request.
  • With wkhtmltopdf, verify JavaScript is enabled and use its delay control only as a measured fit for your page.

The PDF looks unlike the browser page

  • Puppeteer prints using print CSS by default. Emulate screen media if that is the output you need.
  • Check print-specific styles, background printing, and whether images or other resources loaded successfully.
  • For WeasyPrint, use HTML/CSS appropriate to its rendering model rather than depending on browser JavaScript.

Local links or assets fail in deployment

  • Confirm the process can read the needed files and that relative paths are resolved from the intended base.
  • Check the converter’s local-file permissions and controls. Do not broadly enable access to local resources for untrusted HTML.
  • Reproduce the conversion using the same input type and runtime as production; a URL, local filename, and HTML string are not interchangeable contexts.

Or skip the browser setup

If your goal is a clean image or PDF capture of a web page rather than a custom HTML-to-PDF pipeline, ScreenshotNeo is a website screenshot API and MCP server. A single GET request can return a PNG, JPEG, WebP, or PDF. It is not a substitute for controlling your own HTML renderer when you need custom PDF structure or conformance checks.

For example, this cURL request saves a PDF capture:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
curl -G "https://api.screenshotneo.com/v1/shot" 
  -d access_key=YOUR_API_KEY 
  --data-urlencode url=https://example.com/article 
  -d format=pdf 
  -o article.pdf

See the ScreenshotNeo API documentation for request parameters and response details. ScreenshotNeo accepts cookie or consent banners as a visitor and removes 60+ known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing, with response headers identifying the page verdict and billing status. Its MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients. The free plan includes 1,000 shots per month without a card; paid plans start at $5 for 3,000 shots.

Sign up for 1,000 free screenshots a month with no card.

Best Value
Sale
ScanSnap iX1300 Wireless or USB Double-Sided Color Document Scanner, Black
  • FITS SMALL SPACES AND STAYS OUT OF THE WAY. Innovative space-saving design to free up desk space, even when it's being used
  • SCAN DOCUMENTS, PHOTOS, CARDS, AND MORE. Handles most document types, including thick items and plastic cards. Exclusive QUICK MENU lets you quickly scan-drag-drop to your favorite computer apps
  • GREAT IMAGES EVERY TIME, NO EXPERIENCE REQUIRED. A single touch starts fast, up to 30ppm duplex scanning with automatic de-skew, color optimization, and blank page removal for outstanding results without driver setup
  • SCAN WHERE YOU WANT, WHEN YOU WANT. Connect with USB or Wi-Fi. Send to Mac, PC, mobile devices, and cloud services. Scan to Chromebook using the mobile app. Can be used without a computer
  • PHOTO AND DOCUMENT ORGANIZATION MADE EFFORTLESS. ScanSnap Home all-in-one software brings together all your favorite functions. Easily manage, edit, and use scanned data from documents, receipts, business cards, photos, and more

Frequently Asked Questions

Does converting HTML to PDF automatically make every URL clickable?

No. The destination needs to be represented as a link in the HTML, and the renderer and PDF viewer must preserve and handle it. Verify the actual PDF.

Which option should I choose for a page built with JavaScript?

Use Puppeteer when browser execution determines the page’s final content or links. Wait until those elements are ready before generating the PDF.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Does PDF/A or PDF/UA support mean my PDF is compliant?

No. WeasyPrint documents output variants, but validity is not guaranteed; the document still needs appropriate structure and conformance checks.

Quick Recap

Bestseller No. 1
Canon Canoscan Lide 300 Scanner (PDF, AUTOSCAN, Copy, Send)
Canon Canoscan Lide 300 Scanner (PDF, AUTOSCAN, Copy, Send)
Scanner type: Document; Connectivity technology: USB; With Auto Scan Mode, the scanner automatically detects what you're scanning
$75.00

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.