##// END OF EJS Templates
Merged r14888 from trunk to 3.0-stable (#21328)...
Toshi MARUYAMA -
r14542:741a967a4677
parent child
Show More
@@ -1,152 +1,152
1 1 # encoding: utf-8
2 2 #
3 3 # Redmine - project management software
4 4 # Copyright (C) 2006-2015 Jean-Philippe Lang
5 5 #
6 6 # This program is free software; you can redistribute it and/or
7 7 # modify it under the terms of the GNU General Public License
8 8 # as published by the Free Software Foundation; either version 2
9 9 # of the License, or (at your option) any later version.
10 10 #
11 11 # This program is distributed in the hope that it will be useful,
12 12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 14 # GNU General Public License for more details.
15 15 #
16 16 # You should have received a copy of the GNU General Public License
17 17 # along with this program; if not, write to the Free Software
18 18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 19
20 20 require 'rbpdf'
21 21
22 22 module Redmine
23 23 module Export
24 24 module PDF
25 25 class ITCPDF < RBPDF
26 26 include Redmine::I18n
27 27 attr_accessor :footer_date
28 28
29 29 def initialize(lang, orientation='P')
30 30 @@k_path_cache = Rails.root.join('tmp', 'pdf')
31 31 FileUtils.mkdir_p @@k_path_cache unless File::exist?(@@k_path_cache)
32 32 set_language_if_valid lang
33 33 super(orientation, 'mm', 'A4')
34 34 set_print_header(false)
35 35 set_rtl(l(:direction) == 'rtl')
36 36
37 37 @font_for_content = l(:general_pdf_fontname)
38 38 @font_for_footer = l(:general_pdf_fontname)
39 39 set_creator(Redmine::Info.app_name)
40 40 set_font(@font_for_content)
41 41
42 42 set_header_font([@font_for_content, '', 10])
43 43 set_footer_font([@font_for_content, '', 8])
44 44 set_default_monospaced_font(@font_for_content)
45 45 end
46 46
47 47 def SetFontStyle(style, size)
48 48 set_font(@font_for_content, style, size)
49 49 end
50 50
51 51 def SetFont(family, style='', size=0, fontfile='')
52 52 # FreeSerif Bold Thai font has problem.
53 53 style.delete!('B') if l(:general_pdf_fontname) == 'freeserif'
54 54 # DejaVuSans Italic Arabic and Persian font has problem.
55 style.delete!('I') if l(:general_pdf_fontname) == 'DejaVuSans'
55 style.delete!('I') if l(:general_pdf_fontname) == 'DejaVuSans' && current_language.to_s.casecmp("vi") != 0
56 56 super(family, style, size, fontfile)
57 57 end
58 58 alias_method :set_font, :SetFont
59 59
60 60 def fix_text_encoding(txt)
61 61 RDMPdfEncoding::rdm_from_utf8(txt, "UTF-8")
62 62 end
63 63
64 64 def formatted_text(text)
65 65 Redmine::WikiFormatting.to_html(Setting.text_formatting, text)
66 66 end
67 67
68 68 def RDMCell(w ,h=0, txt='', border=0, ln=0, align='', fill=0, link='')
69 69 cell(w, h, txt, border, ln, align, fill, link)
70 70 end
71 71
72 72 def RDMMultiCell(w, h=0, txt='', border=0, align='', fill=0, ln=1)
73 73 multi_cell(w, h, txt, border, align, fill, ln)
74 74 end
75 75
76 76 def RDMwriteFormattedCell(w, h, x, y, txt='', attachments=[], border=0, ln=1, fill=0)
77 77 @attachments = attachments
78 78
79 79 css_tag = ' <style>
80 80 table, td {
81 81 border: 2px #ff0000 solid;
82 82 }
83 83 th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; text-align: center; font-style: bold;}
84 84 pre {
85 85 background-color: #fafafa;
86 86 }
87 87 </style>'
88 88
89 89 # Strip {{toc}} tags
90 90 txt.gsub!(/<p>\{\{([<>]?)toc\}\}<\/p>/i, '')
91 91 writeHTMLCell(w, h, x, y, css_tag + txt, border, ln, fill)
92 92 end
93 93
94 94 def RDMwriteHTMLCell(w, h, x, y, txt='', attachments=[], border=0, ln=1, fill=0)
95 95 txt = formatted_text(txt)
96 96 RDMwriteFormattedCell(w, h, x, y, txt, attachments, border, ln, fill)
97 97 end
98 98
99 99 def get_image_filename(attrname)
100 100 atta = RDMPdfEncoding.attach(@attachments, attrname, "UTF-8")
101 101 if atta
102 102 return atta.diskfile
103 103 else
104 104 return nil
105 105 end
106 106 end
107 107
108 108 def get_sever_url(url)
109 109 if !empty_string(url) and (url[0, 1] == '/')
110 110 Setting.host_name.split('/')[0] + url
111 111 else
112 112 url
113 113 end
114 114 end
115 115
116 116 def Footer
117 117 set_font(@font_for_footer, 'I', 8)
118 118 set_x(15)
119 119 if get_rtl
120 120 RDMCell(0, 5, @footer_date, 0, 0, 'R')
121 121 else
122 122 RDMCell(0, 5, @footer_date, 0, 0, 'L')
123 123 end
124 124 set_x(-30)
125 125 RDMCell(0, 5, get_alias_num_page() + '/' + get_alias_nb_pages(), 0, 0, 'C')
126 126 end
127 127 end
128 128
129 129 class RDMPdfEncoding
130 130 def self.rdm_from_utf8(txt, encoding)
131 131 txt ||= ''
132 132 txt = Redmine::CodesetUtil.from_utf8(txt, encoding)
133 133 txt.force_encoding('ASCII-8BIT')
134 134 txt
135 135 end
136 136
137 137 def self.attach(attachments, filename, encoding)
138 138 filename_utf8 = Redmine::CodesetUtil.to_utf8(filename, encoding)
139 139 atta = nil
140 140 if filename_utf8 =~ /^[^\/"]+\.(gif|jpg|jpe|jpeg|png)$/i
141 141 atta = Attachment.latest_attach(attachments, filename_utf8)
142 142 end
143 143 if atta && atta.readable? && atta.visible?
144 144 return atta
145 145 else
146 146 return nil
147 147 end
148 148 end
149 149 end
150 150 end
151 151 end
152 152 end
General Comments 0
You need to be logged in to leave comments. Login now