Skip to main content

A PDF report can fail even when the Odoo record is correct. The report may generate a blank PDF, fail completely, lose images or CSS, break the header/footer, show incorrect formatting, or work correctly in HTML but fail when exported to PDF.

The failure point can be different in each case:

Report Action → QWeb Template → Report Data → Assets → PDF Rendering

If the problem started after an Odoo 19 migration, custom QWeb report, module update, or report customization, the change itself is an important diagnostic signal.

Before changing the report configuration, determine whether the failure affects one report or multiple reports, whether HTML rendering works, and whether the problem exists in the standard or customized report.

That separates a report-template problem from a PDF-rendering, customization, module, or environment problem.

For technical Odoo support related to customized reports, migration, and ERP configuration, see our Odoo ERP consulting services.

What Does “Odoo 19 PDF Report Not Working” Actually Mean?

“PDF report not working” is not one failure. The symptom determines which part of the reporting process should be investigated.

SymptomWhat to investigate
PDF does not generateReport action, rendering process, and exact server error
HTML works but PDF failsPDF rendering layer rather than the underlying business record
One report fails while another worksAffected report action, QWeb template, inherited views, and customization
PDF generates but images are missingImage rendering, report assets, and resource accessibility during PDF generation
Header, footer, or styling disappearsDocument layout, report assets, and PDF rendering environment
Problem started after migrationInherited QWeb views, XPath changes, custom modules, and dependencies
Problem started after a report customizationCustom QWeb code, fields, report actions, and inherited templates

The fastest distinction is often:

One report fails → investigate the report.

Multiple reports fail → investigate the shared PDF rendering environment.

HTML works but PDF fails → investigate PDF generation rather than the business record.

Failure starts after customization or migration → investigate the changed report layer first.

This classification prevents a PDF rendering problem from being mistaken for a record, configuration, or business-workflow problem.

Where Does Odoo 19 PDF Report Generation Fail?

An Odoo 19 PDF report passes through several layers before the final file is produced:

Odoo Record → Report Action → QWeb Template → HTML → PDF Rendering → PDF

Record is correct + HTML is correct + PDF fails

→ Investigate the PDF rendering layer and required report resources.

Record is correct + HTML is incorrect

→ Investigate the QWeb template, report data, inherited views, or report customization.

Only one customized report fails

→ Investigate its report action, QWeb template, inherited views, custom fields, and modules.

Multiple standard reports fail

→ Investigate the shared PDF rendering environment and common configuration.

This distinction prevents the investigation from moving into unrelated Odoo configuration.

Odoo’s documentation also notes that PDF rendering can fail when the rendering process cannot access resources required by the report, such as stylesheets. Therefore, a report that works correctly in HTML but produces an incomplete PDF should be investigated at the rendering and resource-access layer, not treated automatically as a data problem.

How Do You Find Where the Odoo 19 PDF Report Failed?

Reproduce the exact failure

Generate the same PDF again and record:

  • Report name
  • Odoo model
  • Record used
  • User generating the report
  • Expected output
  • Actual output
  • Exact error message

Avoid summarizing the problem as “Odoo PDF is not working.” The exact output and error determine which layer needs investigation.

Test the HTML version

If the report is available in HTML, compare the HTML and PDF output.

HTML works → PDF fails

→ Investigate the PDF rendering layer, report assets, and resource accessibility rather than the underlying business record.

HTML also fails

→ Investigate the QWeb template, report data, inherited views, or customization.

Odoo documents reports as QWeb-based reports that can be rendered in HTML or PDF.

Test another standard PDF report

Generate an unrelated standard Odoo PDF report.

Standard report works → affected report becomes the focus.

Check its:

Report Action → QWeb Template → Inherited Views → Custom Fields → Custom Modules

Multiple standard reports fail → investigate the shared PDF rendering environment.

This separates a report-specific failure from a broader rendering problem.

Capture and classify the exact error

The error should determine the next investigation path.

For example:

PDF rendering executable unavailable

→ Investigate the PDF rendering environment.

QWeb rendering error

→ Investigate the report template or inherited customization.

Missing field / invalid field

→ Investigate report data, custom fields, or module dependencies.

Images or styles missing

→ Investigate report assets and whether the PDF renderer can access the required resources.

A current Odoo 19 Community report issue, for example, reports a PDF export failure because wkhtmltopdf could not be found. That represents a rendering-environment problem rather than a QWeb or business-record problem.

The useful diagnostic result is:

Exact symptom → HTML result → Standard report result → Exact error → Failing layer

Why Does Only One Odoo 19 PDF Report Fail?

One PDF report fails while another works → isolate the affected report before investigating the entire Odoo environment.
Check the report-specific layers:

Report Action

Verify that the affected report is using the intended report action.

Check:

  • Report model
  • Report name
  • Report type
  • Template linked to the action
  • Any custom report action replacing the standard one

QWeb Template

Inspect the template used by the failing report.

Look for:

  • Custom QWeb code
  • Missing fields
  • Conditional expressions
  • Modified layouts
  • Invalid template references

XPath / Inherited Views

If the report was customized through inherited QWeb views, check whether an XPath expression still matches the current report structure.

A customization targeting an element that no longer exists or has changed can affect only that report.

Custom Fields

Check whether the report reads fields introduced by a custom module.

A missing field, changed field type, removed field, or incorrect relation can cause the report to fail even when the underlying business record opens normally.

Third-Party Modules

Identify modules that modify:

  • The same report
  • The same model
  • QWeb views
  • Report actions
  • Document layouts

If the failure began after a module installation or update, compare the report behavior before and after that change.

Report Assets

If the PDF generates but loses CSS, images, fonts, headers, or other visual elements, investigate the resources required during PDF rendering.

This is different from a QWeb data failure: the report structure may be correct while the renderer cannot retrieve a required resource.

One report fails → inspect report-specific configuration and customization.

Multiple standard reports fail → investigate the shared PDF rendering environment.

Why Can Odoo 19 PDF Reports Break After Migration or Customization?

If the standard Odoo 19 report works but the migrated or customized report fails, investigate the modified report layer before changing general PDF configuration.

Inherited QWeb Views

Check inherited views that modify the standard report template.

Look for:

  • Modified report structure
  • Removed elements
  • Changed template inheritance
  • Conflicting inherited views

A migrated view can continue to exist while targeting a report structure that has changed.

XPath Expressions

Check every XPath used to modify the report.

Target structure changed → XPath no longer matches the intended element → customized report can render incorrectly or fail.

This is particularly relevant when a report was customized in an earlier Odoo version and then migrated.

Custom Report Templates

Compare the custom QWeb template with the standard Odoo 19 template.

Check for:

  • Invalid field references
  • Incorrect template inheritance
  • Unsupported expressions
  • Missing conditional logic
  • Modified document layouts

If the standard template generates the PDF correctly, the custom template becomes the primary investigation path.

Localization and Third-Party Modules

Check modules that modify the same report, model, or document layout.

Verify:

  • Module version
  • Dependencies
  • Inherited QWeb views
  • Report modifications
  • Installation or update timing

A report can fail because a dependent module modifies a template or field used by another module.

Custom Fields

Check every custom field referenced by the report.

Verify whether the field was:

  • Removed
  • Renamed
  • Changed in type
  • Moved to another model
  • Made unavailable in the report context

A business record can open correctly while the report fails when the QWeb template tries to access an unavailable field.

Report Actions

Verify that the report action points to the intended:

Model → Report Type → QWeb Template

A customized or migrated report action can point to an incorrect template or obsolete configuration.

Migration Comparison

Use a controlled comparison:

Standard Odoo 19 → PDF works

Migrated/customized report → PDF fails

Then isolate the difference:

QWeb View → XPath → Custom Field → Custom Module → Dependency → Report Action

Do not modify unrelated Odoo 19 PDF settings until the difference between the working and failing report has been identified.

How Do You Verify That the Odoo 19 PDF Report Is Fixed?

A PDF that downloads successfully is not sufficient proof that the report is fixed.

Verify the output at each relevant layer.

PDF Generation

Confirm that the report:

  • Generates without an error
  • Opens correctly
  • Produces the expected number of pages
  • Does not produce a blank or partially rendered document

Business Data

Compare the PDF with the source Odoo record.

Verify:

  • Customer
  • Products
  • Quantities
  • Prices
  • Discounts
  • Taxes
  • Subtotals
  • Grand total
  • Dates
  • Reference numbers

A rendering fix should not change the underlying business values.

Images and Report Assets

Check whether all required resources are present:

  • Company logo
  • Product images
  • CSS styling
  • Fonts
  • Headers
  • Other report assets

PDF generated + missing visual resources → continue investigating the rendering/resource layer.

Header, Footer, and Layout

Check the complete document rather than only the first page.

Verify:

  • Header position
  • Footer position
  • Page margins
  • Page breaks
  • Table alignment
  • Row splitting
  • Spacing
  • Multi-page records

A report that looks correct on page one can still fail on subsequent pages

Multiple Records

Generate the report for several records.

Use records with different:

  • Product counts
  • Customer data
  • Addresses
  • Tax combinations
  • Quantities
  • Number of pages

This helps identify problems that occur only with specific data structures.

Standard vs Customized Report

If the original failure followed a migration or customization, verify both:

Standard Odoo 19 report → Works

Customized/migrated report → Works after correction

This confirms that the change fixed the affected report rather than only the original test record.

Odoo’s documentation notes that PDF rendering can fail when the rendering process cannot access resources required by the report, such as stylesheets. Therefore, a generated PDF with missing CSS, images, or layout elements still requires investigation at the rendering/resource layer.

Fixed = PDF generation + correct data + complete assets + correct layout + multiple-record validation.

When Should You Get Odoo 19 Technical Support?

Technical support is warranted when the PDF failure involves:

  • QWeb rendering errors
  • Custom report failures
  • XPath or inherited-view problems
  • Migration-related report failures
  • Third-party module conflicts
  • Missing report dependencies
  • PDF rendering environment problems
  • Reports that work in one environment but fail in another
  • Multiple reports failing after an upgrade or deployment

At this stage, avoid repeatedly changing report settings. Use the available evidence:

Report → Error → HTML Result → PDF Result → Customization → Module → Environment

This helps identify whether the failure belongs to the QWeb template, customization, module dependency, or PDF rendering layer.

For customized reports, migration, QWeb development, or Odoo technical configuration, see Odoo ERP Implementation.

Frequently Asked Questions

Why is my Odoo 19 PDF report not generating?

Reproduce the same report and capture the exact error. Then test another standard PDF report and compare the HTML output. This helps distinguish a report-specific QWeb problem from a broader PDF rendering issue.

Why does my Odoo 19 report work in HTML but fail in PDF?

HTML and PDF are separate rendering outputs. If HTML works but PDF fails, investigate the PDF rendering process, report assets, resource accessibility, and rendering environment.

Why are images missing from my Odoo 19 PDF report?

Check how the image is referenced in the QWeb report and whether the PDF rendering process can access the required image resource. If the PDF generates but images or styling are missing, investigate the report assets and rendering environment.

Why did my Odoo PDF report stop working after migration?

Compare the standard Odoo report with the migrated or customized report. Check inherited QWeb views, XPath expressions, custom fields, third-party or localization modules, dependencies, and report actions before changing unrelated configuration.

Conclusion

An Odoo 19 PDF report failure should be investigated by finding the failing layer, not by treating the entire Odoo system as broken.

Record → Report Action → QWeb → HTML → PDF Rendering → PDF

Then use the symptom to narrow the investigation:

One report fails → Report / QWeb / Customization

All reports fail → Rendering / Environment

HTML works, PDF fails → PDF rendering

Started after migration → Customization / QWeb / Module / Dependency

Once the exact failure layer is identified, the fix becomes specific instead of another round of unrelated configuration changes.

Odoobots

Leave a Reply

Online Enquiry