Free tools Windows power users keep installed
One-click scans. No signup required.
“Internal Error” is not one wkhtmltopdf failure. It is often a wrapper’s label for a process that returned no usable PDF, while the real cause is in stderr, the exit status, the executable build, input HTML, or the output path. Start by running the exact command outside your framework, capture complete stderr and the exit code, and then narrow the problem with a minimal trusted HTML file and a normal output filename.
1. Capture the real failure first
Do not begin by reinstalling wkhtmltopdf or changing random flags. Record the executable path, complete argument list, working directory, input URL or file, output path, exit status, standard output and standard error. Remove passwords, tokens and private paths before sharing logs.
Run the command with separate logs
On Linux or macOS, redirect each stream while preserving the status:
/absolute/path/wkhtmltopdf input.html output.pdf 1>stdout.log 2>stderr.log
status=$?
printf 'exit=%sn' "$status"
cat stderr.log
On Windows PowerShell:
& 'C:Program Fileswkhtmltopdfbinwkhtmltopdf.exe' 'C:workinput.html' 'C:workoutput.pdf' 2> .stderr.log
$LASTEXITCODE
Get-Content .stderr.log
A framework exception such as “WKHTMLTOPDF didn’t return any data” may simply be hiding stderr. Inspect the process-result object used by your wrapper and make stderr visible in development logs.
Recommended Free Tools
#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
Check the executable actually being used
wkhtmltopdf --version
which wkhtmltopdf # Linux/macOS
where wkhtmltopdf # Windows
Also log the path resolved by the application. A shell may find one binary while PHP, Python, a container, a service account or a job runner finds another.
2. Compare direct CLI execution with the wrapper
Create a tiny local file and invoke the binary directly:
<!doctype html>
<html><body><h1>wkhtmltopdf test</h1><p>Plain local input.</p></body></html>
wkhtmltopdf ./test.html ./test.pdf
If this works, the rendering engine and basic file output are functioning. Concentrate on the integration layer:
- Quote executable and file paths, especially paths containing spaces.
- Log the final argument array after your wrapper has expanded options.
- Confirm the service account can execute the binary and write the destination directory.
- Check that process-execution functions such as
proc_openhave not been disabled by runtime policy. - Set an explicit working directory; relative CSS, image and font URLs depend on it.
- Ensure the wrapper waits for process completion and reads stderr before closing pipes.
A historical CakePdf/Windows report associated the symptom with a path containing spaces and an exception that concealed stderr. Treat that as a case example, not a universal Windows diagnosis.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
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.
3. Identify the build, platform and Qt variant
The official project lists 0.12.6 as its stable series, released June 11, 2020. Its download information distinguishes operating systems, distributions and CPU architectures. The project repository was archived and made read-only on January 2, 2023. Those facts describe maintenance status; they do not, by themselves, explain your error.
Save the output of wkhtmltopdf --version together with:
- OS and release (for example, Ubuntu 22.04 or Windows 10)
- Architecture (x86, x86_64, ARM, and whether a 32-bit process is running)
- How the package was installed (project package, distribution repository, container image or vendor bundle)
- Whether the output mentions a patched Qt build
The project documentation explains that patched Qt supplies capabilities not present in upstream Qt WebKit. Distribution packages may omit those capabilities. OpenSSL, libc and other system-library versions, plus installed fonts, can change behavior between otherwise similar hosts. Match a candidate package to the actual operating system and architecture, test it in staging, and keep the old binary available for rollback. Do not apply another person’s version change as a guaranteed fix.
4. Separate PDF generation from output and input failures
Test a conventional file destination
Use a writable local directory and a simple filename such as /tmp/wk-test.pdf or C:workwk-test.pdf. Check that the resulting file exists, has nonzero size and can be opened by a PDF reader. A read-only directory, invalid filename, quota limit or security policy can look like a rendering failure.
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.
Test stdin and stdout independently
First use ordinary files. Then test streams only if your application requires them:
cat test.html | wkhtmltopdf - streamed.pdf
wkhtmltopdf test.html - > streamed.pdf
Do not assume a command that writes a PDF to stdout is equivalent to a command that writes a named file. A project issue from 2014 describes “Could not save image,” unreadable PDF output when redirecting through stdout, and an internal error in another stdin invocation on a 32-bit Windows XP setup. That report requested a minimal test case and did not establish a universal root cause.
Use a trusted minimal document
Remove JavaScript, external stylesheets, web fonts, remote images, redirects and authentication. If the minimal file succeeds, add resources back one at a time. This distinguishes HTML or resource failures from process, package and filesystem failures.
5. Follow the exact signature in stderr
“Could not save image”
This points toward an image-rendering or image-output path, not proof that PDF generation itself is broken. Check the destination, permissions, temporary directory, image format options and whether the failing command is actually wkhtmltoimage or a framework’s image mode.
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.
Empty or unreadable PDF
Verify the exit status, file size and first bytes of the file. A PDF should begin with %PDF-. If stdout was redirected, switch to a named output file. Then test local HTML and restore remote resources gradually.
OpenSSL FIPS self-test failure
A community report describes “OpenSSL internal error: FATAL FIPS SELFTEST FAILURE” on Ubuntu 18.04 with Ubuntu Pro ESM in an Odoo 10 deployment. The report did not prove a general cause, and a trial-and-error reinstall is not a universal remedy. Compare the exact binary, OpenSSL libraries, FIPS policy and host configuration; use the complete stderr message to guide investigation.
Missing library, font or plugin
Install the dependency named by the loader or stderr message for the same architecture as the executable. Verify fonts under the account running the service, not only under your interactive login. The official packaging notes specifically call out runtime libraries and fonts as sources of platform differences.
URL, resource or certificate errors
Test the URL from the same host and service account. Check DNS, proxy settings, TLS certificates, redirects, authentication and firewall rules. A browser succeeding on your workstation does not prove that a headless process on a server can fetch the same resource.
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
6. Framework and service-account checks
- Print the complete command without secrets, then execute that exact command as the service user.
- Use absolute paths for the binary, input, temporary directory and output.
- Confirm the service user can read HTML, CSS, images and fonts and write temporary and final files.
- Check container security profiles, SELinux/AppArmor rules, sandbox restrictions and disabled PHP functions.
- Set process and network timeouts, but do not convert a timeout into a generic “internal error” in your own exception handler.
- Preserve stderr, exit code and partial-output metadata in logs.
7. Security boundary: only test trusted HTML
The official project warning is explicit: “Do not use wkhtmltopdf with any untrusted HTML – be sure to sanitize any user-supplied HTML/JS, otherwise it can lead to complete takeover of the server it is running on!” Sanitize user content, isolate the conversion process, restrict network access where practical, apply least-privilege filesystem permissions and never place secrets in test HTML or command-line arguments.
8. A repeatable diagnostic checklist
- Capture the exact command, environment, stderr and exit status.
- Run the same executable directly with a tiny local HTML file.
- Use a normal writable PDF filename, not stdin/stdout redirection.
- Compare direct and wrapped argument quoting, working directory and permissions.
- Record version, package source, OS, architecture, Qt variant and runtime libraries.
- Follow the concrete stderr signature: output, library, font, TLS, URL or FIPS.
- Add external resources and application complexity one item at a time.
- Retest in a reproducible staging environment before changing production binaries.
Or skip the browser setup
If your real goal is a clean screenshot or PDF of a web page rather than maintaining a wkhtmltopdf server, ScreenshotNeo provides a website screenshot API and MCP server. It accepts consent banners before capture and removes more than 60 known consent platforms, newsletter popups and chat widgets. Bot checks, blank pages, timeouts, failed loads and cache hits are not billed, and response headers identify the page verdict and billing result. Its MCP tools—take_screenshot, get_page_info and capture_pdf—work with Claude, Cursor and other MCP clients.
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 ScreenshotNeo API documentation for options such as full-page lazy-image loading, CSS selectors, dark mode, device presets, custom CSS and JavaScript, waiting rules, request blocking, cookies, headers, geolocation, PDF settings, caching, signed links, asynchronous jobs and bulk capture.
The Free plan includes 1,000 screenshots per month with no card. Paid plans start at $5 for 3,000 shots. Create a free ScreenshotNeo account.
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 →Frequently Asked Questions
Does “Internal Error” identify a single wkhtmltopdf bug?
No. It is a symptom label that can hide failures in rendering, output, input streams, wrappers, dependencies or the host environment.
Should I always downgrade or reinstall wkhtmltopdf?
No. First match the binary to your OS, architecture and required Qt features, then reproduce the failure with captured stderr and a minimal document.
What should I share when asking for help?
Provide the redacted command, executable path, version, OS and architecture, exit status, complete stderr, input type and output method.
The Bottom Line
Treat “Internal Error” as an investigation starting point: expose stderr and the exit code, reproduce outside the wrapper, verify the exact build and platform, then isolate input and output paths with a minimal trusted file.
Outdated 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 matchPC 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 & 11Quick 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.




