Patch #23645

Fix Gantt PDF rendering for single-day tasks

Added by Daniel Ritz almost 3 years ago. Updated over 2 years ago.

Status:NewStart date:
Priority:NormalDue date:
Assignee:-% Done:


Target version:-


When a task starts and ends on the same day, it can happen that the bar in the PDF is rendered wrong, i.e. it's rendered from the start day to the right end of the page.

The problem is in lib/redmine/helpers/gantt.rb. When #pdf_task is called, coords[:bar_end] - coords[:bar_start] happens to be 0. The cause for this is the zoom factor applied in #coordindates and the subsequent #floor. By adding some Rails.logger statements I got this:

coords[start]: 92/1, zoom: 36/73
coords[start]: 45
coords[bar_start]: 92/1, zoom: 36/73
coords[bar_start]: 45
coords[end]: 92/1, zoom: 36/73
coords[end]: 45
coords[bar_end]: 93/1, zoom: 36/73
coords[bar_end]: 45

Each value shown before/after applying zoom. While before zoom, the values where 92/93, the became 45/45 afterwards.

The attached patch fixes the PDF rendering problem by making sure, the with used in the RDMCell() call is at least 0.

gantt-single-day-task-pdf-rendering.patch Magnifier (1.71 KB) Daniel Ritz, 2016-08-23 18:48

gannt_1daytask.JPG (55.3 KB) Sutamin Lynfiled, 2017-01-02 16:53

pdf-vs-png.png (47.3 KB) Daniel Ritz, 2017-01-04 11:42


#1 Updated by Sutamin Lynfiled over 2 years ago

LGTM. I hope for early adoption.

#2 Updated by Go MAEDA over 2 years ago

I have not been able to reproduce the problem yet.
Could you please describe the detailed steps to reproduce the problem and upload screenshots (before fix and after fix) ?

#3 Updated by Daniel Ritz over 2 years ago

Sorry, I have no easy reproducer. I used a dump of our productive DB while working on the fix...

Attached is a screenshot with comparing the Gantt rendered correctly as PNG and incorrectly as PDF. After the fix, the PDF looks correct too (no screenshot taken).
Tasks 3-7 shown on the screenshot are single-day tasks and should all render the same.

Also available in: Atom PDF