##// END OF EJS Templates
revert r14907 (#19017)...
Toshi MARUYAMA -
r14529:12ede7d07f5e
parent child
Show More
@@ -1,154 +1,154
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 @monospaced_font_for_content = l(:general_pdf_monospaced_fontname)
39 39 @font_for_footer = l(:general_pdf_fontname)
40 40 set_creator(Redmine::Info.app_name)
41 41 set_font(@font_for_content)
42 42
43 43 set_header_font([@font_for_content, '', 10])
44 44 set_footer_font([@font_for_content, '', 8])
45 45 set_default_monospaced_font(@monospaced_font_for_content)
46 46 set_display_mode('default', 'OneColumn')
47 47 end
48 48
49 49 def SetFontStyle(style, size)
50 50 set_font(@font_for_content, style, size)
51 51 end
52 52
53 53 def SetFont(family, style='', size=0, fontfile='')
54 54 # FreeSerif Bold Thai font has problem.
55 style.delete!('B') if family == 'freeserif'
55 style.delete!('B') if l(:general_pdf_fontname) == 'freeserif'
56 56 # DejaVuSans Italic Arabic and Persian font has problem.
57 style.delete!('I') if family == 'DejaVuSans' && current_language.to_s.casecmp("vi") != 0
57 style.delete!('I') if l(:general_pdf_fontname) == 'DejaVuSans' && current_language.to_s.casecmp("vi") != 0
58 58 super(family, style, size, fontfile)
59 59 end
60 60 alias_method :set_font, :SetFont
61 61
62 62 def fix_text_encoding(txt)
63 63 RDMPdfEncoding::rdm_from_utf8(txt, "UTF-8")
64 64 end
65 65
66 66 def formatted_text(text)
67 67 Redmine::WikiFormatting.to_html(Setting.text_formatting, text)
68 68 end
69 69
70 70 def RDMCell(w ,h=0, txt='', border=0, ln=0, align='', fill=0, link='')
71 71 cell(w, h, txt, border, ln, align, fill, link)
72 72 end
73 73
74 74 def RDMMultiCell(w, h=0, txt='', border=0, align='', fill=0, ln=1)
75 75 multi_cell(w, h, txt, border, align, fill, ln)
76 76 end
77 77
78 78 def RDMwriteFormattedCell(w, h, x, y, txt='', attachments=[], border=0, ln=1, fill=0)
79 79 @attachments = attachments
80 80
81 81 css_tag = ' <style>
82 82 table, td {
83 83 border: 2px #ff0000 solid;
84 84 }
85 85 th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; text-align: center; font-style: bold;}
86 86 pre {
87 87 background-color: #fafafa;
88 88 }
89 89 </style>'
90 90
91 91 # Strip {{toc}} tags
92 92 txt.gsub!(/<p>\{\{([<>]?)toc\}\}<\/p>/i, '')
93 93 writeHTMLCell(w, h, x, y, css_tag + txt, border, ln, fill)
94 94 end
95 95
96 96 def RDMwriteHTMLCell(w, h, x, y, txt='', attachments=[], border=0, ln=1, fill=0)
97 97 txt = formatted_text(txt)
98 98 RDMwriteFormattedCell(w, h, x, y, txt, attachments, border, ln, fill)
99 99 end
100 100
101 101 def get_image_filename(attrname)
102 102 atta = RDMPdfEncoding.attach(@attachments, attrname, "UTF-8")
103 103 if atta
104 104 return atta.diskfile
105 105 else
106 106 return nil
107 107 end
108 108 end
109 109
110 110 def get_sever_url(url)
111 111 if !empty_string(url) and (url[0, 1] == '/')
112 112 Setting.host_name.split('/')[0] + url
113 113 else
114 114 url
115 115 end
116 116 end
117 117
118 118 def Footer
119 119 set_font(@font_for_footer, 'I', 8)
120 120 set_x(15)
121 121 if get_rtl
122 122 RDMCell(0, 5, @footer_date, 0, 0, 'R')
123 123 else
124 124 RDMCell(0, 5, @footer_date, 0, 0, 'L')
125 125 end
126 126 set_x(-30)
127 127 RDMCell(0, 5, get_alias_num_page() + '/' + get_alias_nb_pages(), 0, 0, 'C')
128 128 end
129 129 end
130 130
131 131 class RDMPdfEncoding
132 132 def self.rdm_from_utf8(txt, encoding)
133 133 txt ||= ''
134 134 txt = Redmine::CodesetUtil.from_utf8(txt, encoding)
135 135 txt.force_encoding('ASCII-8BIT')
136 136 txt
137 137 end
138 138
139 139 def self.attach(attachments, filename, encoding)
140 140 filename_utf8 = Redmine::CodesetUtil.to_utf8(filename, encoding)
141 141 atta = nil
142 142 if filename_utf8 =~ /^[^\/"]+\.(gif|jpg|jpe|jpeg|png)$/i
143 143 atta = Attachment.latest_attach(attachments, filename_utf8)
144 144 end
145 145 if atta && atta.readable? && atta.visible?
146 146 return atta
147 147 else
148 148 return nil
149 149 end
150 150 end
151 151 end
152 152 end
153 153 end
154 154 end
General Comments 0
You need to be logged in to leave comments. Login now