510 |
510 |
end if Object.const_defined?(:Magick)
|
511 |
511 |
|
512 |
512 |
def to_pdf
|
513 |
|
pdf = ::Redmine::Export::PDF::IFPDF.new(current_language)
|
|
513 |
if l(:general_pdf_encoding).upcase == 'UTF-8'
|
|
514 |
pdf = ::Redmine::Export::PDF::ITCPDF.new(current_language)
|
|
515 |
else
|
|
516 |
pdf = ::Redmine::Export::PDF::IFPDF.new(current_language)
|
|
517 |
end
|
514 |
518 |
pdf.SetTitle("#{l(:label_gantt)} #{project}")
|
515 |
|
pdf.AliasNbPages
|
|
519 |
pdf.alias_nb_pages
|
516 |
520 |
pdf.footer_date = format_date(Date.today)
|
517 |
521 |
pdf.AddPage("L")
|
518 |
522 |
pdf.SetFontStyle('B',12)
|
519 |
523 |
pdf.SetX(15)
|
520 |
|
pdf.Cell(PDF::LeftPaneWidth, 20, project.to_s)
|
|
524 |
pdf.UTF8Cell(PDF::LeftPaneWidth, 20, project.to_s)
|
521 |
525 |
pdf.Ln
|
522 |
526 |
pdf.SetFontStyle('B',9)
|
523 |
527 |
|
... | ... | |
552 |
556 |
width = ((month_f >> 1) - month_f) * zoom
|
553 |
557 |
pdf.SetY(y_start)
|
554 |
558 |
pdf.SetX(left)
|
555 |
|
pdf.Cell(width, height, "#{month_f.year}-#{month_f.month}", "LTR", 0, "C")
|
|
559 |
pdf.UTF8Cell(width, height, "#{month_f.year}-#{month_f.month}", "LTR", 0, "C")
|
556 |
560 |
left = left + width
|
557 |
561 |
month_f = month_f >> 1
|
558 |
562 |
end
|
... | ... | |
570 |
574 |
width = (7 - self.date_from.cwday + 1) * zoom-1
|
571 |
575 |
pdf.SetY(y_start + header_heigth)
|
572 |
576 |
pdf.SetX(left)
|
573 |
|
pdf.Cell(width + 1, height, "", "LTR")
|
|
577 |
pdf.UTF8Cell(width + 1, height, "", "LTR")
|
574 |
578 |
left = left + width+1
|
575 |
579 |
end
|
576 |
580 |
while week_f <= self.date_to
|
577 |
581 |
width = (week_f + 6 <= self.date_to) ? 7 * zoom : (self.date_to - week_f + 1) * zoom
|
578 |
582 |
pdf.SetY(y_start + header_heigth)
|
579 |
583 |
pdf.SetX(left)
|
580 |
|
pdf.Cell(width, height, (width >= 5 ? week_f.cweek.to_s : ""), "LTR", 0, "C")
|
|
584 |
pdf.UTF8Cell(width, height, (width >= 5 ? week_f.cweek.to_s : ""), "LTR", 0, "C")
|
581 |
585 |
left = left + width
|
582 |
586 |
week_f = week_f+7
|
583 |
587 |
end
|
... | ... | |
593 |
597 |
width = zoom
|
594 |
598 |
pdf.SetY(y_start + 2 * header_heigth)
|
595 |
599 |
pdf.SetX(left)
|
596 |
|
pdf.Cell(width, height, day_name(wday).first, "LTR", 0, "C")
|
|
600 |
pdf.UTF8Cell(width, height, day_name(wday).first, "LTR", 0, "C")
|
597 |
601 |
left = left + width
|
598 |
602 |
wday = wday + 1
|
599 |
603 |
wday = 1 if wday > 7
|
... | ... | |
602 |
606 |
|
603 |
607 |
pdf.SetY(y_start)
|
604 |
608 |
pdf.SetX(15)
|
605 |
|
pdf.Cell(subject_width+g_width-15, headers_heigth, "", 1)
|
|
609 |
pdf.UTF8Cell(subject_width+g_width-15, headers_heigth, "", 1)
|
606 |
610 |
|
607 |
611 |
# Tasks
|
608 |
612 |
top = headers_heigth + y_start
|
... | ... | |
722 |
726 |
params[:pdf].SetX(15)
|
723 |
727 |
|
724 |
728 |
char_limit = PDF::MaxCharactorsForSubject - params[:indent]
|
725 |
|
params[:pdf].Cell(params[:subject_width]-15, 5, (" " * params[:indent]) + subject.to_s.sub(/^(.{#{char_limit}}[^\s]*\s).*$/, '\1 (...)'), "LR")
|
|
729 |
params[:pdf].UTF8Cell(params[:subject_width]-15, 5, (" " * params[:indent]) + subject.to_s.sub(/^(.{#{char_limit}}[^\s]*\s).*$/, '\1 (...)'), "LR")
|
726 |
730 |
|
727 |
731 |
params[:pdf].SetY(params[:top])
|
728 |
732 |
params[:pdf].SetX(params[:subject_width])
|
729 |
|
params[:pdf].Cell(params[:g_width], 5, "", "LR")
|
|
733 |
params[:pdf].UTF8Cell(params[:g_width], 5, "", "LR")
|
730 |
734 |
end
|
731 |
735 |
|
732 |
736 |
def image_subject(params, subject, options={})
|
... | ... | |
783 |
787 |
params[:pdf].SetY(params[:top]+1.5)
|
784 |
788 |
params[:pdf].SetX(params[:subject_width] + coords[:bar_start])
|
785 |
789 |
params[:pdf].SetFillColor(200,200,200)
|
786 |
|
params[:pdf].Cell(coords[:bar_end] - coords[:bar_start], height, "", 0, 0, "", 1)
|
|
790 |
params[:pdf].UTF8Cell(coords[:bar_end] - coords[:bar_start], height, "", 0, 0, "", 1)
|
787 |
791 |
|
788 |
792 |
if coords[:bar_late_end]
|
789 |
793 |
params[:pdf].SetY(params[:top]+1.5)
|
790 |
794 |
params[:pdf].SetX(params[:subject_width] + coords[:bar_start])
|
791 |
795 |
params[:pdf].SetFillColor(255,100,100)
|
792 |
|
params[:pdf].Cell(coords[:bar_late_end] - coords[:bar_start], height, "", 0, 0, "", 1)
|
|
796 |
params[:pdf].UTF8Cell(coords[:bar_late_end] - coords[:bar_start], height, "", 0, 0, "", 1)
|
793 |
797 |
end
|
794 |
798 |
if coords[:bar_progress_end]
|
795 |
799 |
params[:pdf].SetY(params[:top]+1.5)
|
796 |
800 |
params[:pdf].SetX(params[:subject_width] + coords[:bar_start])
|
797 |
801 |
params[:pdf].SetFillColor(90,200,90)
|
798 |
|
params[:pdf].Cell(coords[:bar_progress_end] - coords[:bar_start], height, "", 0, 0, "", 1)
|
|
802 |
params[:pdf].UTF8Cell(coords[:bar_progress_end] - coords[:bar_start], height, "", 0, 0, "", 1)
|
799 |
803 |
end
|
800 |
804 |
end
|
801 |
805 |
# Renders the markers
|
... | ... | |
804 |
808 |
params[:pdf].SetY(params[:top] + 1)
|
805 |
809 |
params[:pdf].SetX(params[:subject_width] + coords[:start] - 1)
|
806 |
810 |
params[:pdf].SetFillColor(50,50,200)
|
807 |
|
params[:pdf].Cell(2, 2, "", 0, 0, "", 1)
|
|
811 |
params[:pdf].UTF8Cell(2, 2, "", 0, 0, "", 1)
|
808 |
812 |
end
|
809 |
813 |
if coords[:end]
|
810 |
814 |
params[:pdf].SetY(params[:top] + 1)
|
811 |
815 |
params[:pdf].SetX(params[:subject_width] + coords[:end] - 1)
|
812 |
816 |
params[:pdf].SetFillColor(50,50,200)
|
813 |
|
params[:pdf].Cell(2, 2, "", 0, 0, "", 1)
|
|
817 |
params[:pdf].UTF8Cell(2, 2, "", 0, 0, "", 1)
|
814 |
818 |
end
|
815 |
819 |
end
|
816 |
820 |
# Renders the label on the right
|
817 |
821 |
if options[:label]
|
818 |
822 |
params[:pdf].SetX(params[:subject_width] + (coords[:bar_end] || 0) + 5)
|
819 |
|
params[:pdf].Cell(30, 2, options[:label])
|
|
823 |
params[:pdf].UTF8Cell(30, 2, options[:label])
|
820 |
824 |
end
|
821 |
825 |
end
|
822 |
826 |
|