]>
Commit | Line | Data |
---|---|---|
824f8c45 | 1 | #!/usr/bin/php -q |
2 | <?php | |
3 | //============================================================+ | |
4 | // File name : tcpdf_addfont.php | |
5 | // Version : 1.0.002 | |
6 | // Begin : 2013-05-13 | |
7 | // Last Update : 2013-08-05 | |
8 | // Authors : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com | |
9 | // Remi Collet | |
10 | // License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) | |
11 | // ------------------------------------------------------------------- | |
12 | // Copyright (C) 2011-2013 Nicola Asuni - Tecnick.com LTD | |
13 | // | |
14 | // This file is part of TCPDF software library. | |
15 | // | |
16 | // TCPDF is free software: you can redistribute it and/or modify it | |
17 | // under the terms of the GNU Lesser General Public License as | |
18 | // published by the Free Software Foundation, either version 3 of the | |
19 | // License, or (at your option) any later version. | |
20 | // | |
21 | // TCPDF is distributed in the hope that it will be useful, but | |
22 | // WITHOUT ANY WARRANTY; without even the implied warranty of | |
23 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
24 | // See the GNU Lesser General Public License for more details. | |
25 | // | |
26 | // You should have received a copy of the License | |
27 | // along with TCPDF. If not, see | |
28 | // <http://www.tecnick.com/pagefiles/tcpdf/LICENSE.TXT>. | |
29 | // | |
30 | // See LICENSE.TXT file for more information. | |
31 | // ------------------------------------------------------------------- | |
32 | // | |
33 | // Description : This is a command line script to generate TCPDF fonts. | |
34 | // | |
35 | //============================================================+ | |
36 | ||
37 | /** | |
38 | * @file | |
39 | * This is a command line script to generate TCPDF fonts.<br> | |
40 | * @package com.tecnick.tcpdf | |
41 | * @version 1.0.000 | |
42 | */ | |
43 | ||
44 | if (php_sapi_name() != 'cli') { | |
45 | echo 'You need to run this command from console.'; | |
46 | exit(1); | |
47 | } | |
48 | ||
49 | $tcpdf_include_dirs = array(realpath(dirname(__FILE__).'/../tcpdf.php'), '/usr/share/php/tcpdf/tcpdf.php', '/usr/share/tcpdf/tcpdf.php', '/usr/share/php-tcpdf/tcpdf.php', '/var/www/tcpdf/tcpdf.php', '/var/www/html/tcpdf/tcpdf.php', '/usr/local/apache2/htdocs/tcpdf/tcpdf.php'); | |
50 | foreach ($tcpdf_include_dirs as $tcpdf_include_path) { | |
51 | if (@file_exists($tcpdf_include_path)) { | |
52 | require_once($tcpdf_include_path); | |
53 | break; | |
54 | } | |
55 | } | |
56 | ||
57 | /** | |
58 | * Display help guide for this command. | |
59 | */ | |
60 | function showHelp() { | |
61 | $help = <<<EOD | |
62 | tcpdf_addfont - command line tool to convert fonts for the TCPDF library. | |
63 | ||
64 | Usage: tcpdf_addfont.php [ options ] -i fontfile[,fontfile]... | |
65 | ||
66 | Options: | |
67 | ||
68 | -t | |
69 | --type Font type. Leave empty for autodetect mode. | |
70 | Valid values are: | |
71 | TrueTypeUnicode | |
72 | TrueType | |
73 | Type1 | |
74 | CID0JP = CID-0 Japanese | |
75 | CID0KR = CID-0 Korean | |
76 | CID0CS = CID-0 Chinese Simplified | |
77 | CID0CT = CID-0 Chinese Traditional | |
78 | ||
79 | -e | |
80 | --enc Name of the encoding table to use. Leave empty for | |
81 | default mode. Omit this parameter for TrueType Unicode | |
82 | and symbolic fonts like Symbol or ZapfDingBats. | |
83 | ||
84 | -f | |
85 | --flags Unsigned 32-bit integer containing flags specifying | |
86 | various characteristics of the font (PDF32000:2008 - | |
87 | 9.8.2 Font Descriptor Flags): +1 for fixed font; +4 for | |
88 | symbol or +32 for non-symbol; +64 for italic. Fixed and | |
89 | Italic mode are generally autodetected so you have to | |
90 | set it to 32 = non-symbolic font (default) or 4 = | |
91 | symbolic font. | |
92 | ||
93 | -o | |
94 | --outpath Output path for generated font files (must be writeable | |
95 | by the web server). Leave empty for default font folder. | |
96 | ||
97 | -p | |
98 | --platid Platform ID for CMAP table to extract (when building a | |
99 | Unicode font for Windows this value should be 3, for | |
100 | Macintosh should be 1). | |
101 | ||
102 | -n | |
103 | --encid Encoding ID for CMAP table to extract (when building a | |
104 | Unicode font for Windows this value should be 1, for | |
105 | Macintosh should be 0). When Platform ID is 3, legal | |
106 | values for Encoding ID are: 0=Symbol, 1=Unicode, | |
107 | 2=ShiftJIS, 3=PRC, 4=Big5, 5=Wansung, 6=Johab, | |
108 | 7=Reserved, 8=Reserved, 9=Reserved, 10=UCS-4. | |
109 | ||
110 | -b | |
111 | --addcbbox Includes the character bounding box information on the | |
112 | php font file. | |
113 | ||
114 | -l | |
115 | --link Link to system font instead of copying the font data # | |
116 | (not transportable) - Note: do not work with Type1 fonts. | |
117 | ||
118 | -i | |
119 | --fonts Comma-separated list of input font files. | |
120 | ||
121 | -h | |
122 | --help Display this help and exit. | |
123 | EOD; | |
124 | echo $help."\n\n"; | |
125 | exit(0); | |
126 | } | |
127 | ||
128 | // remove the name of the executing script | |
129 | array_shift($argv); | |
130 | ||
131 | // no options chosen | |
132 | if (!is_array($argv)) { | |
133 | showHelp(); | |
134 | } | |
135 | ||
136 | // initialize the array of options | |
137 | $options = array('type'=>'', 'enc'=>'', 'flags'=>32, 'outpath'=>K_PATH_FONTS, 'platid'=>3, 'encid'=>1, 'addcbbox'=>false, 'link'=>false); | |
138 | ||
139 | // short input options | |
140 | $sopt = ''; | |
141 | $sopt .= 't:'; | |
142 | $sopt .= 'e:'; | |
143 | $sopt .= 'f:'; | |
144 | $sopt .= 'o:'; | |
145 | $sopt .= 'p:'; | |
146 | $sopt .= 'n:'; | |
147 | $sopt .= 'b'; | |
148 | $sopt .= 'l'; | |
149 | $sopt .= 'i:'; | |
150 | $sopt .= 'h'; | |
151 | ||
152 | // long input options | |
153 | $lopt = array(); | |
154 | $lopt[] = 'type:'; | |
155 | $lopt[] = 'enc:'; | |
156 | $lopt[] = 'flags:'; | |
157 | $lopt[] = 'outpath:'; | |
158 | $lopt[] = 'platid:'; | |
159 | $lopt[] = 'encid:'; | |
160 | $lopt[] = 'addcbbox'; | |
161 | $lopt[] = 'link'; | |
162 | $lopt[] = 'fonts:'; | |
163 | $lopt[] = 'help'; | |
164 | ||
165 | // parse input options | |
166 | $inopt = getopt($sopt, $lopt); | |
167 | ||
168 | // import options (with some sanitization) | |
169 | foreach ($inopt as $opt => $val) { | |
170 | switch ($opt) { | |
171 | case 't': | |
172 | case 'type': { | |
173 | if (in_array($val, array('TrueTypeUnicode', 'TrueType', 'Type1', 'CID0JP', 'CID0KR', 'CID0CS', 'CID0CT'))) { | |
174 | $options['type'] = $val; | |
175 | } | |
176 | break; | |
177 | } | |
178 | case 'e': | |
179 | case 'enc': { | |
180 | $options['enc'] = $val; | |
181 | break; | |
182 | } | |
183 | case 'f': | |
184 | case 'flags': { | |
185 | $options['flags'] = intval($val); | |
186 | break; | |
187 | } | |
188 | case 'o': | |
189 | case 'outpath': { | |
190 | $options['outpath'] = realpath($val); | |
191 | if (substr($options['outpath'], -1) != '/') { | |
192 | $options['outpath'] .= '/'; | |
193 | } | |
194 | break; | |
195 | } | |
196 | case 'p': | |
197 | case 'platid': { | |
198 | $options['platid'] = min(max(1, intval($val)), 3); | |
199 | break; | |
200 | } | |
201 | case 'n': | |
202 | case 'encid': { | |
203 | $options['encid'] = min(max(0, intval($val)), 10); | |
204 | break; | |
205 | } | |
206 | case 'b': | |
207 | case 'addcbbox': { | |
208 | $options['addcbbox'] = true; | |
209 | break; | |
210 | } | |
211 | case 'l': | |
212 | case 'link': { | |
213 | $options['link'] = true; | |
214 | break; | |
215 | } | |
216 | case 'i': | |
217 | case 'fonts': { | |
218 | $options['fonts'] = explode(',', $val); | |
219 | break; | |
220 | } | |
221 | case 'h': | |
222 | case 'help': | |
223 | default: { | |
224 | showHelp(); | |
225 | break; | |
226 | } | |
227 | } // end of switch | |
228 | } // end of while loop | |
229 | ||
230 | if (empty($options['fonts'])) { | |
231 | echo "ERROR: missing input fonts (try --help for usage)\n\n"; | |
232 | exit(2); | |
233 | } | |
234 | ||
235 | // check the output path | |
236 | if (!is_dir($options['outpath']) OR !is_writable($options['outpath'])) { | |
237 | echo "ERROR: Can't write to ".$options['outpath']."\n\n"; | |
238 | exit(3); | |
239 | } | |
240 | ||
241 | echo "\n>>> Converting fonts for TCPDF:\n"; | |
242 | ||
243 | echo '*** Output dir set to '.$options['outpath']."\n"; | |
244 | ||
245 | // check if there are conversion errors | |
246 | $errors = false; | |
247 | ||
248 | foreach ($options['fonts'] as $font) { | |
249 | $fontfile = realpath($font); | |
250 | $fontname = TCPDF_FONTS::addTTFfont($fontfile, $options['type'], $options['enc'], $options['flags'], $options['outpath'], $options['platid'], $options['encid'], $options['addcbbox'], $options['link']); | |
251 | if ($fontname === false) { | |
252 | $errors = true; | |
253 | echo "--- ERROR: can't add ".$font."\n"; | |
254 | } else { | |
255 | echo "+++ OK : ".$fontfile.' added as '.$fontname."\n"; | |
256 | } | |
257 | } | |
258 | ||
259 | if ($errors) { | |
260 | echo "--- Process completed with ERRORS!\n\n"; | |
261 | exit(4); | |
262 | } | |
263 | ||
264 | echo ">>> Process successfully completed!\n\n"; | |
265 | exit(0); | |
266 | ||
267 | //============================================================+ | |
268 | // END OF FILE | |
269 | //============================================================+ |