PluginProbe
PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin / trunk
PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin vtrunk
trunk 1.5 1.6 1.7 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.1 All 71 releases
pdf-print / mpdf / utils / font_coverage.php

font_coverage.php in PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin trunk, at mpdf/utils/font_coverage.php

251 lines 7.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /* This script prints out the Unicode coverage of all TrueType font files
4 in your font directory.
5 Point your browser to
6 http://your.domain/your_path_to _mpdf/utils/font_coverage.php
7 By default this will examine the folder /ttfonts/ (or the default font
8 directory defined by _MPDF_TTFONTPATH.
9 You can optionally define an alternative folder to examine by setting
10 the variable below (must be a relative path, or filesystem path):
11 */
12
13
14 $checkdir = '';
15
16 //////////////////////////////////
17
18
19 set_time_limit(600);
20 ini_set("memory_limit","256M");
21
22 //==============================================================
23 //==============================================================
24 include("../mpdf.php");
25
26 $mpdf=new mPDF('','A4-L','','',10,10,10,10);
27 $mpdf->SetDisplayMode('fullpage');
28 $mpdf->useSubstitutions = true;
29 $mpdf->debug = true;
30 $mpdf->simpleTables = true;
31 if ($checkdir) {
32 $ttfdir = $checkdir;
33 } else {
34 $ttfdir = _MPDF_TTFONTPATH;
35 }
36
37
38
39 $mqr=ini_get("magic_quotes_runtime");
40 if ($mqr) { set_magic_quotes_runtime(0); }
41 if (!class_exists('TTFontFile_Analysis', false)) { include(_MPDF_PATH .'classes/ttfontsuni_analysis.php'); }
42
43 //==============================================================
44 $smp = true;
45 $maxt = 131071;
46 //==============================================================
47 //==============================================================
48 $unifile = file('UnicodeData.txt');
49 $unichars = array();
50 foreach($unifile AS $line) {
51 if (preg_match('/<control>/',$line,$m)) {
52 $rangename = '';
53 continue;
54 }
55 else if (preg_match('/^([12]{0,1}[0-9A-Za-z]{4});<(.*?), Last>/',$line,$m)) {
56 if ($rangename && $rangename == $m[2]) {
57 $endrange = hexdec($m[1]);
58 for ($i=$startrange;$i<=$endrange; $i++) {
59 $unichars[$i] = $i;
60 }
61 }
62 $rangename = '';
63 }
64 else if (preg_match('/^([12]{0,1}[0-9A-Za-z]{4});<(.*?), First>/',$line,$m)) {
65 $startrange = hexdec($m[1]);
66 $rangename = $m[2];
67 }
68 else if (preg_match('/^([12]{0,1}[0-9A-Za-z]{4});/',$line,$m)) {
69 $unichars[hexdec($m[1])] = hexdec($m[1]);
70 $rangename = '';
71 }
72 }
73
74 // loads array $unicode_ranges
75 include('UnicodeRanges.php');
76 //==============================================================
77 $html = '<html><head><style>td { border: 0.1mm solid #555555; }
78 body { font-weight: normal; font-family: helvetica;font-size:8pt; }
79 td { font-family: helvetica;font-size:8pt; vertical-align: top;}
80 </style></head><body>';
81
82 //==============================================================
83 $ff = scandir($ttfdir);
84 $tempfontdata = array();
85 foreach($ff AS $f) {
86 $ttf = new TTFontFile_Analysis();
87 $ret = array();
88 $isTTC = false;
89 if (strtolower(substr($f,-4,4))=='.ttf' || strtolower(substr($f,-4,4))=='.otf') {
90 $ret[] = $ttf->extractCoreInfo($ttfdir.$f);
91 }
92 for ($i=0; $i<count($ret); $i++) {
93 if (is_array($ret[$i])) {
94 $tfname = $ret[$i][0];
95 $bold = $ret[$i][1];
96 $italic = $ret[$i][2];
97 $fname = strtolower($tfname );
98 $fname = preg_replace('/[ ()]/','',$fname );
99 //$tempfonttrans[$tfname] = $fname;
100 $style = '';
101 if ($bold) { $style .= 'B'; }
102 if ($italic) { $style .= 'I'; }
103 if (!$style) {
104 $tempfontdata[$fname]['file'] = $f;
105 if ($isTTC) {
106 $tempfontdata[$fname]['TTCfontID'] = $ret[$i][4];
107 }
108 }
109 }
110 }
111 unset($ttf);
112
113 }
114
115 $fullcovers = array();
116 $nearlycovers = array();
117 ksort($tempfontdata);
118 $ningroup = 14;
119 $nofgroups = ceil(count($unicode_ranges)/$ningroup);
120
121 //==============================================================
122
123
124 for ($urgp = 0; $urgp < $nofgroups; $urgp++) {
125
126
127 $html .= '<table cellpadding="2" cellspacing="0" style="page-break-inside:avoid; text-align:center; border-collapse: collapse; ">';
128 $html .= '<thead><tr><td></td>';
129
130 foreach($unicode_ranges AS $urk => $ur) {
131 if ($urk >= ($urgp*$ningroup) && $urk < (($urgp+1)*$ningroup)) {
132 $rangekey = $urk;
133 $range = $ur['range'];
134 $rangestart = $ur['starthex'];
135 $rangeend = $ur['endhex'];
136 $html .= '<td style="font-family:helvetica;font-size:8pt;font-weight:bold;">'.strtoupper($range).' (U+'.$rangestart .'-U+'.$rangeend.')</td>';
137 }
138 }
139 $html .= '</tr></thead>';
140
141
142 foreach ($tempfontdata AS $fname => $v) {
143 $cw = '';
144 if (file_exists((_MPDF_TTFONTDATAPATH.$fname.'.cw.dat'))) { $cw = file_get_contents(_MPDF_TTFONTDATAPATH.$fname.'.cw.dat'); }
145 else {
146 $mpdf->fontdata[$fname]['R'] = $tempfontdata[$fname]['file'];
147 $mpdf->AddFont($fname);
148 $cw = file_get_contents(_MPDF_TTFONTDATAPATH.$fname.'.cw.dat');
149 }
150 if (!$cw) {
151 continue;
152 die("Font data not available for $fname");
153 }
154
155 $counter=0;
156 $max = $maxt;
157
158 // create HTML content
159 $html .= '<tr>';
160 $html .= '<td>'.$fname.'</td>';
161
162 foreach($unicode_ranges AS $urk => $ur) {
163 if ($urk >= ($urgp*$ningroup) && $urk < (($urgp+1)*$ningroup)) {
164 if ($ur['pua'] || $ur['reserved'] || $ur['control']) {
165 $html .= '<td style="background-color: #000000;"></td>';
166 }
167 else {
168 $rangekey = $urk;
169 $range = $ur['range'];
170 $rangestart = $ur['starthex'];
171 $rangeend = $ur['endhex'];
172 $rangestartdec = $ur['startdec'];
173 $rangeenddec = $ur['enddec'];
174 $uniinrange = 0;
175 $fontinrange = 0;
176 for ($i=$rangestartdec; $i<=$rangeenddec; $i++) {
177 //if (isset($cw[$i])) { $fontinrange++; }
178 if ($mpdf->_charDefined($cw, $i)) { $fontinrange++; }
179 if (isset($unichars[$i])) { $uniinrange++; }
180 }
181 if ($uniinrange) {
182 if ($fontinrange) {
183 $pc = ($fontinrange/$uniinrange);
184 $str = '('.$fontinrange.'/'.$uniinrange.')';
185 if ($pc==1) {
186 $fullcovers[$urk][] = $fname;
187 $html .= '<td style="background-color: #00FF00;"></td>';
188 }
189 else if ($pc>1) {
190 $fullcovers[$urk][] = $fname;
191 $html .= '<td style="background-color: #00FF00;">'.$str.'</td>';
192 }
193 else if ($pc>=0.9) {
194 $html .= '<td style="background-color: #AAFFAA;">'.$str.'</td>';
195 $nearlycovers[$urk][] = $fname;
196 }
197 else if ($pc>0.75) { $html .= '<td style="background-color: #00FFAA;">'.$str.'</td>'; }
198 else if ($pc>0.5) { $html .= '<td style="background-color: #AAAAFF;">'.$str.'</td>'; }
199 else if ($pc>0.25) { $html .= '<td style="background-color: #FFFFAA;">'.$str.'</td>'; }
200 else { $html .= '<td style="background-color: #FFAAAA;">'.$str.'</td>'; }
201 }
202 else { $html .= '<td style="background-color: #555555;">(0/0)</td>'; }
203 }
204 else { $html .= '<td style="background-color: #000000;"></td>'; }
205 }
206 }
207 }
208
209
210 $html .= '</tr>';
211
212 }
213 //==============================================================
214 $html .= '</table><pagebreak />';
215 }
216
217 $html .= '<h4>Fonts with full coverage of Unicode Ranges</h4>';
218 $html .= '<table>';
219 //$html .= '<tr><td></td><td></td></tr>';
220 foreach($unicode_ranges AS $urk => $ur) {
221 if ($ur['pua'] || $ur['reserved'] || $ur['control']) { continue; }
222 $rangekey = $urk;
223 $range = $ur['range'];
224 $rangestart = $ur['starthex'];
225 $rangeend = $ur['endhex'];
226 $ext = $ext2 = '';
227 if ($ur['combining']) { $ext = 'background-color:#DDDDFF;'; $ext2 = '<br /><span style="color:#AA0000">Special positioning required</span>'; }
228 if ($ur['vertical']) { $ext = 'background-color:#FFDDDD;'; $ext2 = '<br /><span style="color:#AA0000">Vertical positioning required</span>'; }
229 if ($ur['special']) { $ext = 'background-color:#FFDDDD;'; $ext2 = '<br /><span style="color:#AA0000">Special processing required</span>'; }
230
231
232 $html .= '<tr><td style="font-family:helvetica;font-size:8pt;font-weight:bold;'.$ext.'">'.strtoupper($range).' (U+'.$rangestart .'-U+'.$rangeend.')'.$ext2.'</td>';
233 $arr = $fullcovers[$urk];
234 $narr = $nearlycovers[$urk];
235 if (is_array($arr)) { $html .= '<td>'. implode(', ',$arr). '</td></tr>'; }
236 else if (is_array($narr)) { $html .= '<td style="background-color: #AAAAAA;">'. implode(', ',$narr). ' (>90%)</td></tr>'; }
237 else { $html .= '<td style="background-color: #555555;"> </td></tr>'; }
238 }
239 $html.= '</table>';
240
241
242 //==============================================================
243 echo $html;
244
245 exit;
246
247 //==============================================================
248 //==============================================================
249 //==============================================================
250 //==============================================================
251