Home > Redmine

IT Room

«Prev || 1 · | Next»

Redmineのガントチャート(PDF)をA3サイズで出力

Redmineのガントチャートに日付の表示を追加(PDF)まで出来ましたが、
日付が入るのは期間が2カ月以内の場合だけで、
もう少し長いスパンで見ようとすると結局、日付は表示されませんでした。

また出力がA4サイズになっているため、スパンを長くして日付が表示されたとしても
かなり見づらいものになりそうです。

ということで、A3サイズで2カ月より長いスパンもPDF出力するようにいじってみました。
ソースをちゃんと解析した訳ではありませんので、
結構強引なやり方になっているかもしれませんが、
結果オーライということで。

変更箇所は下記の通り。
(redmineは、0.8.0を使用)

■redmine/lib/redmine/export/pdf.rb

280: # Returns a PDF string of a gantt chart
281: def gantt_to_pdf(gantt, project)
282: pdf = IFPDF.new(current_language)
283: pdf.SetTitle("#{l(:label_gantt)} #{project}")
284: pdf.AliasNbPages
285: pdf.footer_date = format_date(Date.today)
286: pdf.AddPage("L")
287: pdf.SetFontStyle('B',12)
288: pdf.SetX(15)
289: pdf.Cell(70, 20, project.to_s)
290: pdf.Ln
291: pdf.SetFontStyle('B',9) ←フォントサイズ変更(9→8)
292:
293: subject_width = 70
294: header_heigth = 5
295:
296: headers_heigth = header_heigth
297: show_weeks = false
298: show_days = false
299: show_days_num = false ←追加
200:
301: if gantt.months < 7
302: show_weeks = true
303: headers_heigth = 2*header_heigth
304: # if gantt.months < 3 ←削除
305: show_days = true
306: show_days_num = true ←追加
307: headers_heigth = 4*header_heigth ←高さ変更(3 * ~ → 4 * ~)
308: # end ←削除
309: end



373: # Days headers
374: if show_days
375: left = subject_width
376: height = header_heigth
377: wday = gantt.date_from.cwday
378: pdf.SetFontStyle('B',6) ←フォントサイズ変更
379: (gantt.date_to - gantt.date_from + 1).to_i.times do
380: width = zoom
381: pdf.SetY(y_start + 3 * header_heigth) ←高さ変更(2 * ~ → 3 * ~)
382: pdf.SetX(left)
383: pdf.Cell(width, height, day_name(wday).first, "LTR", 0, "C")
384: left = left + width
385: wday = wday + 1
386: wday = 1 if wday > 7
387: end
388: end



394: # Tasks
395: top = headers_heigth + y_start
396: pdf.SetFontStyle('B',7) ←フォントサイズ変更(7→5)
397: gantt.events.each do |i|
398: pdf.SetY(top)
399: pdf.SetX(15)
400:
401: if i.is_a? Issue
402: pdf.Cell(subject_width-15, 5, "#{i.tracker} #{i.id}: #{i.subject}".sub(/^(.{30}[^\s]*\s).*$/, '\1 (...)'), "LR")
403: else
404: pdf.Cell(subject_width-15, 5, "#{l(:label_version)}: #{i.name}", "LR")
405: end
406:
407: pdf.SetY(top)
408: pdf.SetX(subject_width)
409: pdf.Cell(g_width, 5, "", "LR")
410:
411: pdf.SetY(top+1.5)
412:
413: if i.is_a? Issue



459: end
460:
461: top = top + 5
462: pdf.SetDrawColor(200, 200, 200)
463: pdf.Line(15, top, subject_width+g_width, top)
464: if pdf.GetY() > 270 ←変更(180→270)
465: pdf.AddPage("L")
466: top = 20
467: pdf.Line(15, top, subject_width+g_width, top)
468: end
469: pdf.SetDrawColor(0, 0, 0)
470: end
471:
472: pdf.Line(15, top, subject_width+g_width, top)
473: pdf.Output


■redmine/vendor/plugins/rfpdf/lib/rfpdf/fpdf.rb

58: def initialize(orientation='P', unit='mm', format='A3')

Redmineのガントチャートに日付の表示を追加(PDF)

以前、Redmineのガントチャートに日付を追加しましたが、
PDFにも追加の要望があがりましたので、手を加えてみました。

ファイルは、「redmine/lib/redmine/export/pdf.rb」で、
下記の処理を追加。


----------------------------------------------------------------------
296: headers_heigth = header_heigth
297: show_weeks = false
298: show_days = false
299: show_days_num = false ←追加
300:
301: if gantt.months < 7
302: show_weeks = true
303: headers_heigth = 2*header_heigth
304: if gantt.months < 3
305: show_days = true
306: show_days_num = true ←追加
307: headers_heigth = 4*header_heigth ←変更(3→4)
308: end
309: end
----------------------------------------------------------------------



----------------------------------------------------------------------
357: # Days headers Num ←追加(ここから)
358: if show_days_num
359: left = subject_width
360: height = header_heigth
361: day_num = gantt.date_from
362: pdf.SetFontStyle('B',7)
363: (gantt.date_to - gantt.date_from + 1).to_i.times do
364: width = zoom
365: pdf.SetY(y_start + 2 * header_heigth)
366: pdf.SetX(left)
367: pdf.Cell(width, height, day_num.day.to_s, "LTR", 0, "C")
368: left = left + width
369: day_num = day_num + 1
370: end
371: end ←追加(ここまで)
372:
373: # Days headers
374: if show_days
375: left = subject_width
376: height = header_heigth
377: wday = gantt.date_from.cwday
378: pdf.SetFontStyle('B',7)
379: (gantt.date_to - gantt.date_from + 1).to_i.times do
380: width = zoom
381: pdf.SetY(y_start + 3 * header_heigth) ←変更(2→3)
382: pdf.SetX(left)
383: pdf.Cell(width, height, day_name(wday).first, "LTR", 0, "C")
384: left = left + width
385: wday = wday + 1
386: wday = 1 if wday > 7
387: end
388: end
----------------------------------------------------------------------


これで日付は表示されるようになったのですが、
曜日が月・水・土しか表示されません。。。

少し調べてみましたが、分からなかったので、
曜日は英語表記に変更しました。
また、そのうち調べてみたいと思います。

Redmineのガントチャートに日付の表示を追加

Redmineとは、Web上で利用できるプロジェクト管理ソフトです。
詳しくは、「http://redmine.jp/」で。
インストールについては、そのうち書くかも。

さて、Redmineのガントチャートですが、デフォルトでは日付が表示されず、
週単位での管理になります。
大規模な開発では、これが普通なのかもしれませんが、
私の会社では文句ばかり上がってきます。

ということで、ちょっと手を加えてみました。

使用するのは、「redmine0.8.0」
手を加えるファイルは、「redmine/app/views/issues/gantt.rhtml」で、
下記の処理を追加。

----------------------------------------------------------------------
55: headers_height = header_heigth
56: show_weeks = false
57: show_days = false
58: show_day_num = false ←追加
59:
60: if @gantt.zoom > 1
61: show_weeks = true
62: headers_height = 2*header_heigth
63: if @gantt.zoom > 2
64: show_days = true
65: headers_height = 3*header_heigth
66: if @gantt.zoom > 3 ←追加
67: show_day_num = true ←追加
68: headers_height = 4*header_heigth ←追加
69: end ←追加
70: end
71: end
----------------------------------------------------------------------


下記の処理は、丸ごと追加。

----------------------------------------------------------------------
160: <%
161: #
162: # Days headers Num
163: #
164: if show_day_num
165: left = 0
166: height = g_height + header_heigth - 1
167: wday = @gantt.date_from.cwday
168: day_num = @gantt.date_from
169: (@gantt.date_to - @gantt.date_from + 1).to_i.times do
170: width = zoom - 1
171: %>
172: <div style="left:<%= left %>px;top:37px;width:<%= width %>px;height:<%= height %>px;font-size:0.7em;<%= "background:#f1f1f1;" if wday > 5 %>" class="gantt_hdr">
173: <%= day_num.day %>
174: </div>
175: <%
176: left = left + width+1
177: day_num = day_num + 1
178: wday = wday + 1
179: wday = 1 if wday > 7
180: end
181: end %>
----------------------------------------------------------------------


最後に下記の変更。

----------------------------------------------------------------------
183: <%
184: #
185: # Days headers
186: #
187: if show_days
188: left = 0
189: height = g_height + header_heigth - 1
190: top = (show_day_num ? 55 : 37) ←追加
191: wday = @gantt.date_from.cwday
192: day_num = @gantt.date_from
193: (@gantt.date_to - @gantt.date_from + 1).to_i.times do
194: width = zoom - 1
195: %>
196: <div style="left:<%= left %>px;top:<%= top %>px;width:<%= width %>px;height:<%= height %>px;font-size:0.7em;<%= "background:#f1f1f1;" if wday > 5 %>" class="gantt_hdr"> ←変更
197: <%= day_name(wday).first %>
198: </div>
199: <%
200: left = left + width+1
201: day_num = day_num + 1
202: wday = wday + 1
203: wday = 1 if wday > 7
204: end
205: end %>
----------------------------------------------------------------------


これで日付が表示されるはず。

Continue reading

«Prev || 1 · | Next»

More...

Home > Redmine

Links
伊真田孝司の自由研究室!
Ads
ソースネクスト 自動更新バナー
ロジクールストア(トップページ)
29980円パソコン工房
サンワダイレクト
Search
Feeds
Counter
Total045082 7days1338 Yesterday167 Today026
Since 2009-02-04

Page Top