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