PDF Export of Quality Report silently crashes when exporting large reports
🐛 Bug Report
Summary
The PDF export feature, which uses the jsPDF
library, fails to generate a PDF for large quality reports. Instead of providing a PDF download, the process silently crashes with a visible error to the user.
Steps to Reproduce
- Open a large quality report in Constrainify.
- Trigger the Export to PDF functionality.
- Wait for the export process to complete.
- Observe that no PDF is generated and an error is thrown in the console.
What is the current bug behavior?
- The export process crashes.
- No PDF file is downloaded.
- Console logs multiple debug messages, followed by an error:
Uncaught (in promise) Error: Incomplete or corrupt PNG file at new n (qualityReport.91f518f841dc4d264aa3.bundle.js:2:1322173) at t.processPNG (qualityReport.91f518f841dc4d264aa3.bundle.js:2:1405277) at Object.x (qualityReport.91f518f841dc4d264aa3.bundle.js:2:1251023) at t.addImage (qualityReport.91f518f841dc4d264aa3.bundle.js:2:1250439) at window.exportToPDF (qualityReport.91f518f841dc4d264aa3.bundle.js:2:1517569)
What is the expected correct behavior?
- PDF export should complete successfully.
- A PDF file should be downloaded, even for large quality reports.
Relevant Logs, Screenshots, or Gifs
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Array(216)
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Array(8)
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Object
qualityReport.91f518f841dc4d264aa3.bundle.js:2 #1 0ms Starting document clone with size 1340x1067 scrolled to 0,0
qualityReport.91f518f841dc4d264aa3.bundle.js:2 #1 3343ms Document cloned, element located at 0,0 with size 1340x509827 using computed rendering
qualityReport.91f518f841dc4d264aa3.bundle.js:2 #1 3344ms Starting DOM parsing
qualityReport.91f518f841dc4d264aa3.bundle.js:2 #1 3352ms Added image https://aqinda.gwdg.de/static/img/constrainify-logo-no-background.svg
qualityReport.91f518f841dc4d264aa3.bundle.js:2 #1 3362ms Added image data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E
qualityReport.91f518f841dc4d264aa3.bundle.js:2 #1 3370ms Added image data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round' viewBox='0 0 16 16'%3E%3Cpath d='m2 5 6 6 6-6'/%3E%3C/svg%3E
qualityReport.91f518f841dc4d264aa3.bundle.js:2 #1 10598ms Added image https://aqinda.gwdg.de/static/img/logo-removebg.png
qualityReport.91f518f841dc4d264aa3.bundle.js:2 #1 10601ms Starting renderer for element at 0,0 with size 1340x509827
qualityReport.91f518f841dc4d264aa3.bundle.js:2 #1 10602ms Canvas renderer initialized (1340x509827) with scale 1.25
qualityReport.91f518f841dc4d264aa3.bundle.js:2 #1 12208ms Finished rendering
qualityReport.91f518f841dc4d264aa3.bundle.js:2 Uncaught (in promise) Error: Incomplete or corrupt PNG file
at new n (qualityReport.91f518f841dc4d264aa3.bundle.js:2:1322173)
at t.processPNG (qualityReport.91f518f841dc4d264aa3.bundle.js:2:1405277)
at Object.x (qualityReport.91f518f841dc4d264aa3.bundle.js:2:1251023)
at t.addImage (qualityReport.91f518f841dc4d264aa3.bundle.js:2:1250439)
at window.exportToPDF (qualityReport.91f518f841dc4d264aa3.bundle.js:2:1517569)
n @ qualityReport.91f518f841dc4d264aa3.bundle.js:2
t.processPNG @ qualityReport.91f518f841dc4d264aa3.bundle.js:2
x @ qualityReport.91f518f841dc4d264aa3.bundle.js:2
t.addImage @ qualityReport.91f518f841dc4d264aa3.bundle.js:2
window.exportToPDF @ qualityReport.91f518f841dc4d264aa3.bundle.js:2
Possible Fix or Suggested Solution
- Investigate
Incomplete or corrupt PNG file
error. - Test lowering image resolution or switching from PNG to JPEG.
- Upgrade jsPDF from
3.0.1
to3.0.2
to check if the bug is resolved upstream. - As a fallback, consider implementing a custom serialization from HTML to PDF (text-based), though this would be very time-consuming.