Primer commit del sistema avantika sin cambios
This commit is contained in:
306
pdf/include/ttf_info.cls.php
Executable file
306
pdf/include/ttf_info.cls.php
Executable file
@@ -0,0 +1,306 @@
|
||||
<?php
|
||||
/**
|
||||
* ttfInfo class
|
||||
* Retrieve data stored in a TTF files 'name' table
|
||||
*
|
||||
* @original author Unknown
|
||||
* found at http://www.phpclasses.org/browse/package/2144.html
|
||||
*
|
||||
* @ported for used on http://www.nufont.com
|
||||
* @author Jason Arencibia
|
||||
* @version 0.2
|
||||
* @copyright (c) 2006 GrayTap Media
|
||||
* @website http://www.graytap.com
|
||||
* @license GPL 2.0
|
||||
* @access public
|
||||
*
|
||||
* @todo: Make it Retrieve additional information from other tables
|
||||
*
|
||||
*/
|
||||
class TTF_Info {
|
||||
/**
|
||||
* variable $_dirRestriction
|
||||
* Restrict the resource pointer to this directory and above.
|
||||
* Change to 1 for to allow the class to look outside of it current directory
|
||||
* @protected
|
||||
* @var int
|
||||
*/
|
||||
protected $_dirRestriction = true;
|
||||
/**
|
||||
* variable $_dirRestriction
|
||||
* Restrict the resource pointer to this directory and above.
|
||||
* Change to 1 for nested directories
|
||||
* @protected
|
||||
* @var int
|
||||
*/
|
||||
protected $_recursive = true;
|
||||
|
||||
/**
|
||||
* variable $fontsdir
|
||||
* This is to declare this variable as protected
|
||||
* don't edit this!!!
|
||||
* @protected
|
||||
*/
|
||||
protected $fontsdir;
|
||||
/**
|
||||
* variable $filename
|
||||
* This is to declare this varable as protected
|
||||
* don't edit this!!!
|
||||
* @protected
|
||||
*/
|
||||
protected $filename;
|
||||
|
||||
/**
|
||||
* function setFontFile()
|
||||
* set the filename
|
||||
* @public
|
||||
* @param string $data the new value
|
||||
* @return object reference to this
|
||||
*/
|
||||
public function setFontFile($data)
|
||||
{
|
||||
if ($this->_dirRestriction && preg_match('[\.\/|\.\.\/]', $data))
|
||||
{
|
||||
$this->exitClass('Error: Directory restriction is enforced!');
|
||||
}
|
||||
|
||||
$this->filename = $data;
|
||||
return $this;
|
||||
} // public function setFontFile
|
||||
|
||||
/**
|
||||
* function setFontsDir()
|
||||
* set the Font Directory
|
||||
* @public
|
||||
* @param string $data the new value
|
||||
* @return object referrence to this
|
||||
*/
|
||||
public function setFontsDir($data)
|
||||
{
|
||||
if ($this->_dirRestriction && preg_match('[\.\/|\.\.\/]', $data))
|
||||
{
|
||||
$this->exitClass('Error: Directory restriction is enforced!');
|
||||
}
|
||||
|
||||
$this->fontsdir = $data;
|
||||
return $this;
|
||||
} // public function setFontsDir
|
||||
|
||||
/**
|
||||
* function readFontsDir()
|
||||
* @public
|
||||
* @return information contained in the TTF 'name' table of all fonts in a directory.
|
||||
*/
|
||||
public function readFontsDir()
|
||||
{
|
||||
if (empty($this->fontsdir)) { $this->exitClass('Error: Fonts Directory has not been set with setFontsDir().'); }
|
||||
if (empty($this->backupDir)){ $this->backupDir = $this->fontsdir; }
|
||||
|
||||
//$this->array = array();
|
||||
$d = dir($this->fontsdir);
|
||||
|
||||
while (false !== ($e = $d->read()))
|
||||
{
|
||||
if($e != '.' && $e != '..')
|
||||
{
|
||||
$e = $this->fontsdir . $e;
|
||||
if($this->_recursive && is_dir($e))
|
||||
{
|
||||
$this->setFontsDir($e);
|
||||
$this->readFontsDir();
|
||||
}
|
||||
else if ($this->is_ttf($e) === true)
|
||||
{
|
||||
$this->setFontFile($e);
|
||||
$this->array[] = $this->getFontInfo();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($this->backupDir)){ $this->fontsdir = $this->backupDir; }
|
||||
|
||||
$d->close();
|
||||
return $this;
|
||||
} // public function readFontsDir
|
||||
|
||||
/**
|
||||
* function setProtectedVar()
|
||||
* @public
|
||||
* @param string $var the new variable
|
||||
* @param string $data the new value
|
||||
* @return object reference to this
|
||||
|
||||
* DISABLED, NO REAL USE YET
|
||||
|
||||
public function setProtectedVar($var, $data)
|
||||
{
|
||||
if ($var == 'filename')
|
||||
{
|
||||
$this->setFontFile($data);
|
||||
} else {
|
||||
//if (isset($var) && !empty($data))
|
||||
$this->$var = $data;
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
*/
|
||||
/**
|
||||
* function getFontInfo()
|
||||
* @public
|
||||
* @return information contained in the TTF 'name' table.
|
||||
*/
|
||||
public function getFontInfo()
|
||||
{
|
||||
$fd = fopen ($this->filename, "r");
|
||||
$this->text = fread ($fd, filesize($this->filename));
|
||||
fclose ($fd);
|
||||
|
||||
$number_of_tables = hexdec($this->dec2ord($this->text[4]).$this->dec2ord($this->text[5]));
|
||||
|
||||
for ($i=0;$i<$number_of_tables;$i++)
|
||||
{
|
||||
$tag = $this->text[12+$i*16].$this->text[12+$i*16+1].$this->text[12+$i*16+2].$this->text[12+$i*16+3];
|
||||
|
||||
if ($tag == 'name')
|
||||
{
|
||||
$this->ntOffset = hexdec(
|
||||
$this->dec2ord($this->text[12+$i*16+8]).$this->dec2ord($this->text[12+$i*16+8+1]).
|
||||
$this->dec2ord($this->text[12+$i*16+8+2]).$this->dec2ord($this->text[12+$i*16+8+3]));
|
||||
|
||||
$offset_storage_dec = hexdec($this->dec2ord($this->text[$this->ntOffset+4]).$this->dec2ord($this->text[$this->ntOffset+5]));
|
||||
$number_name_records_dec = hexdec($this->dec2ord($this->text[$this->ntOffset+2]).$this->dec2ord($this->text[$this->ntOffset+3]));
|
||||
}
|
||||
}
|
||||
|
||||
$storage_dec = $offset_storage_dec + $this->ntOffset;
|
||||
$storage_hex = strtoupper(dechex($storage_dec));
|
||||
|
||||
for ($j=0;$j<$number_name_records_dec;$j++)
|
||||
{
|
||||
$platform_id_dec = hexdec($this->dec2ord($this->text[$this->ntOffset+6+$j*12+0]).$this->dec2ord($this->text[$this->ntOffset+6+$j*12+1]));
|
||||
$name_id_dec = hexdec($this->dec2ord($this->text[$this->ntOffset+6+$j*12+6]).$this->dec2ord($this->text[$this->ntOffset+6+$j*12+7]));
|
||||
$string_length_dec = hexdec($this->dec2ord($this->text[$this->ntOffset+6+$j*12+8]).$this->dec2ord($this->text[$this->ntOffset+6+$j*12+9]));
|
||||
$string_offset_dec = hexdec($this->dec2ord($this->text[$this->ntOffset+6+$j*12+10]).$this->dec2ord($this->text[$this->ntOffset+6+$j*12+11]));
|
||||
|
||||
if (!empty($name_id_dec) and empty($font_tags[$name_id_dec]))
|
||||
{
|
||||
for($l=0;$l<$string_length_dec;$l++)
|
||||
{
|
||||
if (ord($this->text[$storage_dec+$string_offset_dec+$l]) == '0') { continue; }
|
||||
else { $font_tags[$name_id_dec] .= ($this->text[$storage_dec+$string_offset_dec+$l]); }
|
||||
}
|
||||
}
|
||||
}
|
||||
return $font_tags;
|
||||
} // public function getFontInfo
|
||||
|
||||
/**
|
||||
* function getCopyright()
|
||||
* @public
|
||||
* @return 'Copyright notice' contained in the TTF 'name' table at index 0
|
||||
*/
|
||||
public function getCopyright()
|
||||
{
|
||||
$this->info = $this->getFontInfo();
|
||||
return $this->info[0];
|
||||
} // public function getCopyright
|
||||
|
||||
/**
|
||||
* function getFontFamily()
|
||||
* @public
|
||||
* @return 'Font Family name' contained in the TTF 'name' table at index 1
|
||||
*/
|
||||
public function getFontFamily()
|
||||
{
|
||||
$this->info = $this->getFontInfo();
|
||||
return $this->info[1];
|
||||
} // public function getFontFamily
|
||||
|
||||
/**
|
||||
* function getFontSubFamily()
|
||||
* @public
|
||||
* @return 'Font Subfamily name' contained in the TTF 'name' table at index 2
|
||||
*/
|
||||
public function getFontSubFamily()
|
||||
{
|
||||
$this->info = $this->getFontInfo();
|
||||
return $this->info[2];
|
||||
} // public function getFontSubFamily
|
||||
|
||||
/**
|
||||
* function getFontId()
|
||||
* @public
|
||||
* @return 'Unique font identifier' contained in the TTF 'name' table at index 3
|
||||
*/
|
||||
public function getFontId()
|
||||
{
|
||||
$this->info = $this->getFontInfo();
|
||||
return $this->info[3];
|
||||
} // public function getFontId
|
||||
|
||||
/**
|
||||
* function getFullFontName()
|
||||
* @public
|
||||
* @return 'Full font name' contained in the TTF 'name' table at index 4
|
||||
*/
|
||||
public function getFullFontName()
|
||||
{
|
||||
$this->info = $this->getFontInfo();
|
||||
return $this->info[4];
|
||||
} // public function getFullFontName
|
||||
|
||||
/**
|
||||
* function dec2ord()
|
||||
* Used to lessen redundant calls to multiple functions.
|
||||
* @protected
|
||||
* @return object
|
||||
*/
|
||||
protected function dec2ord($dec)
|
||||
{
|
||||
return $this->dec2hex(ord($dec));
|
||||
} // protected function dec2ord
|
||||
|
||||
/**
|
||||
* function dec2hex()
|
||||
* private function to perform Hexadecimal to decimal with proper padding.
|
||||
* @protected
|
||||
* @return object
|
||||
*/
|
||||
protected function dec2hex($dec)
|
||||
{
|
||||
return str_repeat('0', 2-strlen(($hex=strtoupper(dechex($dec))))) . $hex;
|
||||
} // protected function dec2hex
|
||||
|
||||
/**
|
||||
* function dec2hex()
|
||||
* private function to perform Hexadecimal to decimal with proper padding.
|
||||
* @protected
|
||||
* @return object
|
||||
*/
|
||||
protected function exitClass($message)
|
||||
{
|
||||
echo $message;
|
||||
exit;
|
||||
} // protected function dec2hex
|
||||
|
||||
/**
|
||||
* function dec2hex()
|
||||
* private helper function to test in the file in question is a ttf.
|
||||
* @protected
|
||||
* @return object
|
||||
*/
|
||||
protected function is_ttf($file)
|
||||
{
|
||||
$ext = explode('.', $file);
|
||||
$ext = $ext[count($ext)-1];
|
||||
return preg_match("/ttf$/i",$ext) ? true : false;
|
||||
} // protected function is_ttf
|
||||
} // class ttfInfo
|
||||
|
||||
function getFontInfo($resource)
|
||||
{
|
||||
$ttfInfo = new TTF_Info;
|
||||
$ttfInfo->setFontFile($resource);
|
||||
return $ttfInfo->getFontInfo();
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user