What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.
The reliable fix is to make the rendering environment deterministic: use the exact same wkhtmltoimage/Qt build in production, install and verify the required fonts with fontconfig, provide a compatible local TTF or OTF fallback, allow local font access when needed, and wait for web fonts to finish loading. If glyphs are correct but pixels still look different, Qt WebKit’s anti-aliasing and kerning—not your CSS—may be the limit.
Why wkhtmltoimage renders fonts differently
wkhtmltoimage is an open-source command-line renderer that uses the Qt WebKit engine. Font output therefore depends on more than the font-family declaration: the wkhtmltoimage and Qt build, operating system, CPU architecture, fontconfig, FreeType, and the exact font files visible to the process all affect the result.
A family name is only a request. If that family is absent, Qt can substitute another family. If the substitute lacks a character, the image may contain empty boxes or replacement glyphs. Two machines can render identical HTML differently when they use different wkhtmltoimage binaries, system fonts, font versions, or graphics libraries.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Fix the driver behind crashes, sound loss and screen glitches3Clear out junk files and repair common Windows errorsStart with a reproducible diagnosis
- Record the renderer. Run
wkhtmltoimage --versionand save the complete output. Also record the operating-system distribution, architecture, and the absolute path of the binary. Test with that same binary and user account in production; Linux builds from the same nominal release can show different font behavior. - Reduce the page. Create a minimal HTML file containing one heading, one paragraph in ASCII, and one paragraph using the affected script. Remove JavaScript, images, animations, and unrelated CSS. This separates font selection problems from layout or timing problems.
- Check fonts at the OS layer. Confirm that the intended family and all required script glyphs are installed and visible to fontconfig. Qt normally uses fontconfig and FreeType for system-font access. Verify as the same user that runs wkhtmltoimage, not only as an administrator.
- Compare a known local file. Test a compatible TrueType (
.ttf) or OpenType (.otf) file with an explicit family declaration. Compare the output with your system-font version. If the local file works and the system family does not, the issue is installation or discovery rather than CSS. - Test each script directly. Assign the intended family to the element containing the affected characters. This exposes substitution and missing-glyph behavior before you investigate blur or kerning.
Fix installed system fonts
Install the licensed font in the image-generation environment, refresh the operating system’s fontconfig cache using the distribution’s normal procedure, and rerun the converter as the production account. Keep a fallback stack that covers every script on the page:
#1 Best Overall
- CRISP CLARITY: This 23.8″ Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
- INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
- THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors
- WORK SEAMLESSLY: This sleek monitor is virtually bezel-free on three sides, so the screen looks even bigger for the viewer. This minimalistic design also allows for seamless multi-monitor setups that enhance your workflow and boost productivity
- A BETTER READING EXPERIENCE: For busy office workers, EasyRead mode provides a more paper-like experience for when viewing lengthy documents
body {
font-family: "Inter", "Noto Sans", Arial, sans-serif;
}
.cjk {
font-family: "Noto Sans CJK SC", "Noto Sans", sans-serif;
}
.arabic {
font-family: "Noto Naskh Arabic", "Noto Sans Arabic", sans-serif;
}
Do not assume that a family name proves the font is present. Check the actual installed files and glyph coverage. A broad fallback such as sans-serif can prevent boxes, but it may change metrics and visual style; script-specific families are more predictable.
Make local @font-face work
For a bundled font, use a correctly resolved URL and a format that the deployed Qt/FreeType stack can parse. A minimal example is:
@font-face {
font-family: "Report Sans";
src: url("fonts/report-sans-regular.ttf") format("truetype");
font-weight: 400;
font-style: normal;
font-display: block;
}
body { font-family: "Report Sans", Arial, sans-serif; }
When the HTML is loaded from local files, wkhtmltoimage may block local resources. Enable local-file access for the conversion where appropriate:
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →wkhtmltoimage --enable-local-file-access input.html output.png
Also verify that the converter user can read both the HTML and font files, that relative URLs resolve from the document’s actual location, and that the server or file response has a sensible font MIME type. Reports about dummy elements or alternate formats indicate build-specific experiments, not universal fixes; prefer a properly activated, compatible font file.
Rank #2
- CRISP CLARITY: This 22 inch class (21.5″ viewable) Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
- 100HZ FAST REFRESH RATE: 100Hz brings your favorite movies and video games to life. Stream, binge, and play effortlessly
- SMOOTH ACTION WITH ADAPTIVE-SYNC: Adaptive-Sync technology ensures fluid action sequences and rapid response time. Every frame will be rendered smoothly with crystal clarity and without stutter
- INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
- THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors
Handle Google and other remote web fonts
Browser output is not a reliable predictor of wkhtmltoimage output. Remote fonts can fail because the server is unreachable, TLS or DNS differs in the rendering environment, the response is blocked by policy, or the font has not finished loading when capture begins. Linux issue reports also describe Google web fonts rendering differently from standard fonts in some 0.12-era binaries.
- Download a licensed local copy and test it with
@font-face. - Confirm network access from the machine running wkhtmltoimage.
- Use a longer JavaScript delay when your page injects font CSS or content after initial load.
- Compare the remote result with a system-font fallback so you can identify whether the problem is loading or glyph selection.
The delay setting only waits; it cannot make an unsupported font format parsable. If the page loads fonts after page load, try:
wkhtmltoimage --javascript-delay 3000 input.html output.png
Choose a delay based on your page rather than treating 3,000 milliseconds as a universal requirement.
Fix Unicode boxes and incorrect fallback
Boxes usually mean that the selected font has no glyph for the character, not that the character encoding is inherently broken. Confirm the document uses UTF-8 and then check coverage in the selected family. Give script-specific text its own element:
Rank #3
- Clear visuals. Fluid motion: A 144Hz refresh rate and 1ms MPRT deliver smooth, tear‑free motion across work, gaming, and streaming for clearer, more fluid viewing.
- Eye comfort: TÜV Rheinland 3‑star* certification reduces harmful blue light while preserving stunning color quality without compromise. *TÜV Rheinland 3-star eye comfort certification.
- Wide viewing angle: Get consistent views across a wide 178° /178° viewing angle.
- In-Plane Switching (IPS): See excellent color accuracy and consistency across wide viewing angles with In-plane Switching (IPS) technology.
- Ultra-thin bezels: Maximize your viewing experience with thin bezels.
<meta charset="utf-8">
<h1>English heading</h1>
<p class="arabic" lang="ar">مرحبا بالعالم</p>
<p class="cjk" lang="zh-CN">你好,世界</p>
Some wkhtmltoimage/wkhtmltopdf 0.12-era builds do not perform character-level fallback reliably. Wrapping script fragments and assigning each a family is a practical workaround. Test mixed-script lines, emoji, combining marks, and punctuation separately; a font that covers one range may not cover another.
When the font is correct but the image is blurry
Once glyph selection and loading are correct, remaining differences are often renderer characteristics. Qt WebKit, FreeType, operating-system hinting, and output scale affect anti-aliasing, baseline placement, spacing, and kerning. The -webkit-font-smoothing property is not consistently effective in wkhtmltoimage, and changing CSS alone may not reproduce browser-identical pixels. Long-standing issue reports document inconsistent smoothing and kerning results.
- Compare at the same viewport, device scale, and output dimensions.
- Use the same font file and weight; synthetic bold or italic changes metrics.
- Render at a larger pixel size and downsample externally if your workflow permits it.
- Do not substitute a different family merely to hide anti-aliasing differences; that changes glyph shapes and layout.
Option-by-option comparison
| Variable | What to compare | Typical symptom |
|---|---|---|
| Binary and Qt build | Version, architecture, absolute path | Same HTML differs between hosts |
| Font delivery | Installed system font versus bundled @font-face |
Family silently substitutes |
| Resource location | Local file versus remote URL | Font works in browser but not in capture |
| Glyph coverage | Required scripts and symbols in the actual file | Boxes or mixed-script changes |
| Capture timing | Initial load, JavaScript delay, network completion | Fallback appears intermittently |
| Raster quality | Kerning, hinting, anti-aliasing, scale | Correct font looks soft or spaced differently |
Troubleshooting common failures
“The declared family is ignored”
Cause: the family is not visible to fontconfig, the process runs as another user, or the font file failed to load. Fix: verify installation and permissions, test an explicit local file, and inspect the minimal page before changing CSS.
“@font-face works in Chrome but not wkhtmltoimage”
Cause: blocked local-file access, an unresolved URL, an unsupported format, or a different Qt/FreeType stack. Fix: use a local TTF/OTF, pass --enable-local-file-access for local documents, and check paths and readability.
Rank #4
- CURVED FOR ENHANCED ENGAGEMENT: An immersive viewing experience with a curved monitor that wraps more closely around your field of vision; It creates a wider view, enhancing depth perception and minimizing peripheral distraction
- SMOOTH PERFORMANCE FOR SEAMLESS CONTENT: Stay in the action when playing games, watching videos, or working on creative projects; The 100Hz refresh rate reduces lag and motion blur so you don't miss a thing in fast-paced moments¹
- MORE GAMING POWER: Gain the edge with optimizable game settings; Color and image contrast can be adjusted to see scenes more vividly and spot enemies hiding in the dark; Game Mode adjusts any game to fill the screen so you can view every detail²
- KEEP IT EASY ON THE EYES: Care for your eyes and stay comfortable, even during long sessions; Advanced eye comfort technology certified by TÜV reduces eye strain by minimizing blue light and reducing irritating screen flicker²
- INCREASED VERSATILITY: Connect to more; Plug devices straight into your monitor for increased flexibility, making your computing environment even more convenient
“Only some languages show boxes”
Cause: incomplete glyph coverage or unreliable character-level fallback. Fix: install a family covering that script or wrap the text in a script-specific element with its own family.
“The font appears intermittently”
Cause: the page injects CSS or fonts after the first load. Fix: increase --javascript-delay, remove unnecessary asynchronous loading, or bundle the font locally. A delay cannot repair an unsupported font format.
“Text is correct but kerning differs”
Cause: Qt WebKit and FreeType rasterization differ from modern browsers. Fix: standardize the binary, font file, scale, and host; accept that CSS smoothing controls may not produce identical pixels.
“The output is unexpectedly blank”
Cause: a page-load failure, blocked resource, or timeout rather than a font issue. First capture a text-only local page, then investigate URL access and timing separately.
Best Value
- 【INTEGRATED SPEAKERS】Whether you're at work or in the midst of an intense gaming session, our built-in speakers provide rich and seamless audio, all while keeping your desk clutter-free.
- 【EASY ON THE EYES】 Protect your eyes and enhance your comfort with Blue-Light Shift technology. This feature reduces harmful blue light emissions from your screen, helping to alleviate eye strain during long hours of use and promoting healthier viewing habits.
- 【WIDEN YOUR PERSPECTIVE】Our sleek minimal bezel design ensures undivided attention. The nearly bezel-free display seamlessly connects in a dual monitor arrangement, delivering an unobstructed view that lets you focus on more at once, completely distraction-free.
Operational checklist
- Pin the wkhtmltoimage binary and record
--version. - Use the same OS image, architecture, fonts, and rendering user in every environment.
- Bundle and license critical fonts; verify TTF/OTF compatibility.
- Refresh fontconfig after installation and test actual script coverage.
- Prefer explicit, script-aware fallback stacks.
- Allow local-file access only when required and protect untrusted HTML.
- Set a deliberate JavaScript delay for dynamically loaded fonts.
- Compare output size and scale before judging sharpness.
- Keep a minimal regression page containing ASCII, accented Latin, CJK, Arabic, combining marks, and symbols.
Or skip the browser setup
If your goal is a dependable website image rather than maintaining a wkhtmltoimage environment, ScreenshotNeo provides a website screenshot API and MCP server. It accepts a URL and returns PNG, JPEG, WebP, or PDF; before capture it accepts consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and each response reports the page verdict and billing status in X-Page-Verdict and X-Billed headers.
One request is enough:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
See the complete parameter reference in the ScreenshotNeo documentation. The same call 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,
)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)
And 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}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const fs = await import('node:fs/promises');
await fs.writeFile('shot.webp', Buffer.from(await res.arrayBuffer()));
ScreenshotNeo also offers an MCP server with take_screenshot, get_page_info, and capture_pdf for Claude, Cursor, and other MCP clients. Features include full-page lazy-image loading, CSS-selector element capture, device presets and custom viewports, retina scale, custom CSS and JavaScript, waits, request blocking, headers, cookies, user agents, geolocation, transparent backgrounds, resizing, chosen-TTL caching, signed links, asynchronous webhooks, bulk capture of up to 100 URLs per call, usage reporting, and an OpenAPI specification. Every feature is on every plan: 1,000 shots per month are free with no card; paid plans start at $5 for 3,000 shots, with yearly billing offering two months free.
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 & 11Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchCreate a free ScreenshotNeo account and get 1,000 screenshots a month without adding a card.
Frequently Asked Questions
Does changing font-family alone fix wkhtmltoimage font problems?
No. The requested family must exist, contain the needed glyphs, and be visible to the Qt/fontconfig stack. Loading, permissions, format support, and capture timing can all override the CSS declaration.
Should I use WOFF2 for wkhtmltoimage?
Do not assume it will work across builds. A compatible local TTF or OTF is the safer diagnostic baseline; confirm support in the exact Qt/FreeType binary you deploy.
Why does a browser screenshot look sharper than wkhtmltoimage?
They use different rendering engines and rasterization paths. Even with identical font files, Qt WebKit may produce different hinting, anti-aliasing, spacing, or kerning.
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.

