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