| @@ 300-418 (lines=119) @@ | ||
| 297 | * patch: optional patch for encoding * |
|
| 298 | * type: font type if fontfile is empty * |
|
| 299 | *******************************************************************************/ |
|
| 300 | function MakeFont($fontfile, $afmfile, $enc='cp1252', $patch=array(), $type='TrueType') |
|
| 301 | {
|
|
| 302 | //Generate a font definition file |
|
| 303 | if(get_magic_quotes_runtime()) |
|
| 304 | @set_magic_quotes_runtime(0); |
|
| 305 | ini_set('auto_detect_line_endings','1');
|
|
| 306 | if($enc) |
|
| 307 | {
|
|
| 308 | $map=ReadMap($enc); |
|
| 309 | foreach($patch as $cc=>$gn) |
|
| 310 | $map[$cc]=$gn; |
|
| 311 | } |
|
| 312 | else |
|
| 313 | $map=array(); |
|
| 314 | if(!file_exists($afmfile)) |
|
| 315 | die('<b>Error:</b> AFM file not found: '.$afmfile);
|
|
| 316 | $fm=ReadAFM($afmfile,$map); |
|
| 317 | if($enc) |
|
| 318 | $diff=MakeFontEncoding($map); |
|
| 319 | else |
|
| 320 | $diff=''; |
|
| 321 | $fd=MakeFontDescriptor($fm,empty($map)); |
|
| 322 | //Find font type |
|
| 323 | if($fontfile) |
|
| 324 | {
|
|
| 325 | $ext=strtolower(substr($fontfile,-3)); |
|
| 326 | if($ext=='ttf') |
|
| 327 | $type='TrueType'; |
|
| 328 | elseif($ext=='pfb') |
|
| 329 | $type='Type1'; |
|
| 330 | else |
|
| 331 | die('<b>Error:</b> unrecognized font file extension: '.$ext);
|
|
| 332 | } |
|
| 333 | else |
|
| 334 | {
|
|
| 335 | if($type!='TrueType' && $type!='Type1') |
|
| 336 | die('<b>Error:</b> incorrect font type: '.$type);
|
|
| 337 | } |
|
| 338 | //Start generation |
|
| 339 | $s='<?php'."\n"; |
|
| 340 | $s.='$type=\''.$type."';\n"; |
|
| 341 | $s.='$name=\''.$fm['FontName']."';\n"; |
|
| 342 | $s.='$desc='.$fd.";\n"; |
|
| 343 | if(!isset($fm['UnderlinePosition'])) |
|
| 344 | $fm['UnderlinePosition']=-100; |
|
| 345 | if(!isset($fm['UnderlineThickness'])) |
|
| 346 | $fm['UnderlineThickness']=50; |
|
| 347 | $s.='$up='.$fm['UnderlinePosition'].";\n"; |
|
| 348 | $s.='$ut='.$fm['UnderlineThickness'].";\n"; |
|
| 349 | $w=MakeWidthArray($fm); |
|
| 350 | $s.='$cw='.$w.";\n"; |
|
| 351 | $s.='$enc=\''.$enc."';\n"; |
|
| 352 | $s.='$diff=\''.$diff."';\n"; |
|
| 353 | $basename=substr(basename($afmfile),0,-4); |
|
| 354 | if($fontfile) |
|
| 355 | {
|
|
| 356 | //Embedded font |
|
| 357 | if(!file_exists($fontfile)) |
|
| 358 | die('<b>Error:</b> font file not found: '.$fontfile);
|
|
| 359 | if($type=='TrueType') |
|
| 360 | CheckTTF($fontfile); |
|
| 361 | $f=fopen($fontfile,'rb'); |
|
| 362 | if(!$f) |
|
| 363 | die('<b>Error:</b> Can\'t open '.$fontfile);
|
|
| 364 | $file=fread($f,filesize($fontfile)); |
|
| 365 | fclose($f); |
|
| 366 | if($type=='Type1') |
|
| 367 | {
|
|
| 368 | //Find first two sections and discard third one |
|
| 369 | $header=(ord($file[0])==128); |
|
| 370 | if($header) |
|
| 371 | {
|
|
| 372 | //Strip first binary header |
|
| 373 | $file=substr($file,6); |
|
| 374 | } |
|
| 375 | $pos=strpos($file,'eexec'); |
|
| 376 | if(!$pos) |
|
| 377 | die('<b>Error:</b> font file does not seem to be valid Type1');
|
|
| 378 | $size1=$pos+6; |
|
| 379 | if($header && ord($file[$size1])==128) |
|
| 380 | {
|
|
| 381 | //Strip second binary header |
|
| 382 | $file=substr($file,0,$size1).substr($file,$size1+6); |
|
| 383 | } |
|
| 384 | $pos=strpos($file,'00000000'); |
|
| 385 | if(!$pos) |
|
| 386 | die('<b>Error:</b> font file does not seem to be valid Type1');
|
|
| 387 | $size2=$pos-$size1; |
|
| 388 | $file=substr($file,0,$size1+$size2); |
|
| 389 | } |
|
| 390 | if(function_exists('gzcompress'))
|
|
| 391 | {
|
|
| 392 | $cmp=$basename.'.z'; |
|
| 393 | SaveToFile($cmp,gzcompress($file),'b'); |
|
| 394 | $s.='$file=\''.$cmp."';\n"; |
|
| 395 | echo 'Font file compressed ('.$cmp.')<br>';
|
|
| 396 | } |
|
| 397 | else |
|
| 398 | {
|
|
| 399 | $s.='$file=\''.basename($fontfile)."';\n"; |
|
| 400 | echo '<b>Notice:</b> font file could not be compressed (zlib extension not available)<br>'; |
|
| 401 | } |
|
| 402 | if($type=='Type1') |
|
| 403 | {
|
|
| 404 | $s.='$size1='.$size1.";\n"; |
|
| 405 | $s.='$size2='.$size2.";\n"; |
|
| 406 | } |
|
| 407 | else |
|
| 408 | $s.='$originalsize='.filesize($fontfile).";\n"; |
|
| 409 | } |
|
| 410 | else |
|
| 411 | {
|
|
| 412 | //Not embedded font |
|
| 413 | $s.='$file='."'';\n"; |
|
| 414 | } |
|
| 415 | $s.="?>\n"; |
|
| 416 | SaveToFile($basename.'.php',$s,'t'); |
|
| 417 | echo 'Font definition file generated ('.$basename.'.php'.')<br>';
|
|
| 418 | } |
|
| 419 | ?> |
|
| 420 | ||
| @@ 300-418 (lines=119) @@ | ||
| 297 | * patch: optional patch for encoding * |
|
| 298 | * type: font type if fontfile is empty * |
|
| 299 | *******************************************************************************/ |
|
| 300 | function MakeFont($fontfile, $afmfile, $enc='cp1252', $patch=array(), $type='TrueType') |
|
| 301 | {
|
|
| 302 | //Generate a font definition file |
|
| 303 | if(get_magic_quotes_runtime()) |
|
| 304 | @set_magic_quotes_runtime(0); |
|
| 305 | ini_set('auto_detect_line_endings','1');
|
|
| 306 | if($enc) |
|
| 307 | {
|
|
| 308 | $map=ReadMap($enc); |
|
| 309 | foreach($patch as $cc=>$gn) |
|
| 310 | $map[$cc]=$gn; |
|
| 311 | } |
|
| 312 | else |
|
| 313 | $map=array(); |
|
| 314 | if(!file_exists($afmfile)) |
|
| 315 | die('<b>Error:</b> AFM file not found: '.$afmfile);
|
|
| 316 | $fm=ReadAFM($afmfile,$map); |
|
| 317 | if($enc) |
|
| 318 | $diff=MakeFontEncoding($map); |
|
| 319 | else |
|
| 320 | $diff=''; |
|
| 321 | $fd=MakeFontDescriptor($fm,empty($map)); |
|
| 322 | //Find font type |
|
| 323 | if($fontfile) |
|
| 324 | {
|
|
| 325 | $ext=strtolower(substr($fontfile,-3)); |
|
| 326 | if($ext=='ttf') |
|
| 327 | $type='TrueType'; |
|
| 328 | elseif($ext=='pfb') |
|
| 329 | $type='Type1'; |
|
| 330 | else |
|
| 331 | die('<b>Error:</b> unrecognized font file extension: '.$ext);
|
|
| 332 | } |
|
| 333 | else |
|
| 334 | {
|
|
| 335 | if($type!='TrueType' && $type!='Type1') |
|
| 336 | die('<b>Error:</b> incorrect font type: '.$type);
|
|
| 337 | } |
|
| 338 | //Start generation |
|
| 339 | $s='<?php'."\n"; |
|
| 340 | $s.='$type=\''.$type."';\n"; |
|
| 341 | $s.='$name=\''.$fm['FontName']."';\n"; |
|
| 342 | $s.='$desc='.$fd.";\n"; |
|
| 343 | if(!isset($fm['UnderlinePosition'])) |
|
| 344 | $fm['UnderlinePosition']=-100; |
|
| 345 | if(!isset($fm['UnderlineThickness'])) |
|
| 346 | $fm['UnderlineThickness']=50; |
|
| 347 | $s.='$up='.$fm['UnderlinePosition'].";\n"; |
|
| 348 | $s.='$ut='.$fm['UnderlineThickness'].";\n"; |
|
| 349 | $w=MakeWidthArray($fm); |
|
| 350 | $s.='$cw='.$w.";\n"; |
|
| 351 | $s.='$enc=\''.$enc."';\n"; |
|
| 352 | $s.='$diff=\''.$diff."';\n"; |
|
| 353 | $basename=substr(basename($afmfile),0,-4); |
|
| 354 | if($fontfile) |
|
| 355 | {
|
|
| 356 | //Embedded font |
|
| 357 | if(!file_exists($fontfile)) |
|
| 358 | die('<b>Error:</b> font file not found: '.$fontfile);
|
|
| 359 | if($type=='TrueType') |
|
| 360 | CheckTTF($fontfile); |
|
| 361 | $f=fopen($fontfile,'rb'); |
|
| 362 | if(!$f) |
|
| 363 | die('<b>Error:</b> Can\'t open '.$fontfile);
|
|
| 364 | $file=fread($f,filesize($fontfile)); |
|
| 365 | fclose($f); |
|
| 366 | if($type=='Type1') |
|
| 367 | {
|
|
| 368 | //Find first two sections and discard third one |
|
| 369 | $header=(ord($file[0])==128); |
|
| 370 | if($header) |
|
| 371 | {
|
|
| 372 | //Strip first binary header |
|
| 373 | $file=substr($file,6); |
|
| 374 | } |
|
| 375 | $pos=strpos($file,'eexec'); |
|
| 376 | if(!$pos) |
|
| 377 | die('<b>Error:</b> font file does not seem to be valid Type1');
|
|
| 378 | $size1=$pos+6; |
|
| 379 | if($header && ord($file[$size1])==128) |
|
| 380 | {
|
|
| 381 | //Strip second binary header |
|
| 382 | $file=substr($file,0,$size1).substr($file,$size1+6); |
|
| 383 | } |
|
| 384 | $pos=strpos($file,'00000000'); |
|
| 385 | if(!$pos) |
|
| 386 | die('<b>Error:</b> font file does not seem to be valid Type1');
|
|
| 387 | $size2=$pos-$size1; |
|
| 388 | $file=substr($file,0,$size1+$size2); |
|
| 389 | } |
|
| 390 | if(function_exists('gzcompress'))
|
|
| 391 | {
|
|
| 392 | $cmp=$basename.'.z'; |
|
| 393 | SaveToFile($cmp,gzcompress($file),'b'); |
|
| 394 | $s.='$file=\''.$cmp."';\n"; |
|
| 395 | echo 'Font file compressed ('.$cmp.')<br>';
|
|
| 396 | } |
|
| 397 | else |
|
| 398 | {
|
|
| 399 | $s.='$file=\''.basename($fontfile)."';\n"; |
|
| 400 | echo '<b>Notice:</b> font file could not be compressed (zlib extension not available)<br>'; |
|
| 401 | } |
|
| 402 | if($type=='Type1') |
|
| 403 | {
|
|
| 404 | $s.='$size1='.$size1.";\n"; |
|
| 405 | $s.='$size2='.$size2.";\n"; |
|
| 406 | } |
|
| 407 | else |
|
| 408 | $s.='$originalsize='.filesize($fontfile).";\n"; |
|
| 409 | } |
|
| 410 | else |
|
| 411 | {
|
|
| 412 | //Not embedded font |
|
| 413 | $s.='$file='."'';\n"; |
|
| 414 | } |
|
| 415 | $s.="?>\n"; |
|
| 416 | SaveToFile($basename.'.php',$s,'t'); |
|
| 417 | echo 'Font definition file generated ('.$basename.'.php'.')<br>';
|
|
| 418 | } |
|
| 419 | ?> |
|
| 420 | ||