PluginProbe
PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin / 1.7.2
PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin v1.7.2
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 1.7.2, at mpdf/utils/font_coverage.php

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