2009年11月08日

Redmine とガントチャートPDF 出力と整形

RedmineのPDF出力における文字化け対応は以前かいた通り


で対応して気分良くなってくると今度は別のが気になりだしました。
人間って欲深い生き物なんですね。。。あぁ。


なにかというとガントチャートをPDFで出力した際のごちゃごちゃしてはみ出している文字列たち。


1. チケットの番号は表示させたい(元々表示されてるかも)

2. 『検討』、『設計』などのステータス表示はいらない。(件名見ればわかるし、タイトルが隠れてしまう)

3. こちらで対応したガントチャートに日付を出す対応をPDFでも表示させたい。曜日に色も付ける。

4. ガントチャートが長いと、右側に表示される進捗がはみ出るのをどうにかしたい。

5. 各チケットに担当者の名前を表示

6. 週表示もいらない



で、以下対応した内容と結果。

RedmineGanttchart3. についての日付を出す対応はここを参考にしました。
ありがとうございます。
ここを見て他の対応もする気になりました。


4. については文字を印字するところのポジションを見て、右はじだったらオフセットをかけて左に少しずらすようにしました。そのためグラフと文字が重なりますが読めるので気にしない。



修正したところはこんな感じ。適当にコメントいれてるので見づらいですがdiff とればだいたいわかるかなぁ。

RedminePDFDIFF_code

RedminePDF_difffile



こんな風に表示させたいんだけどちょっとうまくできませんでした。
ごめんなさい。


RedminePDFDIFF




サーバーの移転に伴い添付したファイルがすべて消えてしまい読めなくなってしまいました.

以下,分かっている対応だけコピペします.参考にもならないと思いますが..



修正ファイル: lib/redmine/export/pdf.rb




- 土日を色づけ

# add
day_num = gantt.date_from #add
pdf.SetFontStyle('B',7)
(gantt.date_to - gantt.date_from + 1).to_i.times do
width = zoom
#add to color
if wday == 6
pdf.SetTextColor(255, 0, 0)
end
if wday == 7
pdf.SetTextColor( 0, 0, 255)
end


- 日付を挿入するための高さ調整およびshow_daysの作成

# mod
#pdf.SetY(y_start + 2 * header_heigth)
pdf.SetY(y_start + 1 * header_heigth)
pdf.SetX(left)
pdf.Cell(width, height, day_num.day.to_s, "LTR", 0, "C")
day_num = day_num + 1
# add kokokara
# pdf.SetY(y_start + 3 * header_heigth) # mod
pdf.SetY(y_start + 2 * header_heigth)
pdf.SetX(left)
pdf.Cell(width, height, day_name(wday).first, "LTR", 0, "C")
# add kokomade
wday = wday + 1
wday = 1 if wday > 7



- チケット番号を出さない

if i.is_a? Issue
# don't disp tracker
#pdf.Cell(subject_width-15, 5, "#{i.tracker} #{i.id}: #{i.subject}".sub(/^(.{30}[^\s]*\s).*$/, '\1 (...)'), "LR")
pdf.Cell(subject_width-15, 5, "#{i.id}: #{i.subject}".sub(/^(.{30}[^\s]*\s).*$/, '\1 (...)'), "LR")
else
pdf.Cell(subject_width-15, 5, "#{l(:label_version)}: #{i.name}", "LR")
end


- 担当者の名前を表示する & 文字列が長いなら右端からはみ出ないように出力位置を左側へずらす
ただ、このずらし幅は目分量で計算したためある程度のずれがあります。

#pdf.SetX(subject_width + i_left + i_width)
#pdf.Cell(30, 2, "#{i.status} #{i.done_ratio}%")
name_width = pdf.GetStringWidth("#{i.status} \
#{i.assigned_to.lastname} #{i.done_ratio}")
over_width = endpos + name_width / 2 - 280
if over_width > 0
pdf.SetX(subject_width + i_left + i_width - over_width)
else
pdf.SetX(subject_width + i_left + i_width )
end
pdf.Cell(30, 2, "#{i.status} #{i.assigned_to.lastname} #{i.done_ratio}%")



参考ファイルを貼り付けておきます.pdf.rb


ラベル:ruby ganttchat PDF redmine
posted by maplewine at 12:52| Comment(0) | TrackBack(0) | ruby | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。