I've been using the Ultimate PDF component in OutSystems for some time, it's great for rendering modern HTML/CSS templates accurately via Chromium but the main drawback is the slow generation time (10-12 seconds even for a simple single-page PDF), which impacts application performance.
Hi @Bhanu Pratap,
I not use UltimatePDF as much but i add sloution bcz i aslo facing this in one project.
Here’s a breakdown and some strategies you can consider to improve performance or mitigate the impact:
Why it’s slow
Chromium startup overhead – Even headless, launching the rendering engine is expensive.
Single-threaded processing – Each PDF generation blocks the thread until the render is done.
Complex CSS/JS – Any animations, external fonts, or scripts increase render time.
Server load – If multiple users trigger PDFs simultaneously, the process queues up and slows further.
Performance improvement strategies
Reuse browser instance
Some setups allow you to keep Chromium running instead of starting it fresh per PDF.
Check if the component exposes a “persistent session” or “reuse engine” option.
Reduce HTML complexity
Minimize external fonts, heavy JS, and large images.
Inline small CSS instead of external stylesheets.
Avoid unnecessary DOM layers.
Generate asynchronously
Offload PDF generation to background jobs using Timers or Queues.
Users can get a “Your PDF is being prepared” message, and then download when ready.
Cache PDFs
If PDFs are mostly static or template-based, pre-generate or cache them instead of regenerating each request.
Consider alternative libraries
If speed is more critical than pixel-perfect rendering:
ReactivePDF or OutSystems PDF plugin (built-in) is faster for simpler layouts.
These won’t fully support modern CSS, but often generate PDFs in <1–2 seconds.
Sometimes a hybrid approach works:
Use Ultimate PDF only for highly styled documents.
Use lightweight PDF generation for simple reports.
Server scaling
If you must use Ultimate PDF for all requests, consider dedicated workers for PDF generation.
Separate PDF generation from the main app to avoid slowing user-facing requests.
Key insight: Ultimate PDF prioritizes accuracy over speed. If 10–12 seconds per PDF is unacceptable, you either need asynchronous generation + caching or switch to a lighter PDF solution for routine documents.
1. High-level Idea
Instead of generating the PDF synchronously during a user request, we:
Save the PDF request info (template, data) in a database table.
Trigger a background job (Timer or Queue) to generate the PDF.
Store the generated PDF (in database or external storage).
Notify the user when ready (email, notification, or “Download” button becomes active).
2. Database Setup
Table: PDF_Request
Column NameTypeNotes
3. User Request Flow
User clicks “Generate PDF.”
Frontend calls an action to:
Create a PDF_Request record with Status = Pending.
Return immediately with a message: “Your PDF is being prepared.”
Optionally, show a UI notification like a spinner or a “Download PDF” button that is disabled until Status = Completed.
4. Background Job (Timer/Queue)
Timer Setup (e.g., runs every few seconds or continuously) or use Reactive Queue in OutSystems.
Logic:
Query PDF_Request where Status = Pending.
For each record:
Set Status = Processing.
Use Ultimate PDF to generate PDF using the stored TemplateName + DataJSON.
Store the binary output in PDF_Binary.
Set Status = Completed and CompletedOn = now().
Handle errors:
Set Status = Failed and optionally log the error.
5. User Notification / Download
Option 1: Polling
Frontend periodically checks PDF_Request.Status.
When Status = Completed, enable the “Download PDF” button.
Option 2: Push Notification
Use OutSystems notifications or email to alert the user that PDF is ready.
6. Optional Enhancements
Caching
If the same PDF with same data is requested multiple times, skip regeneration.
Separate Worker Server
For heavy PDF generation, dedicate a server node to run the Timer only. This avoids blocking user-facing requests.
Queue Priority
You can add a priority column (High, Low) if some PDFs need faster processing.
Retry Mechanism
For failures, retry 1–2 times before marking as failed.
7. Benefits
Users never wait 10+ seconds.
App performance remains responsive.
Scalable: can generate multiple PDFs in parallel without blocking UI.
Thank You
Hey!
If the task is just to generate PDF from HTML, you can refer to other forge components. I am mentioning 2 forge components below,
1. Html2PdfConverter - Overview (O11) | OutSystems
2. PDF Generator Web - Overview (O11) | OutSystems
Just to add to the post, I already have design blocks in place that are rendered on the screen and used to generate the PDF. Please suggest an alternative approach accordingly.
Hey @Bhanu Pratap ,
Are your PDFs too large?
In some cases when the PDFs have a lot of pages, it is normal to take a while, this happens even if you use chrome directly.In this case I would try to generate the PDF async while the users do something else, and once they are ready you can show a message to the users and start the download.
Have a look at this component for that, it will help with specific patterns: https://www.outsystems.com/forge/component-overview/22069/pdf-you-later-customizations-o11
You can even let the users keep using the app while the PDFs are being generated, feel free to tweak it for your needs:
Now, if your PDFs are smalland not complex at all, I would try to understand what could be causing it.
Maybe you have your server under load and don't have enough resources to generate the PDF.
Something else that can help, is to also download the Ultimate PDF Management to try to configure it or get more information:https://www.outsystems.com/forge/component-overview/11585/ultimate-pdf-management-o11
Hope it helps,RR :)
Thank you for your response. Most of my PDFs are single-page documents containing only about 10–15 expressions and labels, so I had a doubt that the processing was taking so long. I suspect it might be related to Chromium, but I’m not sure. I’ll look into the Ultimate PDF Management component to see if that helps.
@Raphael Ranieri great component that we can explore more about the Ultimate PDF.
Hi @Bhanu Pratap
You can put some system logs beyond the flow to figure out which part take most time. On the other hand, the browser inspector can help you have a quick look at the stage take long time to optimize
Okay, I’ll check it out and find the root cause.