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.
| Symptom | What to investigate |
| PDF does not generate | Report action, rendering process, and exact server error |
| HTML works but PDF fails | PDF rendering layer rather than the underlying business record |
| One report fails while another works | Affected report action, QWeb template, inherited views, and customization |
| PDF generates but images are missing | Image rendering, report assets, and resource accessibility during PDF generation |
| Header, footer, or styling disappears | Document layout, report assets, and PDF rendering environment |
| Problem started after migration | Inherited QWeb views, XPath changes, custom modules, and dependencies |
| Problem started after a report customization | Custom 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
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.
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.
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.
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.
