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

If an Odoo PDF loses its CSS or logo, first check whether the report’s HTML view is correct, then verify that Odoo is using an Odoo-compatible wkhtmltopdf build and that the renderer can reach Odoo’s report assets. For missing headers and footers, the wkhtmltopdf build is a key suspect: Debian and Ubuntu repository builds lack the patched Qt changes required for them. Use the checks below to distinguish template problems from renderer, network, and large-document failures.

How Odoo turns a report into a PDF

Odoo renders reports from HTML/QWeb, then uses wkhtmltopdf to create the PDF. Odoo exposes separate HTML and PDF report routes, so comparing their output is a useful first diagnostic: a defect visible in both usually points to the template or assets, while a defect limited to the PDF points toward the renderer or its ability to fetch those assets. See Odoo’s QWeb reports documentation.

Use the route pattern /report/html/<report_name>/<record_id> for HTML and /report/pdf/<report_name>/<record_id> for PDF, substituting the report action name and record ID used by your installation. These are diagnostic routes; access and exact report identifiers depend on the Odoo instance.

Fix missing CSS, images, or logos

1. Compare HTML and PDF

  1. Open the report’s HTML route and check its layout, logo, fonts, and images.
  2. Open the corresponding PDF route for the same record.
  3. If the HTML is also broken, investigate the QWeb template, CSS, and report assets first.
  4. If HTML is correct but PDF styling or images are missing, investigate renderer access to Odoo and the renderer build.

Odoo specifically notes that missing styles often mean the wkhtmltopdf process cannot reach the web server to download them. The PDF renderer fetches linked files, so a page that works in a user’s browser can still fail when the server-side renderer requests assets.

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

2. Set the internal report URL for your deployment

In Odoo developer mode, open Settings → Technical → Parameters → System Parameters and inspect report.url. Set it to a URL that the Odoo server itself can reach, such as the internal service hostname and port when that is the correct address for your deployment. The precise value depends on your network, container, proxy, TLS, and port configuration; do not copy an example hostname blindly.

Odoo uses web.base.url as the root for linked files. Behind a reverse proxy, report.url provides a dedicated reachable URL for report rendering. Avoid changing the public web.base.url just to fix PDF asset retrieval unless you understand its broader effects. If proxy or login behavior causes Odoo to change the base URL unexpectedly, consider setting web.base.url.freeze so it does not change automatically. See Odoo 19 report documentation.

3. Check the requests in logs

Generate the PDF while watching Odoo, reverse-proxy, and container logs. Look for refused connections, asset 404 or 403 responses, certificate failures, and timeouts. A refused connection suggests the configured host or port is unreachable; a 404 suggests a bad path or route; a 403 suggests an access or authentication issue. Certificate errors can mean the renderer does not trust the certificate on the URL it is using. Fix the underlying route, permission, or TLS issue so the renderer can retrieve CSS, fonts, images, and any required JavaScript.

4. Review QWeb assets and layout

Check that the report calls the intended external layout and that custom fonts are included in the report asset bundle. Compare the rendered HTML source with the PDF to see whether markup and asset references are present before PDF conversion. Browser-visible resources that require a user’s session, a browser-only path, or a URL the server cannot reach may not be available to wkhtmltopdf.

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.

Fix missing headers and footers

Check the wkhtmltopdf build before changing report templates. Odoo’s maintained compatibility wiki says Debian and Ubuntu repository builds do not support headers and footers because they lack the required patched Qt changes. Its compatibility guidance recommends 0.12.5-1 for Odoo 10–15 and 0.12.6.1-3 for Odoo 16 and later. The wiki was edited December 6, 2023; verify the table against your Odoo release and deployment rather than assuming every package labeled wkhtmltopdf is equivalent. See Odoo’s wkhtmltopdf compatibility wiki.

Run wkhtmltopdf --version as the same operating-system service account that runs Odoo. Confirm both the version and that the build identifies patched Qt where expected. Checking from an administrator’s interactive shell alone can be misleading if Odoo’s service uses another binary or environment. If the version is wrong, install or configure a compatible build for the Odoo release, then restart or otherwise reload the Odoo service as required by your deployment.

Diagnose wkhtmltopdf error codes and failed conversions

Error codes such as -8 or -11 do not identify one universal root cause by themselves. First establish whether the failure occurs only for one report, only for PDFs, or only for large documents; then correlate the conversion attempt with Odoo and proxy logs. Test the HTML route, verify the binary and patched-Qt compatibility, and confirm asset requests succeed before adopting a workaround.

  • Only one report fails: inspect that QWeb template, its assets, and the affected record’s content.
  • All PDFs lose styles or images: check report.url, network reachability, access responses, and TLS errors.
  • Headers or footers disappear: verify the actual wkhtmltopdf binary and patched-Qt build.
  • Only long reports crash or stall: reduce the document for a controlled test and inspect memory and file-descriptor pressure.

A third-party Odoo Apps Store module named fix_wkhtmltopdf claims to address buffer-overflow and error-code -8 failures on large PDFs, particularly when headers and footers are not required. That is a module-specific claim, not a general Odoo fix. Review its compatibility with your Odoo release and test it in staging before production. See the module’s Apps Store listing.

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

Handle very long reports and resource use

Long, table-heavy documents can trigger limits that do not appear in short reports. Odoo’s compatibility wiki describes multi-page table crashes and exponential memory and file-descriptor use on documents of roughly 500 or more pages. That is an observed limitation described by the wiki, not a universal cutoff: layout complexity and environment matter.

  • Generate a smaller page range or a reduced record set to see whether failure scales with document size.
  • Reduce complex tables and test whether the report can be divided into smaller documents.
  • Monitor memory and file descriptors during conversion rather than raising limits without evidence.
  • If headers and footers are not essential, test without them as a diagnostic or workaround; the Odoo wiki notes this may help with some large-document problems.

Use a controlled troubleshooting sequence

  1. Check the binary: as the Odoo service account, run wkhtmltopdf --version and compare the build with the compatibility guidance for your Odoo release.
  2. Compare routes: inspect /report/html/… and /report/pdf/… for the same report and record.
  3. Verify report networking: inspect report.url in System Parameters and confirm the Odoo server can reach that address and its assets.
  4. Inspect logs: correlate one PDF attempt with Odoo, proxy, and container logs for refused connections, 404/403 responses, certificate errors, or timeouts.
  5. Check the template: validate the external layout, report asset bundle, custom fonts, and resource URLs.
  6. Test document size: reduce table complexity or page count and observe resource usage for long reports.
  7. Evaluate workarounds in staging: test optional modules or configuration changes before using them in production.

Or skip the browser setup

For a standalone screenshot of a report page or other web page, ScreenshotNeo provides a one-request screenshot API; it does not replace Odoo’s own QWeb-to-PDF report generation or diagnose its wkhtmltopdf configuration. Example cURL request (replace the target URL and API key):

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. ScreenshotNeo accepts cookie and consent banners before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets; those steps can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, with response headers reporting page verdict and billing status. Its MCP server offers screenshot and PDF tools for AI agents. The free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots. Learn more at ScreenshotNeo, or sign up free for 1,000 screenshots a month with no card.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

What to include when asking for help

If the issue persists, provide the Odoo release, operating system and version, exact wkhtmltopdf version output, whether patched Qt is present, the report’s HTML and PDF behavior, relevant logs, and a small reproducible report case where possible. wkhtmltopdf’s support guidance asks for the version, operating system and version, and a detailed issue description with a test case containing HTML/CSS/JavaScript when applicable. See wkhtmltopdf issue guidance.

Frequently Asked Questions

Does a correct HTML report prove that the PDF renderer is configured correctly?

No. The PDF conversion is a separate step, and wkhtmltopdf must be able to retrieve the report’s linked assets from the server.

Should I change web.base.url to fix PDF assets behind a proxy?

Usually inspect the dedicated report.url setting first; web.base.url can affect other Odoo behavior.

Can I use ScreenshotNeo to generate Odoo’s QWeb PDF report?

No. ScreenshotNeo captures web pages and can capture PDFs, but it does not replace Odoo’s report rendering pipeline.

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

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.