| 
									
										
										
										
											2009-10-10 15:00:28 +00:00
										 |  |  | # encoding: utf-8 | 
					
						
							|  |  |  | # | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  | # Redmine - project management software | 
					
						
							|  |  |  | # Copyright (C) 2006-2009  Jean-Philippe Lang | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # This program is free software; you can redistribute it and/or | 
					
						
							|  |  |  | # modify it under the terms of the GNU General Public License | 
					
						
							|  |  |  | # as published by the Free Software Foundation; either version 2 | 
					
						
							|  |  |  | # of the License, or (at your option) any later version. | 
					
						
							|  |  |  | #  | 
					
						
							|  |  |  | # This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  | # GNU General Public License for more details. | 
					
						
							|  |  |  | #  | 
					
						
							|  |  |  | # You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  | # along with this program; if not, write to the Free Software | 
					
						
							|  |  |  | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require 'iconv' | 
					
						
							| 
									
										
										
										
											2009-01-27 17:58:56 +00:00
										 |  |  | require 'rfpdf/fpdf' | 
					
						
							| 
									
										
										
										
											2011-03-30 03:26:01 +00:00
										 |  |  | require 'fpdf/chinese' | 
					
						
							|  |  |  | require 'fpdf/japanese' | 
					
						
							|  |  |  | require 'fpdf/korean' | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | module Redmine | 
					
						
							|  |  |  |   module Export | 
					
						
							|  |  |  |     module PDF | 
					
						
							| 
									
										
										
										
											2009-02-21 11:04:50 +00:00
										 |  |  |       include ActionView::Helpers::TextHelper | 
					
						
							| 
									
										
										
										
											2009-01-12 17:45:23 +00:00
										 |  |  |       include ActionView::Helpers::NumberHelper | 
					
						
							|  |  |  |        | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |       class ITCPDF < TCPDF | 
					
						
							|  |  |  |         include Redmine::I18n | 
					
						
							|  |  |  |         attr_accessor :footer_date | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         def initialize(lang) | 
					
						
							|  |  |  |           super() | 
					
						
							|  |  |  |           set_language_if_valid lang | 
					
						
							|  |  |  |           @font_for_content = 'FreeSans' | 
					
						
							| 
									
										
										
										
											2011-03-30 11:32:35 +00:00
										 |  |  |           @font_for_footer  = 'FreeSans' | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |           SetCreator(Redmine::Info.app_name) | 
					
						
							|  |  |  |           SetFont(@font_for_content) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         def SetFontStyle(style, size) | 
					
						
							|  |  |  |           SetFont(@font_for_content, style, size) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         def SetTitle(txt) | 
					
						
							|  |  |  |           txt = begin | 
					
						
							|  |  |  |             utf16txt = Iconv.conv('UTF-16BE', 'UTF-8', txt) | 
					
						
							|  |  |  |             hextxt = "<FEFF"  # FEFF is BOM | 
					
						
							|  |  |  |             hextxt << utf16txt.unpack("C*").map {|x| sprintf("%02X",x) }.join | 
					
						
							|  |  |  |             hextxt << ">" | 
					
						
							|  |  |  |           rescue | 
					
						
							|  |  |  |             txt | 
					
						
							|  |  |  |           end || '' | 
					
						
							|  |  |  |           super(txt) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |         def textstring(s) | 
					
						
							|  |  |  |           # Format a text string | 
					
						
							|  |  |  |           if s =~ /^</  # This means the string is hex-dumped. | 
					
						
							|  |  |  |             return s | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             return '('+escape(s)+')' | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |           | 
					
						
							|  |  |  |         alias RDMCell Cell | 
					
						
							|  |  |  |         alias RDMMultiCell MultiCell | 
					
						
							|  |  |  |           | 
					
						
							|  |  |  |         def Footer | 
					
						
							|  |  |  |           SetFont(@font_for_footer, 'I', 8) | 
					
						
							|  |  |  |           SetY(-15) | 
					
						
							|  |  |  |           SetX(15) | 
					
						
							|  |  |  |           RDMCell(0, 5, @footer_date, 0, 0, 'L') | 
					
						
							|  |  |  |           SetY(-15) | 
					
						
							|  |  |  |           SetX(-30) | 
					
						
							|  |  |  |           RDMCell(0, 5, PageNo().to_s + '/{nb}', 0, 0, 'C') | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |       class IFPDF < FPDF | 
					
						
							| 
									
										
										
										
											2009-02-21 11:04:50 +00:00
										 |  |  |         include Redmine::I18n | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         attr_accessor :footer_date | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         def initialize(lang) | 
					
						
							|  |  |  |           super() | 
					
						
							|  |  |  |           set_language_if_valid lang | 
					
						
							| 
									
										
										
										
											2011-04-10 08:34:02 +00:00
										 |  |  |           case l(:general_pdf_encoding).upcase | 
					
						
							|  |  |  |           when 'CP949' | 
					
						
							| 
									
										
										
										
											2010-02-07 12:30:44 +00:00
										 |  |  |             extend(PDF_Korean) | 
					
						
							|  |  |  |             AddUHCFont() | 
					
						
							|  |  |  |             @font_for_content = 'UHC' | 
					
						
							| 
									
										
										
										
											2011-03-30 11:32:35 +00:00
										 |  |  |             @font_for_footer  = 'UHC' | 
					
						
							| 
									
										
										
										
											2011-04-10 08:34:02 +00:00
										 |  |  |           when 'CP932' | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |             extend(PDF_Japanese) | 
					
						
							|  |  |  |             AddSJISFont() | 
					
						
							|  |  |  |             @font_for_content = 'SJIS' | 
					
						
							|  |  |  |             @font_for_footer = 'SJIS' | 
					
						
							| 
									
										
										
										
											2011-04-10 08:34:02 +00:00
										 |  |  |           when 'GB18030' | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |             extend(PDF_Chinese) | 
					
						
							|  |  |  |             AddGBFont() | 
					
						
							|  |  |  |             @font_for_content = 'GB' | 
					
						
							|  |  |  |             @font_for_footer = 'GB' | 
					
						
							| 
									
										
										
										
											2011-04-10 08:34:02 +00:00
										 |  |  |           when 'BIG5' | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |             extend(PDF_Chinese) | 
					
						
							|  |  |  |             AddBig5Font() | 
					
						
							|  |  |  |             @font_for_content = 'Big5' | 
					
						
							|  |  |  |             @font_for_footer = 'Big5' | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             @font_for_content = 'Arial' | 
					
						
							| 
									
										
										
										
											2011-03-30 11:32:35 +00:00
										 |  |  |             @font_for_footer  = 'Helvetica' | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |           end | 
					
						
							|  |  |  |           SetCreator(Redmine::Info.app_name) | 
					
						
							|  |  |  |           SetFont(@font_for_content) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         def SetFontStyle(style, size) | 
					
						
							|  |  |  |           SetFont(@font_for_content, style, size) | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2009-01-04 14:54:19 +00:00
										 |  |  |          | 
					
						
							|  |  |  |         def SetTitle(txt) | 
					
						
							|  |  |  |           txt = begin | 
					
						
							|  |  |  |             utf16txt = Iconv.conv('UTF-16BE', 'UTF-8', txt) | 
					
						
							|  |  |  |             hextxt = "<FEFF"  # FEFF is BOM | 
					
						
							|  |  |  |             hextxt << utf16txt.unpack("C*").map {|x| sprintf("%02X",x) }.join | 
					
						
							|  |  |  |             hextxt << ">" | 
					
						
							|  |  |  |           rescue | 
					
						
							|  |  |  |             txt | 
					
						
							|  |  |  |           end || '' | 
					
						
							|  |  |  |           super(txt) | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2011-04-03 02:47:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-04 14:54:19 +00:00
										 |  |  |         def textstring(s) | 
					
						
							|  |  |  |           # Format a text string | 
					
						
							|  |  |  |           if s =~ /^</  # This means the string is hex-dumped. | 
					
						
							|  |  |  |             return s | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             return '('+escape(s)+')' | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2011-04-03 02:47:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         def fix_text_encoding(txt) | 
					
						
							| 
									
										
										
										
											2011-04-06 05:52:07 +00:00
										 |  |  |           txt ||= '' | 
					
						
							| 
									
										
										
										
											2011-04-06 05:38:31 +00:00
										 |  |  |           if txt.respond_to?(:force_encoding) | 
					
						
							|  |  |  |             txt.force_encoding('UTF-8') | 
					
						
							|  |  |  |             txt = txt.encode(l(:general_pdf_encoding), :invalid => :replace, | 
					
						
							|  |  |  |                               :undef => :replace, :replace => '?') | 
					
						
							|  |  |  |             txt.force_encoding('ASCII-8BIT') | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             @ic ||= Iconv.new(l(:general_pdf_encoding), 'UTF-8') | 
					
						
							| 
									
										
										
										
											2011-04-06 10:50:01 +00:00
										 |  |  |             txtar = "" | 
					
						
							|  |  |  |             begin | 
					
						
							|  |  |  |               txtar += @ic.iconv(txt) | 
					
						
							|  |  |  |             rescue Iconv::IllegalSequence | 
					
						
							|  |  |  |               txtar += $!.success | 
					
						
							|  |  |  |               txt = '?' + $!.failed[1,$!.failed.length] | 
					
						
							|  |  |  |               retry | 
					
						
							| 
									
										
										
										
											2011-04-06 05:38:31 +00:00
										 |  |  |             rescue | 
					
						
							| 
									
										
										
										
											2011-04-06 10:50:01 +00:00
										 |  |  |               txtar += $!.success | 
					
						
							| 
									
										
										
										
											2011-04-06 05:52:07 +00:00
										 |  |  |             end | 
					
						
							| 
									
										
										
										
											2011-04-06 10:50:01 +00:00
										 |  |  |             txt = txtar | 
					
						
							| 
									
										
										
										
											2011-04-06 05:38:31 +00:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2011-04-06 04:27:38 +00:00
										 |  |  |           # 0x5c char handling | 
					
						
							|  |  |  |           txt.gsub(/\\/, "\\\\\\\\") | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2011-04-03 02:47:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         def RDMCell(w,h=0,txt='',border=0,ln=0,align='',fill=0,link='') | 
					
						
							|  |  |  |             Cell(w,h,fix_text_encoding(txt),border,ln,align,fill,link) | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2011-04-03 02:47:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         def RDMMultiCell(w,h=0,txt='',border=0,align='',fill=0) | 
					
						
							|  |  |  |             MultiCell(w,h,fix_text_encoding(txt),border,align,fill) | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2011-04-03 02:47:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         def Footer | 
					
						
							|  |  |  |           SetFont(@font_for_footer, 'I', 8) | 
					
						
							|  |  |  |           SetY(-15) | 
					
						
							|  |  |  |           SetX(15) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |           RDMCell(0, 5, @footer_date, 0, 0, 'L') | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |           SetY(-15) | 
					
						
							|  |  |  |           SetX(-30) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |           RDMCell(0, 5, PageNo().to_s + '/{nb}', 0, 0, 'C') | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         alias alias_nb_pages AliasNbPages | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |       # Returns a PDF string of a list of issues | 
					
						
							| 
									
										
										
										
											2009-04-26 13:09:14 +00:00
										 |  |  |       def issues_to_pdf(issues, project, query) | 
					
						
							| 
									
										
										
										
											2011-04-02 08:01:47 +00:00
										 |  |  |         if ( current_language.to_s.downcase == 'ko'    || | 
					
						
							| 
									
										
										
										
											2011-03-30 11:32:35 +00:00
										 |  |  |              current_language.to_s.downcase == 'ja'    || | 
					
						
							|  |  |  |              current_language.to_s.downcase == 'zh'    || | 
					
						
							|  |  |  |              current_language.to_s.downcase == 'zh-tw' || | 
					
						
							|  |  |  |              current_language.to_s.downcase == 'th'    ) | 
					
						
							|  |  |  |           pdf = IFPDF.new(current_language) | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |           pdf = ITCPDF.new(current_language) | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2009-08-17 14:08:42 +00:00
										 |  |  |         title = query.new_record? ? l(:label_issue_plural) : query.name | 
					
						
							|  |  |  |         title = "#{project} - #{title}" if project | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetTitle(title) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.alias_nb_pages | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.footer_date = format_date(Date.today) | 
					
						
							|  |  |  |         pdf.AddPage("L") | 
					
						
							| 
									
										
										
										
											2009-08-17 14:08:42 +00:00
										 |  |  |          | 
					
						
							|  |  |  |         row_height = 6
 | 
					
						
							|  |  |  |         col_width = [] | 
					
						
							|  |  |  |         unless query.columns.empty? | 
					
						
							|  |  |  |           col_width = query.columns.collect {|column| column.name == :subject ? 4.0 : 1.0 } | 
					
						
							|  |  |  |           ratio = 262.0 / col_width.inject(0) {|s,w| s += w} | 
					
						
							|  |  |  |           col_width = col_width.collect {|w| w * ratio} | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |          | 
					
						
							|  |  |  |         # title | 
					
						
							| 
									
										
										
										
											2011-04-05 23:04:32 +00:00
										 |  |  |         pdf.SetFontStyle('B',11) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(190,10, title) | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.Ln | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         # headers | 
					
						
							| 
									
										
										
										
											2009-08-17 14:08:42 +00:00
										 |  |  |         pdf.SetFontStyle('B',8) | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetFillColor(230, 230, 230) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(15, row_height, "#", 1, 0, 'L', 1) | 
					
						
							| 
									
										
										
										
											2009-08-17 14:08:42 +00:00
										 |  |  |         query.columns.each_with_index do |column, i| | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |           pdf.RDMCell(col_width[i], row_height, column.caption, 1, 0, 'L', 1) | 
					
						
							| 
									
										
										
										
											2009-08-17 14:08:42 +00:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.Ln | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         # rows | 
					
						
							| 
									
										
										
										
											2009-08-17 14:08:42 +00:00
										 |  |  |         pdf.SetFontStyle('',8) | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetFillColor(255, 255, 255) | 
					
						
							| 
									
										
										
										
											2010-01-18 18:00:27 +00:00
										 |  |  |         previous_group = false | 
					
						
							| 
									
										
										
										
											2009-04-26 13:09:14 +00:00
										 |  |  |         issues.each do |issue| | 
					
						
							| 
									
										
										
										
											2011-04-04 05:01:42 +00:00
										 |  |  |           if query.grouped? && | 
					
						
							|  |  |  |                (group = query.group_by_column.value(issue)) != previous_group | 
					
						
							| 
									
										
										
										
											2009-08-17 14:08:42 +00:00
										 |  |  |             pdf.SetFontStyle('B',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |             pdf.RDMCell(277, row_height,  | 
					
						
							| 
									
										
										
										
											2010-09-20 02:55:20 +00:00
										 |  |  |               (group.blank? ? 'None' : group.to_s) + " (#{query.issue_count_by_group[group]})", | 
					
						
							| 
									
										
										
										
											2010-01-18 18:00:27 +00:00
										 |  |  |               1, 1, 'L') | 
					
						
							| 
									
										
										
										
											2009-08-17 14:08:42 +00:00
										 |  |  |             pdf.SetFontStyle('',8) | 
					
						
							| 
									
										
										
										
											2010-01-18 18:00:27 +00:00
										 |  |  |             previous_group = group | 
					
						
							| 
									
										
										
										
											2009-04-26 13:09:14 +00:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |           pdf.RDMCell(15, row_height, issue.id.to_s, 1, 0, 'L', 1) | 
					
						
							| 
									
										
										
										
											2009-08-17 14:08:42 +00:00
										 |  |  |           query.columns.each_with_index do |column, i| | 
					
						
							|  |  |  |             s = if column.is_a?(QueryCustomFieldColumn) | 
					
						
							|  |  |  |               cv = issue.custom_values.detect {|v| v.custom_field_id == column.custom_field.id} | 
					
						
							|  |  |  |               show_value(cv) | 
					
						
							|  |  |  |             else | 
					
						
							|  |  |  |               value = issue.send(column.name) | 
					
						
							|  |  |  |               if value.is_a?(Date) | 
					
						
							|  |  |  |                 format_date(value) | 
					
						
							|  |  |  |               elsif value.is_a?(Time) | 
					
						
							|  |  |  |                 format_time(value) | 
					
						
							|  |  |  |               else | 
					
						
							|  |  |  |                 value | 
					
						
							|  |  |  |               end | 
					
						
							|  |  |  |             end | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |             pdf.RDMCell(col_width[i], row_height, s.to_s, 1, 0, 'L', 1) | 
					
						
							| 
									
										
										
										
											2009-08-17 14:08:42 +00:00
										 |  |  |           end | 
					
						
							|  |  |  |           pdf.Ln | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         if issues.size == Setting.issues_export_limit.to_i | 
					
						
							|  |  |  |           pdf.SetFontStyle('B',10) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |           pdf.RDMCell(0, row_height, '...') | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         end | 
					
						
							|  |  |  |         pdf.Output | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2010-09-10 03:09:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |       # Returns a PDF string of a single issue | 
					
						
							|  |  |  |       def issue_to_pdf(issue) | 
					
						
							| 
									
										
										
										
											2011-04-02 08:01:47 +00:00
										 |  |  |         if ( current_language.to_s.downcase == 'ko'    || | 
					
						
							| 
									
										
										
										
											2011-03-30 11:32:35 +00:00
										 |  |  |              current_language.to_s.downcase == 'ja'    || | 
					
						
							|  |  |  |              current_language.to_s.downcase == 'zh'    || | 
					
						
							|  |  |  |              current_language.to_s.downcase == 'zh-tw' || | 
					
						
							|  |  |  |              current_language.to_s.downcase == 'th'    ) | 
					
						
							|  |  |  |           pdf = IFPDF.new(current_language) | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |           pdf = ITCPDF.new(current_language) | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetTitle("#{issue.project} - ##{issue.tracker} #{issue.id}") | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.alias_nb_pages | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.footer_date = format_date(Date.today) | 
					
						
							|  |  |  |         pdf.AddPage | 
					
						
							|  |  |  |          | 
					
						
							| 
									
										
										
										
											2011-04-05 23:04:32 +00:00
										 |  |  |         pdf.SetFontStyle('B',11) | 
					
						
							| 
									
										
										
										
											2011-04-04 05:01:42 +00:00
										 |  |  |         pdf.RDMCell(190,10, | 
					
						
							|  |  |  |            "#{issue.project} - #{issue.tracker} # #{issue.id}: #{issue.subject}") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.Ln | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         y0 = pdf.GetY | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         pdf.SetFontStyle('B',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(35,5, l(:field_status) + ":","LT") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetFontStyle('',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(60,5, issue.status.to_s,"RT") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetFontStyle('B',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(35,5, l(:field_priority) + ":","LT") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetFontStyle('',9) | 
					
						
							| 
									
										
										
										
											2011-04-05 23:04:32 +00:00
										 |  |  |         pdf.RDMCell(60,5, issue.priority.to_s,"RT") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.Ln | 
					
						
							| 
									
										
										
										
											2010-09-10 03:09:02 +00:00
										 |  |  |          | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetFontStyle('B',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(35,5, l(:field_author) + ":","L") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetFontStyle('',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(60,5, issue.author.to_s,"R") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetFontStyle('B',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(35,5, l(:field_category) + ":","L") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetFontStyle('',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(60,5, issue.category.to_s,"R") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.Ln    | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         pdf.SetFontStyle('B',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(35,5, l(:field_created_on) + ":","L") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetFontStyle('',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(60,5, format_date(issue.created_on),"R") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetFontStyle('B',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(35,5, l(:field_assigned_to) + ":","L") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetFontStyle('',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(60,5, issue.assigned_to.to_s,"R") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.Ln | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         pdf.SetFontStyle('B',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(35,5, l(:field_updated_on) + ":","LB") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetFontStyle('',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(60,5, format_date(issue.updated_on),"RB") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetFontStyle('B',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(35,5, l(:field_due_date) + ":","LB") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetFontStyle('',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(60,5, format_date(issue.due_date),"RB") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.Ln | 
					
						
							| 
									
										
										
										
											2010-09-10 03:09:02 +00:00
										 |  |  |          | 
					
						
							| 
									
										
										
										
											2009-07-29 19:05:03 +00:00
										 |  |  |         for custom_value in issue.custom_field_values | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |           pdf.SetFontStyle('B',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |           pdf.RDMCell(35,5, custom_value.custom_field.name + ":","L") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |           pdf.SetFontStyle('',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |           pdf.RDMMultiCell(155,5, (show_value custom_value),"R") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2010-09-10 03:09:02 +00:00
										 |  |  |          | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetFontStyle('B',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(35,5, l(:field_subject) + ":","LTB") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetFontStyle('',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(155,5, issue.subject,"RTB") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.Ln     | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         pdf.SetFontStyle('B',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(35,5, l(:field_description) + ":") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.SetFontStyle('',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMMultiCell(155,5, issue.description.to_s,"BR") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |          | 
					
						
							|  |  |  |         pdf.Line(pdf.GetX, y0, pdf.GetX, pdf.GetY) | 
					
						
							|  |  |  |         pdf.Line(pdf.GetX, pdf.GetY, 170, pdf.GetY) | 
					
						
							|  |  |  |         pdf.Ln | 
					
						
							|  |  |  |          | 
					
						
							| 
									
										
										
										
											2011-04-04 05:01:42 +00:00
										 |  |  |         if issue.changesets.any? && | 
					
						
							|  |  |  |              User.current.allowed_to?(:view_changesets, issue.project) | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |           pdf.SetFontStyle('B',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |           pdf.RDMCell(190,5, l(:label_associated_revisions), "B") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |           pdf.Ln | 
					
						
							|  |  |  |           for changeset in issue.changesets | 
					
						
							|  |  |  |             pdf.SetFontStyle('B',8) | 
					
						
							| 
									
										
										
										
											2011-04-04 05:01:42 +00:00
										 |  |  |             pdf.RDMCell(190,5, | 
					
						
							|  |  |  |               format_time(changeset.committed_on) + " - " + changeset.author.to_s) | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |             pdf.Ln | 
					
						
							|  |  |  |             unless changeset.comments.blank? | 
					
						
							|  |  |  |               pdf.SetFontStyle('',8) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |               pdf.RDMMultiCell(190,5, changeset.comments.to_s) | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |             end    | 
					
						
							|  |  |  |             pdf.Ln | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         pdf.SetFontStyle('B',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |         pdf.RDMCell(190,5, l(:label_history), "B") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         pdf.Ln   | 
					
						
							| 
									
										
										
										
											2011-04-04 05:01:42 +00:00
										 |  |  |         for journal in issue.journals.find( | 
					
						
							|  |  |  |                           :all, :include => [:user, :details], | 
					
						
							|  |  |  |                           :order => "#{Journal.table_name}.created_on ASC") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |           pdf.SetFontStyle('B',8) | 
					
						
							| 
									
										
										
										
											2011-04-04 05:01:42 +00:00
										 |  |  |           pdf.RDMCell(190,5, | 
					
						
							|  |  |  |              format_time(journal.created_on) + " - " + journal.user.name) | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |           pdf.Ln | 
					
						
							|  |  |  |           pdf.SetFontStyle('I',8) | 
					
						
							|  |  |  |           for detail in journal.details | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |             pdf.RDMCell(190,5, "- " + show_detail(detail, true)) | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |             pdf.Ln | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |           if journal.notes? | 
					
						
							|  |  |  |             pdf.SetFontStyle('',8) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |             pdf.RDMMultiCell(190,5, journal.notes.to_s) | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |           end    | 
					
						
							|  |  |  |           pdf.Ln | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2011-04-04 05:01:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |         if issue.attachments.any? | 
					
						
							|  |  |  |           pdf.SetFontStyle('B',9) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |           pdf.RDMCell(190,5, l(:label_attachment_plural), "B") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |           pdf.Ln | 
					
						
							|  |  |  |           for attachment in issue.attachments | 
					
						
							|  |  |  |             pdf.SetFontStyle('',8) | 
					
						
							| 
									
										
										
										
											2011-03-30 07:32:08 +00:00
										 |  |  |             pdf.RDMCell(80,5, attachment.filename) | 
					
						
							|  |  |  |             pdf.RDMCell(20,5, number_to_human_size(attachment.filesize),0,0,"R") | 
					
						
							|  |  |  |             pdf.RDMCell(25,5, format_date(attachment.created_on),0,0,"R") | 
					
						
							|  |  |  |             pdf.RDMCell(65,5, attachment.author.name,0,0,"R") | 
					
						
							| 
									
										
										
										
											2009-01-04 12:03:39 +00:00
										 |  |  |             pdf.Ln | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         pdf.Output | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |