Skip to content

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

  1. Open a large quality report in Constrainify.
  2. Trigger the Export to PDF functionality.
  3. Wait for the export process to complete.
  4. 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 to 3.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.