Update with command process

This commit is contained in:
Michael RICOIS 2013-10-17 13:58:43 +00:00
parent 078e2e6060
commit 5be0866fe2
560 changed files with 462836 additions and 26 deletions

View File

@ -49,7 +49,45 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
Zend_Registry::set('firebug', $logger);
}
protected function _initDb(){}
protected function _initDb()
{
$c = new Zend_Config($this->getOptions());
try {
$db = Zend_Db::factory($c->profil->db->sdv1);
$db->getConnection();
} catch ( Exception $e ) {
if (APPLICATION_ENV == 'development') {
echo '<pre>'; print_r($e); echo '</pre>';
} else {
echo "Le service rencontre actuellement un problème technique.";
}
exit;
}
protected function _initCache(){}
/**
* Set the default adapter to use with all model
*/
Zend_Db_Table::setDefaultAdapter($db);
/**
* Set Firebug Database profiler
*/
if (APPLICATION_ENV == 'development') {
$profiler = new Zend_Db_Profiler_Firebug('All DB Queries');
$profiler->setEnabled(true);
$db->setProfiler($profiler);
}
}
protected function _initCache()
{
//MetadataCache pour la base de données
$cache = Zend_Cache::factory(
'Core',
'Apc',
array('lifetime' => 28800,'automatic_serialization' => true),
array()
);
Zend_Db_Table_Abstract::setDefaultMetadataCache($cache);
}
}

View File

@ -13,6 +13,27 @@ resources.view.basePath = APPLICATION_PATH "/views"
autoloaderNamespaces[] = "Application_"
autoloaderNamespaces[] = "Scores_"
; Scores configuration
profil.server.name = local
profil.webservice.location = sdsrvdev01
profil.mail.method = smtp
profil.mail.smtp_host = smtp.free.fr
profil.mail.email.support = supportdev@scores-decisions.com
profil.mail.email.supportdev = supportdev@scores-decisions.com
profil.mail.email.contact = supportdev@scores-decisions.com
profil.mail.email.production = supportdev@scores-decisions.com
profil.path.cache = APPLICATION_PATH "/../data/cache"
profil.path.files = APPLICATION_PATH "/../data/files"
profil.path.pages = APPLICATION_PATH "/../data/pages"
profil.path.data = "c:\Users\mricois\www\data\partner"
profil.wkhtmltopdf.path = "c:\Users\mricois\www\data\wkhtml\windows\wkhtmltopdf.exe"
profil.db.sdv1.adapter=mysqli
profil.db.sdv1.params.host=127.0.0.1
profil.db.sdv1.params.username=root
profil.db.sdv1.params.password=bj10sx
profil.db.sdv1.params.dbname=partner
profil.db.sdv1.params.driver_options.MYSQLI_INIT_COMMAND = "SET NAMES utf8"
[staging : production]
resources.frontController.params.displayExceptions = 1

View File

@ -1,34 +1,219 @@
<?php
class ReportController extends Zend_Controller_Action
{
public function init()
{
//Override
$this->view->inlineScript()
->appendFile('/libs/jquery-2.0.3.min.js', 'text/javascript')
->appendFile('/libs/bootstrap-v3.0.0/js/bootstrap.min.js', 'text/javascript');
}
/**
*
*/
public function indexAction()
{
$this->_helper->layout()->disableLayout();
$request = $this->getRequest();
//Get parameters
$siren = $request->getParam('siren');
//Define title
//Control the prestation with the database - inject additionnaly parameters
//Launch report
$report = new Scores_Partner_Report('indiscore3', '552144503', 'mricois', 'ju2loh6o');
$html = $report->getContent();
file_put_contents('test.html', $html);
//Write links to get the HTML and/or PDF
//Get parameters
$siren = $request->getParam('siren');
$this->view->SirenExiste = false;
if (intval($siren)>100) {
//Vérifier que le SIREN existe en base
require_once 'Scores/WsScores.php';
$ws = new WsScores('mricois', 'ju2loh6o');
$response = $ws->getIdentiteLight($siren);
if ($response !== false) {
$this->view->Siren = $response->Siren;
$this->view->RaisonSociale = $response->Nom;
$this->view->SirenExiste = true;
$this->view->ButtonUrl = $this->view->url(array(
'controller'=>'report',
'action'=>'cmd',
'siren'=>$response->Siren
));
}
}
}
/**
*
*/
public function cmdAction()
{
$this->_helper->layout()->disableLayout();
$request = $this->getRequest();
$siren = $request->getParam('siren');
//Affichage du formulaires
$form = new Application_Form_Command();
if ( $request->isPost() ) {
$values = $request->getPost();
$form->populate($values);
if ( $form->isValid($values) ) {
//Sauvegarde des informations
$commandM = new Application_Model_Command();
try {
$commandM->insert($form->getValues());
//Passage à la page suivante
$url = $this->view->url(array(
'controller'=>'report',
'action'=>'deliver',
'id' => $form->getValue('cmdId'),
));
$this->redirect($url);
} catch (Zend_Db_Adapter_Exception $e) {
$this->view->msg = "Impossible de passer la commande.";
}
}
} else {
if (intval($siren)>100) {
//Get report
$report = new Scores_Partner_Report('indiscore3', $siren, 'mricois', 'ju2loh6o');
$html = $report->getContent();
if ( $html !== false ) {
$c = Zend_Registry::get('config');
$pathCmd = $c->profil->path->data;
$id = uniqid();
//Write the file (name with commande id)
if ( file_put_contents($pathCmd . DIRECTORY_SEPARATOR . $id.'.html', $html) ) {
$this->view->CmdID = $id;
}
}
}
}
$this->view->form = $form;
$this->view->siren = $siren;
}
public function deliverAction()
{
$this->_helper->layout()->disableLayout();
$request = $this->getRequest();
$c = Zend_Registry::get('config');
$pathCmd = $c->profil->path->data;
//Commande ID
$cmdId = $request->getParam('id');
//Est ce que la commande existe
$commandM = new Application_Model_Command();
$where = $commandM->select()->where('cmdId=?', $cmdId);
$row = $commandM->fetchRow($where);
if ( $row!==null ) {
$infos = new stdClass();
$infos->NumCommande = $row->cmdId;
$infos->DateCommande = $row->dateInsert;
$infos->RaisonSociale = $row->rs;
$infos->NomPrenom = $row->nom . ' ' . $row->prenom;
$infos->Adresse = $row->adresse;
$infos->CpVille = $row->cp . ' ' . $row->ville;
$infos->Tel = $row->tel;
$infos->Mob = $row->mobile;
$this->view->Infos = $infos;
if ( file_exists($pathCmd . DIRECTORY_SEPARATOR . $row->cmdId . '.html') ) {
//Define links to get the HTML and/or PDF
$links = array(
0 => array(
'title' => 'Fichier PDF',
'desc' => 'Télécharger le bilan financier',
'url' => $this->view->url(array(
'controller'=>'report',
'action'=>'pdf',
'id' => $row->cmdId
))
),
);
}
}
}
/**
* Display in blank page the html
*/
public function htmlAction()
{
$this->_helper->layout()->disableLayout();
}
/**
* Distribute pdf file
*/
public function pdfAction()
{
//Unlink the file
$this->_helper->layout()->disableLayout();
//if HTML exist, make a pdf
$request = $this->getRequest();
$file = false;
//Commande ID
$cmdId = $request->getParam('id');
//Est ce que la commande existe
$commandM = new Application_Model_Command();
$where = $commandM->select()->where('cmdId=?', $cmdId);
$row = $commandM->fetchRow($where);
if ( $row !== null ) {
//Copy html from command directory to temporary storage
$c = Zend_Registry::get('config');
$source = $c->profil->path->data . DIRECTORY_SEPARATOR . $row->cmdId . '.html';
$dest = $c->profil->path->pages . DIRECTORY_SEPARATOR . $row->cmdId . '.html';
if ( copy($source, $dest) ) {
$wkthml = new Scores_Wkhtml_Pdf();
$file = $wkhtml->exec($dest);
}
}
//Distribute it to the output
if ( $file ) {
if( file_exists($file) && filesize($file)>0 ) {
header('Content-Transfer-Encoding: none');
header('Content-type: ' . $content_type.'');
header('Content-Length: ' . filesize($file));
header('Content-MD5: ' . base64_encode(md5_file($file)));
header('Content-Disposition: filename="' . basename($file) . '"');
header('Cache-Control: private, max-age=0, must-revalidate');
header('Pragma: public');
ini_set('zlib.output_compression', '0');
echo file_get_contents($file);
} else {
echo "Erreur lors de l'affichage du fichier.";
}
} else {
echo "Erreur lors de la génération du fichier.";
}
}
}

View File

@ -0,0 +1,5 @@
<?php
class Application_Model_Command extends Zend_Db_Table_Abstract
{
protected $_name = 'command';
}

View File

@ -1,4 +1,4 @@
<!-- Site footer -->
<!-- Site footer -->
<div class="footer">
<p>&copy; Scores & Décisions <?=date('Y')?></p>
</div>

View File

@ -0,0 +1,155 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="viewport" content="width=device-width, initial-scale=1.0" >
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
<meta http-equiv="Content-Language" content="fr-FR" >
<title>Kompass - Achat Bilan Financier</title>
<link href="/libs/bootstrap-v3.0.0/css/bootstrap.min.css" media="all" rel="stylesheet" type="text/css" >
<link href="/themes/default/css/justified-nav.css" media="all" rel="stylesheet" type="text/css" >
<!--[if lt IE 9]> <script type="text/javascript" src="/libs/html5shiv.js"></script><![endif]-->
<!--[if lt IE 9]> <script type="text/javascript" src="/libs/respond.min.js"></script><![endif]-->
</head>
<body>
<div class="container">
<div class="page-header">
<h2>Achat Bilan Financier <small>Commande</small></h2>
</div>
<?php if ( $this->siren && $this->CmdID ) {?>
<div><?=$this->msg?></div>
<form role="form" name="commande" action="<?=$this->form->getAction()?>" method="<?=$this->form->getMethod()?>">
<input type="hidden" name="cmdId" value="<?=$this->CmdID?>" />
<input type="hidden" name="siren" value="<?=$this->siren?>" />
<div class="form-group">
<label><?=$this->form->email->getLabel()?></label>
<input type="email" name="<?=$this->form->email->getName()?>" class="form-control" value="<?=$this->form->email->getValue()?>" placeholder="<?=$this->form->email->getDescription()?>">
<?php if ($this->form->email->hasErrors()) {?>
<div class="alert alert-danger">
<?php foreach($this->form->email->getMessages() as $msg) {?>
<?=$msg?><br/>
<?php }?>
</div>
<?php }?>
</div>
<div class="form-group">
<label><?=$this->form->rs->getLabel()?></label>
<input type="text" name="<?=$this->form->rs->getName()?>" class="form-control" value="<?=$this->form->rs->getValue()?>" placeholder="<?=$this->form->rs->getDescription()?>">
<?php if ($this->form->rs->hasErrors()) {?>
<div class="alert alert-danger">
<?php foreach($this->form->rs->getMessages() as $msg) {?>
<?=$msg?><br/>
<?php }?>
</div>
<?php }?>
</div>
<div class="form-group">
<label><?=$this->form->nom->getLabel()?></label>
<input type="text" name="<?=$this->form->nom->getName()?>" class="form-control" value="<?=$this->form->nom->getValue()?>" placeholder="<?=$this->form->nom->getDescription()?>">
<?php if ($this->form->nom->hasErrors()) {?>
<div class="alert alert-danger">
<?php foreach($this->form->nom->getMessages() as $msg) {?>
<?=$msg?><br/>
<?php }?>
</div>
<?php }?>
</div>
<div class="form-group">
<label><?=$this->form->prenom->getLabel()?></label>
<input type="text" name="<?=$this->form->prenom->getName()?>" class="form-control" value="<?=$this->form->prenom->getValue()?>" placeholder="<?=$this->form->prenom->getDescription()?>">
<?php if ($this->form->prenom->hasErrors()) {?>
<div class="alert alert-danger">
<?php foreach($this->form->prenom->getMessages() as $msg) {?>
<?=$msg?><br/>
<?php }?>
</div>
<?php }?>
</div>
<div class="form-group">
<label><?=$this->form->adresse->getLabel()?></label>
<input type="text" name="<?=$this->form->adresse->getName()?>" class="form-control" value="<?=$this->form->adresse->getValue()?>" placeholder="<?=$this->form->adresse->getDescription()?>">
<?php if ($this->form->adresse->hasErrors()) {?>
<div class="alert alert-danger">
<?php foreach($this->form->adresse->getMessages() as $msg) {?>
<?=$msg?><br/>
<?php }?>
</div>
<?php }?>
</div>
<div class="form-group">
<label><?=$this->form->cp->getLabel()?></label>
<input type="text" name="<?=$this->form->cp->getName()?>" class="form-control" value="<?=$this->form->cp->getValue()?>" placeholder="<?=$this->form->cp->getDescription()?>">
<?php if ($this->form->cp->hasErrors()) {?>
<div class="alert alert-danger">
<?php foreach($this->form->cp->getMessages() as $msg) {?>
<?=$msg?><br/>
<?php }?>
</div>
<?php }?>
</div>
<div class="form-group">
<label><?=$this->form->ville->getLabel()?></label>
<input type="text" name="<?=$this->form->ville->getName()?>" class="form-control" value="<?=$this->form->ville->getValue()?>" placeholder="<?=$this->form->ville->getDescription()?>">
<?php if ($this->form->ville->hasErrors()) {?>
<div class="alert alert-danger">
<?php foreach($this->form->ville->getMessages() as $msg) {?>
<?=$msg?><br/>
<?php }?>
</div>
<?php }?>
</div>
<div class="form-group">
<label><?=$this->form->tel->getLabel()?></label>
<input type="text" name="<?=$this->form->tel->getName()?>" class="form-control" value="<?=$this->form->tel->getValue()?>" placeholder="<?=$this->form->tel->getDescription()?>">
<?php if ($this->form->tel->hasErrors()) {?>
<div class="alert alert-danger">
<?php foreach($this->form->tel->getMessages() as $msg) {?>
<?=$msg?><br/>
<?php }?>
</div>
<?php }?>
</div>
<div class="form-group">
<label><?=$this->form->mobile->getLabel()?></label>
<input type="text" name="<?=$this->form->mobile->getName()?>" class="form-control" value="<?=$this->form->mobile->getValue()?>" placeholder="<?=$this->form->mobile->getDescription()?>">
<?php if ($this->form->mobile->hasErrors()) {?>
<div class="alert alert-danger">
<?php foreach($this->form->mobile->getMessages() as $msg) {?>
<?=$msg?><br/>
<?php }?>
</div>
<?php }?>
</div>
<input type="submit" value="<?=$this->form->submit->getLabel()?>" class="btn btn-default" />
</form>
<?php } else {?>
<div class="alert alert-danger"><strong>Erreur !</strong> </div>
<?php }?>
<!-- Site footer -->
<div class="footer">
<p>&copy; Scores & Décisions <?=date('Y')?></p>
</div>
</div>
<?php echo $this->inlineScript(); ?>
</body>
</html>

View File

@ -0,0 +1,87 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="viewport" content="width=device-width, initial-scale=1.0" >
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
<meta http-equiv="Content-Language" content="fr-FR" >
<title>Kompass - Achat Bilan Financier</title>
<link href="/libs/bootstrap-v3.0.0/css/bootstrap.min.css" media="all" rel="stylesheet" type="text/css" >
<link href="/themes/default/css/justified-nav.css" media="all" rel="stylesheet" type="text/css" >
<!--[if lt IE 9]> <script type="text/javascript" src="/libs/html5shiv.js"></script><![endif]-->
<!--[if lt IE 9]> <script type="text/javascript" src="/libs/respond.min.js"></script><![endif]-->
</head>
<body>
<div class="container">
<div class="page-header">
<h2>Achat Bilan Financier <small>Livraison</small></h2>
</div>
<div class="row">
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Détails de votre commande</h3>
</div>
<div class="panel-body">
<address>
<strong>Suivi commande</strong><br>
N° de commande<br/>
</address>
<address>
<strong><?=$this->Infos->RaisonSociale?></strong><br>
<?=$this->Infos->NomPrenom?><br>
<?=$this->Infos->Adresse?><br>
<?php if (!empty($this->Infos->Tel)) {?>
<abbr title="Téléphone">Tel :</abbr> <?=$this->Infos->Tel?><br>
<?php }?>
<?php if (!empty($this->Infos->Mob)) {?>
<abbr title="Mobile">Tel :</abbr> <?=$this->Infos->Mob?>
<?php }?>
</address>
</div>
</div>
</div>
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Liste des fichiers</h3>
</div>
<div class="panel-body">
<?php if ( count($this->links) ) {?>
<?php foreach ( $this->links as $link ) {?>
<div class="list-group">
<a href="#" class="list-group-item">
<h4 class="list-group-item-heading"><?=$link['title']?></h4>
<p class="list-group-item-text"><?=$link['desc']?></p>
</a>
</div>
<?php }?>
<?php }?>
</div>
</div>
</div>
</div>
<!-- Site footer -->
<div class="footer">
<p>&copy; Scores & Décisions <?=date('Y')?></p>
</div>
</div>
<?php echo $this->inlineScript(); ?>
</body>
</html>

View File

@ -1 +1,43 @@
<?php
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="viewport" content="width=device-width, initial-scale=1.0" >
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
<meta http-equiv="Content-Language" content="fr-FR" >
<title>Kompass - Achat Bilan Financier</title>
<link href="/libs/bootstrap-v3.0.0/css/bootstrap.min.css" media="all" rel="stylesheet" type="text/css" >
<link href="/themes/default/css/justified-nav.css" media="all" rel="stylesheet" type="text/css" >
<!--[if lt IE 9]> <script type="text/javascript" src="/libs/html5shiv.js"></script><![endif]-->
<!--[if lt IE 9]> <script type="text/javascript" src="/libs/respond.min.js"></script><![endif]-->
</head>
<body>
<div class="container">
<div class="page-header">
<h2>Achat Bilan Financier <small>Commande d'un bilan financier</small></h2>
</div>
<?php if ( $this->SirenExiste === false ) {?>
<div class="alert alert-danger"><strong>Erreur !</strong> Impossible de trouver la société.</div>
<?php } else {?>
<div>Siren : <?=$this->Siren?></div>
<div>Raison Sociale : <?=$this->RaisonSociale?></div>
<div><a type="button" class="btn btn-primary" href="<?=$this->ButtonUrl?>">Commander</a></div>
<?php }?>
<!-- Site footer -->
<div class="footer">
<p>&copy; Scores & Décisions <?=date('Y')?></p>
</div>
</div>
<?php echo $this->inlineScript(); ?>
</body>
</html>

View File

@ -0,0 +1,87 @@
<?php
class Application_Form_Command extends Zend_Form
{
public function init()
{
$this->setName('commande');
$this->setAction('/report/cmd');
$this->setMethod('post');
$this->addElement('hidden', 'cmdId', array(
'required' => true,
)
);
$this->addElement('hidden', 'siren', array(
'required' => true,
)
);
$this->addElement('text', 'email', array(
'filters' => array('StringTrim'),
'validators' => array('EmailAddress'),
'label' => 'Email',
'Description' => '',
'required' => true,
)
);
$this->addElement('text', 'rs', array(
'filters' => array('StringTrim'),
'label' => 'Raison Sociale',
'Description' => '',
'required' => true,
)
);
$this->addElement('text', 'nom', array(
'filters' => array('StringTrim'),
'label' => 'Nom',
'Description' => '',
'required' => true,
)
);
$this->addElement('text', 'prenom', array(
'filters' => array('StringTrim'),
'label' => 'Prénom',
'Description' => '',
'required' => true,
)
);
$this->addElement('text', 'adresse', array(
'filters' => array('StringTrim'),
'label' => 'Adresse',
'Description' => '',
'required' => true,
)
);
$this->addElement('text', 'cp', array(
'filters' => array('StringTrim'),
'label' => 'Code Postal',
'Description' => '',
'required' => true,
)
);
$this->addElement('text', 'ville', array(
'filters' => array('StringTrim'),
'label' => 'Ville',
'Description' => '',
'required' => true,
)
);
$this->addElement('text', 'tel', array(
'filters' => array('StringTrim'),
'label' => 'Téléphone',
'Description' => '',
'required' => true,
)
);
$this->addElement('text', 'mobile', array(
'filters' => array('StringTrim'),
'label' => ' Téléphone Mobile',
'Description' => '',
'required' => false,
)
);
$this->addElement('submit', 'submit',array(
'label' => 'Commander',
'ignore' => true,
)
);
}
}

View File

@ -0,0 +1,236 @@
<?php
class Scores_Finance_Liasse
{
protected $postes = array();
protected $info = array();
protected $div;
protected $unit = array (
'E' => 1,
'K' => 1000,
'M' => 1000000,
);
public function __construct($liasse, $unit = 'K')
{
$this->div = $this->unit[$unit];
$this->setData($liasse);
}
protected function setData($data)
{
$this->info = array(
'dateFraicheBilan' => $data->DATE_FRAICHE_BILAN,
'dateCloture' => $data->DATE_CLOTURE,
'dateCloturePre' => $data->DATE_CLOTURE_PRE,
'dureeMois' => $data->DUREE_MOIS,
'dureeMoisPre' => $data->DUREE_MOIS_PRE,
'monnaie' => $data->MONNAIE,
'monnaieOri' => $data->MONNAIE_ORI,
'monnaieLivUnite' => $data->MONNAIE_LIV_UNITE,
'consolide' => $data->CONSOLIDE,
'source' => $data->SOURCE,
);
//Affectaction des postes
foreach ($data->POSTES->item as $element){
if (in_array($element->id, array(
'YP', 'YP1', '376', // Effectifs 2033 et 2050
'M2G', 'M2H', // Autres effectifs
'ZK', 'ZK1', // Taux
'IJ', 'JG', 'JH', 'JJ', 'ZR', // pour holding/ste mere
'XP' //numero de centre de gestion agréé
)))
{
$this->postes[$element->id] = number_format($element->val, 0, '', ' ');
} else {
$this->postes[$element->id] = $this->dMontant($element->val);
}
}
//Transformation Simplifié en Normal
if ( $data->CONSOLIDE == 'S'){
$this->postes = $this->bilanSimplifie2Normal($this->postes);
}
}
public function getInfo($key)
{
return $this->info[$key];
}
public function getPostes()
{
return $this->postes;
}
protected function dMontant($montant)
{
return number_format($montant/$this->div, 0, '', ' ');
}
function bilanSimplifie2Normal($bilanRS)
{
$tabBS2BN = array(
'AH'=>'010',
'AI'=>'012',
'AI1'=>'013',
'AJ'=>'014',
'AK'=>'016',
'AK1'=>'017',
'AT'=>'028',
'AU'=>'030',
'AU1'=>'031',
'BH'=>'040',
'BI'=>'042',
'BI1'=>'043',
'BJ'=>'044',
'BK'=>'048',
'BK1'=>'049',
'BL'=>'050',
'BM'=>'052',
'BM1'=>'053',
'BT'=>'060',
'BU'=>'062',
'BU1'=>'063',
'BV'=>'064',
'BW'=>'066',
'BW1'=>'067',
'BX'=>'068',
'BY'=>'070',
'BY1'=>'071',
'BZ'=>'072',
'CA'=>'074',
'CA1'=>'075',
'CD'=>'080',
'CE'=>'082',
'CE1'=>'083',
'CF'=>'084',
'CG'=>'086',
'CG1'=>'087',
'CH'=>'092',
'CI'=>'094',
'CI1'=>'095',
'CJ'=>'096',
'CK'=>'098',
'CK1'=>'099',
'CO'=>'110',
'1A'=>'112',
'1A1'=>'113',
'DA'=>'120',
'DC'=>'124',
'DD'=>'126',
'DF'=>'130',
'DG'=>'132',
'DH'=>'134',
'DI'=>'136',
'DK'=>'140',
'DL'=>'142',
'DR'=>'154',
'DP'=>'154',
'DU'=>'156',
'DV'=>'169',
'DW'=>'164',
'DX'=>'166',
'EA'=>'172-169',
'EB'=>'174',
'EC'=>'176',
'EE'=>'180',
'EH'=>'156-195',
'FA'=>'210-209',
'FB'=>'209',
'FC'=>'210',
'FD'=>'214-215',
'FE'=>'215',
'FF'=>'214',
'FH'=>'217',
'FI'=>'218',
'FK'=>'209+215+217',
'FL'=>'210+214+218',
'FM'=>'222',
'FN'=>'224',
'FO'=>'226',
'FQ'=>'230',
'FR'=>'232',
'FS'=>'234',
'FT'=>'236',
'FU'=>'238',
'FV'=>'240',
'FW'=>'242',
'FX'=>'244',
'FY'=>'250',
'FZ'=>'252',
'GA'=>'254',
'GE'=>'262',
'GF'=>'264',
'GG'=>'270',
'GP'=>'280',
'GU'=>'294',
'GW'=>'270+280+294',
'HD'=>'290',
'HH'=>'300',
'HI'=>'290-300',
'HK'=>'306',
'HL'=>'232+280+290',
'HM'=>'264+294+300+306',
'HN'=>'310',
'YY'=>'374',
'YZ'=>'378',
'YP'=>'376',
//@todo : Traiter N-1
);
$bilanRN=array();
foreach ($tabBS2BN as $posteRN => $formule) {
if (preg_match('/\+|\-/', $formule)) {
$tabTmp=preg_split('/\+|\-/', $formule, -1, PREG_SPLIT_OFFSET_CAPTURE);
//$bilanRN[$posteRN]=0;
$scalc='';
foreach ($tabTmp as $i=>$tab) {
if ($i==0) {
$bilanRN[$posteRN]=$bilanRS[$tab[0]];
$scalc.=$bilanRS[$tab[0]];
}
else {
$signe=$formule[$tab[1]-1];
$scalc.=$signe;
if ($signe=='+') $bilanRN[$posteRN]+=$bilanRS[$tab[0]];
elseif ($signe=='-') $bilanRN[$posteRN]-=$bilanRS[$tab[0]];
$scalc.=$bilanRS[$tab[0]];
}
}
$bilanRN[$posteRN]=$bilanRN[$posteRN];
}
else $bilanRN[$posteRN]=$bilanRS[$formule];
}
if ($bilanRS['240']<>0) {
$bilanRN['BL']=$bilanRS['050'];
$bilanRN['BM']=$bilanRS['052'];
} else {
$bilanRN['BN']=$bilanRS['050'];
$bilanRN['BO']=$bilanRS['052'];
}
if ($bilanRS['070']<>0 || $bilanRS['074']<>0 || $bilanRS['052']<>0 || $bilanRS['062']<>0)
$bilanRN['GC']=$bilanRS['256'];
elseif ($bilanRS['070']==0 && $bilanRS['074']==0 && $bilanRS['052']==0 && $bilanRS['062']==0 && $bilanRS['254']<>0)
$bilanRN['GD']=$bilanRS['256'];
if ($bilanRS['584']<>0) {
$bilanRN['HB']=$bilanRS['584'];
$bilanRN['HA']=$bilanRS['290']-$bilanRS['584'];
} else
$bilanRN['HA']=$bilanRS['290'];
if ($bilanRS['582']<>0) {
$bilanRN['HF']=$bilanRS['582'];
$bilanRN['HE']=$bilanRS['582']-$bilanRS['300'];
} else
$bilanRN['HE']=$bilanRS['300'];
return $bilanRN;
}
}

View File

@ -0,0 +1,126 @@
<?php
class Scores_Finance_Liasse_XLS
{
protected $path;
protected $mode;
protected $modele;
protected $writerMode = array(
'Excel5' => '.xls',
'Excel2007' => '.xlsx',
);
protected $assoc = array();
protected $values = array();
/**
*
* Enter description here ...
* @param string $modele
* Nom du modèle
* @param string $mode
* Type de fichier excel pour l'ecriture (Excel5 | Excel2007)
*/
public function __construct($modele = '', $mode = 'Excel5')
{
$c = Zend_Registry::get('config');
$this->path = $c->profil->path->files . '/';
if (!is_dir($this->path)){
mkdir($this->path);
}
$this->modele = $modele;
if (empty($this->modele)){
$this->modele = 'bdf_liasse_template';
}
$this->mode = $mode;
}
public function dataModel($siren, $raisonSociale, $values)
{
switch($this->modele)
{
case 'bdf_liasse_template':
//Ajout champs spéciaux
$values['TEXTE_SIRET'] = 'Siret : '.$siren;
$values['TEXTE_RS'] = 'Société : '.$raisonSociale;
$values['TEXTE_DATEN'] = 'Date de clôture : le ' .
substr($values['DATE_CLOTURE'],6,2) . '/' .
substr($values['DATE_CLOTURE'],4,2) . '/' .
substr($values['DATE_CLOTURE'],0,4) .
' sur ' . $values['DUREE_MOIS'] . ' mois';
break;
//Bilan Normal Cerfa
case 'liasse_2050':
$values['TEXTE_SIRET'] = $siren;
$values['TEXTE_RS'] = $raisonSociale;
$values['TEXTE_DATEN'] =
substr($values['DATE_CLOTURE'],6,2) . '/' .
substr($values['DATE_CLOTURE'],4,2) . '/' .
substr($values['DATE_CLOTURE'],0,4);
$values['TEXTE_DATEN1'] =
substr($values['DATE_CLOTURE_PRE'],6,2) . '/' .
substr($values['DATE_CLOTURE_PRE'],4,2) . '/' .
substr($values['DATE_CLOTURE_PRE'],0,4);
$values['TEXTE_DUREEN'] = $values['DUREE_MOIS'];
$values['TEXTE_DUREEN1'] = $values['DUREE_MOIS_PRE'];
break;
//Bilan Simplifié Cerfa
case 'liasse_2033':
$values['TEXTE_SIRET'] = $siren;
$values['TEXTE_RS'] = $raisonSociale;
$values['TEXTE_DATEN'] =
substr($values['DATE_CLOTURE'],6,2) . '/' .
substr($values['DATE_CLOTURE'],4,2) . '/' .
substr($values['DATE_CLOTURE'],0,4);
$values['TEXTE_DATEN1'] =
substr($values['DATE_CLOTURE_PRE'],6,2) . '/' .
substr($values['DATE_CLOTURE_PRE'],4,2) . '/' .
substr($values['DATE_CLOTURE_PRE'],0,4);
$values['TEXTE_DUREEN'] = $values['DUREE_MOIS'];
$values['TEXTE_DUREEN1'] = $values['DUREE_MOIS_PRE'];
break;
}
//Association
$dataAssoc = parse_ini_file(realpath(dirname(__FILE__)).'/models/'.$this->modele.'.ini', true);
$assoc = array();
foreach($dataAssoc as $sheet => $dataCell)
{
foreach($dataCell as $key => $cell)
{
$assoc[$key] = array($sheet, $cell);
}
}
$this->assoc = $assoc;
$this->values = $values;
}
public function dataFile($file)
{
require_once 'Vendors/phpexcel/PHPExcel.php';
$objPHPexcel = PHPExcel_IOFactory::load(realpath(dirname(__FILE__)).'/models/'.$this->modele.'.xls');
foreach( $this->assoc as $key => $position )
{
$sheet = $position[0];
$cell = $position[1];
if (array_key_exists($key, $this->values))
{
$objWorksheet = $objPHPexcel->getSheet($sheet);
$objWorksheet->getCell($cell)->setValue($this->values[$key]);
}
/*
else
{
$objWorksheet = $objPHPexcel->getSheet($sheet);
$objWorksheet->getCell($cell)->setValue('_');
//echo "La clé $key n'a pas de valeur!<br/>";
}
*/
}
$objPHPexcel->setActiveSheetIndex(0);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPexcel, $this->mode);
$objWriter->save($this->path.'/'.$file);
}
}
?>

View File

@ -0,0 +1,400 @@
[0]
AA = "C5"
AB = "C6"
AC = "E6"
AD = "C7"
AE = "E7"
AF = "C8"
AG = "E8"
AH = "C9"
AI = "E9"
AJ = "C10"
AK = "E10"
AL = "C11"
AM = "E11"
AN = "C12"
AO = "E12"
AP = "C13"
AQ = "E13"
AR = "C14"
AS = "E14"
AT = "C15"
AU = "E15"
AV = "C16"
AW = "E16"
AX = "C17"
AY = "E17"
CS = "C18"
CT = "E18"
CU = "C19"
CV = "E19"
BB = "C20"
BC = "E20"
BD = "C21"
BE = "E21"
BF = "C22"
BG = "E22"
BH = "C23"
BI = "E23"
BJ = "C24"
BK = "E24"
BL = "C25"
BM = "E25"
BN = "C26"
BO = "E26"
BP = "C27"
BQ = "E27"
BR = "C28"
BS = "E28"
BT = "C29"
BU = "E29"
BV = "C30"
BW = "E30"
BX = "C31"
BY = "E31"
BZ = "C32"
CA = "E32"
CB = "C33"
CC = "E33"
CD = "C34"
CE = "E34"
CF = "C35"
CG = "E35"
CH = "C36"
CI = "E36"
CJ = "C37"
CK = "E37"
CL = "C38"
CM = "C39"
CN = "C40"
CO = "C41"
1A = "E41"
TEXTE_SIRET = "A1"
TEXTE_RS = "A2"
TEXTE_DATEN = "A3"
[1]
DA = "C5"
DB = "C6"
DC = "C7"
DD = "C8"
DE = "C9"
DF = "C10"
DG = "C11"
DH = "C12"
DI = "C13"
DJ = "C14"
DK = "C15"
DL = "C16"
DM = "C17"
DN = "C18"
DO = "C19"
DP = "C20"
DQ = "C21"
DR = "C22"
DS = "C23"
DT = "C24"
DU = "C25"
DV = "C26"
DW = "C27"
DX = "C28"
DY = "C29"
DZ = "C30"
EA = "C31"
EB = "C32"
EC = "C33"
ED = "C34"
EE = "C35"
1B = "C37"
1C = "C38"
1D = "C39"
1E = "C40"
EF = "C41"
EJ = "C42"
EG = "C43"
EH = "C44"
EI = "C45"
[2]
FA = "C7"
FB = "E7"
FC = "G7"
FD = "C8"
FE = "E8"
FF = "G8"
FG = "C9"
FH = "E9"
FI = "G9"
FJ = "C10"
FK = "E10"
FL = "G10"
FM = "G11"
FN = "G12"
FO = "G13"
FP = "G14"
FQ = "G14"
FR = "G16"
FS = "G17"
FT = "G18"
FU = "G19"
FV = "G20"
FW = "G21"
FX = "G22"
FY = "G23"
FZ = "G24"
GA = "G25"
GB = "G27"
GC = "G28"
GD = "G29"
GE = "G30"
GF = "G31"
GG = "G32"
GH = "G33"
GI = "G34"
GJ = "G35"
GK = "G36"
GL = "G37"
GM = "G38"
GN = "G39"
GO = "G40"
GP = "G41"
GQ = "G42"
GR = "G43"
GS = "G44"
GT = "G45"
GU = "G46"
GV = "G47"
GW = "G48"
HA = "G49"
HB = "G50"
HC = "G51"
HD = "G52"
HE = "G53"
HF = "G54"
HG = "G55"
HH = "G56"
HI = "G57"
HJ = "G58"
HK = "G59"
HL = "G60"
HM = "G61"
HN = "G62"
HO = "G63"
HY = "G64"
1G = "G66"
HP = "G67"
HQ = "G69"
1H = "G70"
1J = "G71"
1K = "G72"
HX = "G73"
[3]
ZE = "D5"
YQ = "D8"
YR = "D9"
YS = "D10"
YT = "D11"
YU = "D13"
YV = "D15"
ZJ = "D17"
YW = "D18"
9Z = "D19"
YX = "D20"
YY = "D21"
YZ = "D22"
ZA = "D23"
0B = "D24"
0S = "D25"
YP = "D27"
[4]
3T = "D5"
3U = "D6"
3V = "D7"
3W = "D8"
3X = "D9"
IA = "D10"
IE = "D11"
IJ = "D12"
3Y = "D13"
3Z = "D14"
4A = "D15"
4E = "D16"
4J = "D17"
4N = "D18"
4T = "D19"
4X = "D20"
5B = "D21"
5F = "D22"
5L = "D23"
5R = "D24"
5V = "D25"
5Z = "D26"
6A = "D27"
6E = "D28"
02 = "D29"
9U = "D30"
06 = "D31"
6N = "D32"
6T = "D33"
6X = "D34"
7B = "D35"
7C = "D36"
TA = "F5"
TD = "F6"
TG = "F7"
TJ = "F8"
TM = "F9"
IB = "F10"
IF = "F11"
IK = "F12"
TP = "F13"
TS = "F14"
4B = "F15"
4F = "F16"
4K = "F17"
4P = "F18"
4U = "F19"
4Y = "F20"
5C = "F21"
5H = "F22"
5M = "F23"
5S = "F24"
5W = "F25"
TV = "F26"
6B = "F27"
6F = "F28"
03 = "F29"
9V = "F30"
07 = "F31"
6P = "F32"
6U = "F33"
6Y = "F34"
TY = "F35"
UB = "F36"
UE = "F37"
UG = "F38"
UJ = "F39"
TB = "H5"
TE = "H6"
TH = "H7"
TK = "H8"
TN = "H9"
IC = "H10"
IG = "H11"
IL = "H12"
TQ = "H13"
TT = "H14"
4C = "H15"
4G = "H16"
4L = "H17"
4R = "H18"
4V = "H19"
4Z = "H20"
5D = "H21"
5J = "H22"
5N = "H23"
5T = "H24"
5X = "H25"
TW = "H26"
6C = "H27"
6G = "H28"
04 = "H29"
9W = "H30"
08 = "H31"
6R = "H32"
6V = "H33"
6Z = "H34"
TZ = "H35"
UC = "H36"
UF = "H37"
UH = "H38"
UK = "H39"
TC = "J5"
TF = "J6"
TI = "J7"
TL = "J8"
TO = "J9"
ID = "J10"
IH = "J11"
IM = "J12"
TR = "J13"
TU = "J14"
4D = "J15"
4H = "J16"
4M = "J17"
4S = "J18"
4W = "J19"
5A = "J20"
5E = "J21"
5K = "J22"
5P = "J23"
5U = "J24"
5Y = "J25"
TX = "J26"
6D = "J27"
6H = "J28"
05 = "J29"
9X = "J30"
09 = "J31"
6S = "J32"
6W = "J33"
7A = "J34"
UA = "J35"
UD = "J36"
10 = "J40"
[5]
UQ = "E11"
UL = "G6"
UP = "G7"
UT = "G8"
VA = "G9"
UX = "G10"
UU = "G11"
UY = "G12"
UZ = "G13"
VM = "G14"
VB = "G15"
VN = "G16"
VP = "G17"
VC = "G18"
VR = "G19"
VS = "G20"
VT = "G21"
VD = "G22"
VE = "G23"
VF = "G24"
UM = "I6"
UR = "I7"
UV = "I8"
VU = "I21"
UN = "K6"
US = "K7"
UW = "K8"
VV = "K21"
7Y = "E27"
7Z = "E28"
VG = "E29"
VH = "E30"
8A = "E31"
8B = "E32"
8C = "E33"
8D = "E34"
8E = "E35"
VW = "E36"
VX = "E37"
VQ = "E38"
8J = "E39"
VI = "E40"
8K = "E41"
SZ = "E42"
8L = "E43"
VY = "E44"
VZ = "G44"
VZ3 = "H44"
VZ4 = "I44"
VJ = "E45"
VK = "E46"
VL = "K45"

View File

@ -0,0 +1,352 @@
;2033 ACTIF PASSIF
[0]
TEXTE_SIRET = "D6"
TEXTE_RS = "F4"
TEXTE_DATEN = "W10"
TEXTE_DATEN1 = "Z10"
TEXTE_DUREEN = "G7"
TEXTE_DUREEN1 = "S7"
010 = "K12"
014 = "K13"
028 = "K14"
040 = "K15"
044 = "K16"
050 = "K17"
060 = "K18"
064 = "K19"
068 = "K20"
072 = "K21"
080 = "K22"
084 = "K23"
088 = "K24"
092 = "K25"
096 = "K26"
110 = "K27"
012 = "Q12"
016 = "Q13"
030 = "Q14"
042 = "Q15"
048 = "Q16"
052 = "Q17"
062 = "Q18"
066 = "Q19"
070 = "Q20"
074 = "Q21"
082 = "Q22"
086 = "Q23"
090 = "Q24"
094 = "Q25"
098 = "Q26"
112 = "Q27"
013 = "W12"
017 = "W13"
031 = "W14"
043 = "W15"
049 = "W16"
053 = "W17"
063 = "W18"
067 = "W19"
071 = "W20"
075 = "W21"
083 = "W22"
087 = "W23"
091 = "W24"
095 = "W25"
099 = "W26"
113 = "W27"
120 = "W29"
124 = "W30"
126 = "W31"
130 = "W32"
132 = "W33"
134 = "W34"
136 = "W35"
140 = "W36"
142 = "W37"
154 = "W38"
156 = "W39"
164 = "W40"
166 = "W41"
172 = "W42"
174 = "W43"
176 = "W44"
180 = "W45"
195 = "Z46"
182 = "Z47"
184 = "Z48"
N00 = "Z12"
N01 = "Z13"
N02 = "Z14"
N03 = "Z15"
N04 = "Z16"
N05 = "Z17"
N06 = "Z18"
N07 = "Z19"
N08 = "Z20"
N09 = "Z21"
N10 = "Z22"
N11 = "Z23"
N12 = "Z24"
N13 = "Z25"
N14 = "Z26"
N15 = "Z27"
N16 = "Z29"
N17 = "Z30"
N18 = "Z31"
N19 = "Z32"
N20 = "Z33"
N21 = "Z34"
N22 = "Z35"
N23 = "Z36"
N24 = "Z37"
N25 = "Z38"
N26 = "Z39"
N27 = "Z40"
N28 = "Z41"
N29 = "Z42"
N30 = "Z43"
N31 = "Z44"
N32 = "Z45"
;2033 CDR
[1]
209 = "R8"
215 = "R9"
217 = "R10"
24B = "K20"
24A = "U20"
243 = "R21"
259 = "R26"
247 = "H40"
248 = "V40"
981 = "U41"
344 = "I42"
346 = "T42"
381 = "D48"
382 = "T48"
374 = "H49"
376 = "S49"
378 = "H50"
210 = "AA8"
214 = "AA9"
218 = "AA10"
222 = "AA11"
224 = "AA12"
226 = "AA13"
230 = "AA14"
232 = "AA15"
234 = "AA16"
236 = "AA17"
238 = "AA18"
240 = "AA19"
242 = "AA20"
244 = "AA21"
250 = "AA22"
252 = "AA23"
254 = "AA24"
256 = "AA25"
262 = "AA26"
264 = "AA27"
270 = "AA28"
280 = "AA29"
290 = "AA30"
294 = "AA31"
300 = "AA32"
306 = "AA33"
310 = "AA34"
312 = "AA35"
316 = "AA36"
318 = "AA37"
322 = "AA38"
324 = "AA39"
330 = "AA40"
352 = "AA43"
356 = "AA44"
366 = "AA46"
370 = "AA47"
380 = "Z50"
N33 = "AD8"
N34 = "AD9"
N35 = "AD10"
N36 = "AD11"
N37 = "AD12"
N38 = "AD13"
N39 = "AD14"
N40 = "AD15"
N41 = "AD16"
N42 = "AD17"
N43 = "AD18"
N44 = "AD19"
N45 = "AD20"
N46 = "AD21"
N47 = "AD22"
N48 = "AD23"
N49 = "AD24"
N50 = "AD25"
N51 = "AD26"
N52 = "AD27"
N53 = "AD28"
N54 = "AD29"
N55 = "AD30"
N56 = "AD31"
N57 = "AD32"
N58 = "AD33"
N59 = "AD34"
314 = "AE35"
342 = "AE41"
350 = "AE42"
354 = "AE43"
360 = "AE45"
368 = "AE46"
372 = "AE47"
388 = "AE48"
399 = "AE50"
;2033 IMMO AMORT.
[2]
400 = "H9"
410 = "H10"
420 = "H11"
430 = "H12"
440 = "H13"
450 = "H14"
460 = "H15"
470 = "H16"
480 = "H17"
490 = "H18"
402 = "P9"
412 = "P10"
422 = "P11"
432 = "P12"
442 = "P13"
452 = "P14"
462 = "P15"
472 = "P16"
482 = "P17"
492 = "P18"
404 = "W9"
414 = "W10"
424 = "W11"
434 = "W12"
444 = "W13"
454 = "W14"
464 = "W15"
474 = "W16"
484 = "W17"
494 = "W18"
406 = "AD9"
416 = "AD10"
426 = "AD11"
436 = "AD12"
446 = "AD13"
456 = "AD14"
466 = "AD15"
476 = "AD16"
486 = "AD17"
496 = "AD18"
500 = "K21"
510 = "K22"
520 = "K23"
530 = "K24"
540 = "K25"
550 = "K26"
560 = "K27"
570 = "K28"
502 = "T21"
512 = "T22"
522 = "T23"
532 = "T24"
543 = "T25"
552 = "T26"
562 = "T27"
572 = "T28"
504 = "AE21"
514 = "AE22"
524 = "AE23"
534 = "AE24"
544 = "AE25"
554 = "AE26"
564 = "AE27"
574 = "AE28"
506 = "AJ21"
516 = "AJ22"
526 = "AJ23"
536 = "AJ24"
546 = "AJ25"
556 = "AJ26"
566 = "AJ27"
576 = "AJ28"
578 = "I42"
580 = "O42"
582 = "U42"
584 = "Z42"
586 = "AG42"
588 = "AM42"
590 = "AG43"
592 = "AM43"
593 = "AM44"
596 = "AG45"
598 = "AM45"
;2033 PROVISIONS
[3]
610 = "H9"
601 = "H10"
610 = "H11"
620 = "H12"
630 = "H13"
640 = "H14"
650 = "H15"
660 = "H16"
680 = "H17"
602 = "P9"
603 = "P10"
612 = "P11"
622 = "P12"
632 = "P13"
642 = "P14"
652 = "P15"
662 = "P16"
682 = "P17"
604 = "W9"
605 = "W10"
614 = "W11"
624 = "W12"
634 = "W13"
644 = "W14"
654 = "W15"
664 = "W16"
684 = "W17"
606 = "AD9"
607 = "AD10"
616 = "AD11"
626 = "AD12"
636 = "AD13"
646 = "AD14"
656 = "AD15"
666 = "AD16"
686 = "AD17"
700 = "G20"
710 = "G21"
720 = "G22"
730 = "G23"
740 = "G24"
750 = "G25"
760 = "G26"
770 = "G27"
705 = "K20"
715 = "K21"
725 = "K22"
735 = "K23"
745 = "K24"
755 = "K25"
765 = "K26"
775 = "K27"
780 = "AJ27"
982 = "AJ29"
983 = "AJ30"
984 = "AJ31"
860 = "AJ32"
870 = "AJ33"

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -0,0 +1,362 @@
<?php
class Scores_Finance_Ratios_Data
{
protected $ratiosInfos;
protected $bilansInfo;
protected $ratiosEntrep;
protected $ratiosEntrepEvol;
protected $ratiosSecteur;
protected $nbBilanN = 0;
protected $nbBilanS = 0;
protected $nbBilanC = 0;
protected $nbBilanA = 0;
protected $nbBilanB = 0;
public function __construct($ratios)
{
//Organisation des ratios secteurs
if (count($ratios->RatiosSecteur->item)>0){
foreach($ratios->RatiosSecteur->item as $item){
foreach($item->liste->item as $ratiosItem){
$this->ratiosSecteur[$item->annee][$ratiosItem->id] = $ratiosItem->val;
}
}
}
//Orgnaisation des informations des ratios
foreach($ratios->RatiosInfos->item as $item){ //@todo : protection
$this->ratiosInfos[$item->id] = $item;
}
//Orgnaisation RatiosEntrep et RatiosEntrepEvol
if (count($ratios->BilansInfos->item)>0){
foreach($ratios->BilansInfos->item as $item)
{
$typeBilan = $item->typeBilan;
if ($typeBilan == 'S') $typeBilan = 'N';
$this->bilansInfo[$typeBilan][$item->dateCloture] = $item;
foreach($item->RatiosEntrep->item as $ratiosItem){
$this->ratiosEntrep[$typeBilan][$item->dateCloture][$ratiosItem->id] = $ratiosItem->val;
}
foreach($item->RatiosEntrepEvol->item as $ratiosItem){
$this->ratiosEntrepEvol[$typeBilan][$item->dateCloture][$ratiosItem->id] = $ratiosItem->val;
}
//Comptage de bilans
$this->{'nbBilan'.$typeBilan}++;
}
}
}
public function getNbBilan($type)
{
return $this->{'nbBilan'.$type};
}
/**
* Renvoi le ratio de l'entité
* @param string $type
* @param string $dateCloture
* @param string $id
*/
function dRatio($type, $dateCloture, $id){
$ratio = $this->ratiosEntrep[$type][$dateCloture][$id];
$return = '';
$formatRatio = TRUE;
if ($ratio=='NS' || $ratio==0) {
$return.= 'NS';
$formatRatio = FALSE;
}elseif(substr($ratio,0,1)=='<' ){
$return.= '< ';
$ratio = substr($ratio,1)*1;
}elseif(substr($ratio,0,1)=='>'){
$return.= '> ';
$ratio = substr($ratio,1)*1;
}elseif($ratio==NULL){
$return.= '-';
$formatRatio = FALSE;
}
if($formatRatio == TRUE) {
if ( ($this->ratiosInfos[$id]->unite=='EUR') && ((abs($ratio)/1000)>0) ){
$return.= number_format($ratio/1000, 0, '', ' ').' K&euro;';
}elseif (($this->ratiosInfos[$id]->unite=='EUR') && ((abs($ratio)/1000)<0)) {
$return.= number_format($ratio, 0, '', ' ').' &euro;';
}elseif (($this->ratiosInfos[$id]->unite=='Jours')) {
$return.= number_format($ratio, 0, '', ' ').' '.$this->ratiosInfos[$id]->unite;
}elseif (($this->ratiosInfos[$id]->unite=='AN')) {
$return.= round($ratio, 2).' '.$this->ratiosInfos[$id]->unite;
}elseif (($this->ratiosInfos[$id]->unite=='%')) {
$return.= round($ratio).' '.$this->ratiosInfos[$id]->unite;
}else{
$return.= $ratio.' '.$this->ratiosInfos[$id]->unite;
}
}
return $return;
}
/**
* Renvoi le ratio secteur
* @param string $dateCloture
* @param string $id
*/
function dSecteur($dateCloture, $id){
$ratio = $this->ratiosSecteur[substr($dateCloture,0,4)][$id];
$return = '';
$formatRatio = TRUE;
if ($ratio=='NS') {
$return.= 'NS';
$formatRatio = FALSE;
}elseif(substr($ratio,0,1)=='<' ){
$return.= '< ';
$ratio = substr($ratio,1)*1;
}elseif(substr($ratio,0,1)=='>'){
$return.= '> ';
$ratio = substr($ratio,1)*1;
}elseif($ratio==NULL){
$return.= '-';
$formatRatio = FALSE;
}
if($formatRatio == TRUE) {
if ( ($this->ratiosInfos[$id]->unite=='EUR') && ((abs($ratio)/1000)>0) ){
$return.= number_format($ratio/1000, 0, '', ' ').' K&euro;';
}elseif (($this->ratiosInfos[$id]->unite=='EUR') && ((abs($ratio)/1000)<0)) {
$return.= number_format($ratio, 0, '', ' ').' &euro;';
}elseif (($this->ratiosInfos[$id]->unite=='Jours')) {
$return.= number_format($ratio, 0, '', ' ').' '.$this->ratiosInfos[$id]->unite;
}elseif (($this->ratiosInfos[$id]->unite=='AN')) {
$return.= round($ratio, 2).' '.$this->ratiosInfos[$id]->unite;
}elseif (($this->ratiosInfos[$id]->unite=='%')) {
$return.= round($ratio).' '.$this->ratiosInfos[$id]->unite;
}else{
$return.= $ratio.' '.$this->ratiosInfos[$id]->unite;
}
}
return $return;
}
/**
* Renvoi la position de l'entité en comparant son ratio avec le ratio secteur
* Enter description here ...
* @param string $type
* @param string $dateCloture
* @param string $id
* @param string $compare
* @return string
*/
function dPosition($type, $dateCloture, $id, $compare)
{
$ratioS = $this->ratiosSecteur[substr($dateCloture,0,4)][$id];
$ratioE = $this->ratiosEntrep[$type][$dateCloture][$id];
$ecart = 1/100;
if( $ratioS=='NS' || $ratioE=='NS' || $ratioS==NULL || $ratioE==NULL){
$return = '-';
}elseif($compare=='>'){
if( $ratioE+$ecart > $ratioS ){
$return = '<img src="/themes/default/images/finance/ratios_bon.png" />';
}elseif( ($ratioS-($ratioS*$ecart))<$ratioE && ($ratioS+($ratioS*$ecart))>$ratioE){
$return = '-';
}else{
$return = '<img src="/themes/default/images/finance/ratios_mauvais.png" />';
}
}elseif($compare=='<'){
if($ratioE < $ratioS){
$return = '<img src="/themes/default/images/finance/ratios_bon.png" />';
}elseif( ($ratioS-($ratioS*$ecart))<$ratioE && ($ratioS+($ratioS*$ecart))>$ratioE){
$return = '-';
}else{
$return = '<img src="/themes/default/images/finance/ratios_mauvais.png" />';
}
}
return $return;
}
/**
* Affiche l'évolution d'un ratio.
* @param string $type
* @param string $dateCloture
* @param string $id
*/
function dEvol($type, $dateCloture, $id){
$ratio = $this->ratiosEntrepEvol[$type][$dateCloture][$id];
if ($ratio=='NS') {
return 'NS';
}elseif($ratio==NULL){
return '-';
}else{
return $ratio.' %';
}
}
/**
* Enter description here ...
* @param unknown_type $type
* @param unknown_type $dateCloture
* @param unknown_type $id
* @param unknown_type $totalRatio
* @return string
*/
function dTotal($type, $dateCloture, $id, $totalRatio)
{
$ratio = isset($this->ratiosEntrep[$type][$dateCloture][$id]) ?
$this->ratiosEntrep[$type][$dateCloture][$id] : 0;
$total = isset($this->ratiosEntrep[$type][$dateCloture][$totalRatio]) ?
$this->ratiosEntrep[$type][$dateCloture][$totalRatio] : 0;
if($total!=0){
return number_format($ratio*100/$total, 2);
}else{
return '-';
}
}
/**
* Retourne le tableau pour l'affichage des graphiques d'évolution
* @param string $type
* @param string $id
*/
function dGraph($type, $id)
{
$evol = array();
$bilansInfo = $this->bilansInfo[$type];
ksort($bilansInfo);
foreach($bilansInfo as $item) {
$dateCloture = $item->dateCloture;
$div = 1;
$ratioE = $this->ratiosEntrep[$type][$dateCloture][$id];
$ratioS = $this->ratiosSecteur[substr($dateCloture,0,4)][$id];
if ( ($ratiosInfos[$nRatio]['unite']=='EUR') && ((abs($ratioE)/1000)>0) ){
$unite = 'KEURO';
$div = 1000;
}else{
$unite = $this->ratiosInfos[$id]->unite;
}
//Données pour les graphiques évolutions
$data[] = array(
'date' => $dateCloture,
'entreprise' => (($ratioE!='NS') ? $ratioE/$div : 0 ),
'secteur' => (($ratioS!='NS') ? $ratioS/$div : 0 ),
);
}
$evol = array('data' => $data, 'unite' => $unite);
return $evol;
}
/**
* Affiche le pourcentage d'un ratio par rapport au total.
* @param string $type
* @param string $dateCloture
* @param string $id
* @param string $totalRatio
* @return mixed
*/
function dPercent($type, $dateCloture, $id, $totalRatio){
$ratio = $this->ratiosEntrep[$type][$dateCloture][$id];
$totalRatio = $this->ratiosEntrep[$type][$dateCloture][$totalRatio];
if ($ratio=='NS') {
$return = 'NS';
}elseif($ratio==NULL){
$return = '-';
}else {
if ($totalRatio!=0 && $totalRatio!='NS'){
$percent = $ratio*100/$totalRatio;
}else{
$percent = 0;
}
if ($percent>=0 && $percent<10){
$return = round($percent, 1);
} elseif ($percent>-10 && $percent<0) {
$return = round($percent, 1);
} else {
$return = round($percent, 0);
}
}
return $return;
}
/**
* Retourne le pourcentage d'un ratio par rapport au total pour les graphiques
* @param string $type
* @param string $dateCloture
* @param string $id
* @param string $totalRatio
*/
function graphPercent($type, $dateCloture, $id, $totalRatio){
$ratio = isset($this->ratiosEntrep[$type][$dateCloture][$id]) ?
$this->ratiosEntrep[$type][$dateCloture][$id] : 0;
$totalRatio = $this->ratiosEntrep[$type][$dateCloture][$totalRatio];
if ( ($ratio!='NS' && $ratio!=NULL) && ($totalRatio!=0 && $totalRatio!='NS')){
return $ratio*100/$totalRatio;
}else{
return 0;
}
}
/**
* Formatte le commentaire pour l'afficher dans l'infobulle.
* @param string $nRatios
* Identifiant du ratio
* @return string
*/
function wrapComment($nRatio){
$text = $this->ratiosInfos[$nRatio]->commentaires;
$newtext = htmlentities($text, null, 'utf-8');
$newtext = nl2br($newtext);
return $newtext;
}
public function getBilansInfo($type)
{
return $this->bilansInfo[$type];
}
public function getRatiosInfos($id) {
return $this->ratiosInfos[$id];
}
public function getRatiosEntrep($type, $dateCloture, $id) {
return $this->ratiosEntrep[$type][$dateCloture][$id];
}
public function getRatiosEntrepEvol($type, $dateCloture, $id) {
return $this->ratiosEntrepEvol[$type][$dateCloture][$id];
}
public function getRatiosSecteur($annee, $id) {
return $this->ratiosSecteur[substr($annee,0,4)][$id];
}
public function getTableRatiosInfos()
{
return $this->ratiosInfos;
}
public function getTableRatiosSecteur()
{
return $this->ratiosSecteur;
}
public function getTableRatiosEntrep($type)
{
if (array_key_exists($type, $this->ratiosEntrep)){
return $this->ratiosEntrep[$type];
}
return false;
}
public function getTableRatiosEntrepEvol($type)
{
if (array_key_exists($type, $this->ratiosEntrepEvol)){
return $this->ratiosEntrepEvol[$type];
}
return false;
}
private function ignoreType($type, $typeDelete) {
foreach ($typeDelete as $t) {
if ($t == $type) return (false);
}
return (true);
}
}

View File

@ -0,0 +1,384 @@
<?php
class Scores_Finance_Ratios_Graph
{
protected $path;
protected $siret = null;
protected $id = 0;
public function __construct($siret, $id = 0)
{
require_once 'Vendors/ChartDirector/phpchartdir.php';
require_once 'Scores/Cache.php';
$c = Zend_Registry::get('config');
$this->path = $c->profil->path->pages . '/imgcache/';
$this->siret = $siret;
$this->id = $id;
}
/**
* Enregistre le graphique bilan passif sous forme d'image.
* @param array $data
* Tableau structuré des données
* @param string $filename
* Le nom de fichier généré
* @return string
* Retourne un message d'erreur ou le code HTML d'affichage.
*/
public function bilansgraphpassif($data, $typeBilan, $dateCloture)
{
$file = 'bilansgraphpassif-'.$this->siret.'-'.$this->id.'-'.$typeBilan.$dateCloture.'.png';
$cache = new Cache();
if( $cache->exist($this->path.$file) ){
$return = $file;
} else {
$w = 665;
$h = 210;
$x = round($w/2);
$y = round($h/2);
$radius = 90;
$c = new PieChart($w, $h);
$labels = array('Fonds propres',
'Provisions Risques',
'Compte Courant',
'Dettes Financières',
'Dettes Fournisseurs',
'Dettes fiscales',
'Autres Dettes',
'Trésorerie Passive');
$textBoxObj = $c->addTitle("Composition du passif", "timesbi.ttf", 15);
$c->setPieSize($x, $y, $radius);
$c->setLabelLayout(SideLayout);
$t = $c->setLabelStyle();
$t->setBackground(SameAsMainColor, Transparent, glassEffect());
$t->setRoundedCorners(5);
$c->setLineColor(SameAsMainColor, 0x000000);
$c->setStartAngle(135);
$c->setLabelFormat("<*block,valign=absmiddle*>{label} <*font=timesbi.ttf,size=0*>({percent|0}%)");
$c->setData($data, $labels);
$c->set3D(20);
if($c->makeChart($this->path.$file) === TRUE){
$return = '<img src="./fichier/imgcache/'.$file.'"/>';
}else{
$return = false;
}
}
return $return;
}
/**
* Enregistre le graphique bilan SIG sous forme d'image.
*/
public function bilansgraphsig($data, $typeBilan, $dateCloture)
{
$file = 'bilansgraphsig-'.$this->siret.'-'.$this->id.'-'.$typeBilan.$dateCloture.'.png';
$cache = new Cache();
if( $cache->exist($this->path.$file) ){
$return = $file;
} else {
$w = 665;
$h = 210;
$x = round($w/2);
$y = round($h/2);
$radius=70;
$c = new PieChart($w, $h);
$labels = array('Achats de marchandises.',
'Autres achats externes',
'Charges de fonctionnement',
'Amortissement et provisions',
'Perte financière',
'Impôts sociétés',
'RÉSULTAT NET',
);
$textBoxObj = $c->addTitle("Solde Intermédiaire de Gestion", "timesbi.ttf", 15);
$c->setPieSize($x, $y, $radius);
$c->setLabelLayout(SideLayout);
$t = $c->setLabelStyle();
$t->setBackground(SameAsMainColor, Transparent, glassEffect());
$t->setRoundedCorners(5);
$c->setLineColor(SameAsMainColor, 0x000000);
$c->setLabelFormat("<*block,valign=absmiddle*>{label} <*font=arial.ttf,size=0*>({percent|0}%)");
$c->setStartAngle(135);
$c->setData($data, $labels);
$c->set3D(20);
if($c->makeChart($this->path.$file) === TRUE){
$return = $file;
}else{
$return = false;
}
}
return $return;
}
/**
* Enregistre le graphique bilan actif sous forme d'image.
* @param array $data
* Tableau structuré des données
* @return mixed
*/
public function bilansgraphactif($data, $typeBilan, $dateCloture)
{
$file = 'bilansgraphactif-'.$this->siret.'-'.$this->id.'-'.$typeBilan.$dateCloture.'.png';
$cache = new Cache();
if( $cache->exist($this->path.$file) ){
$return = $file;
} else {
$w = 665;
$h = 210;
$x = round($w/2);
$y = round($h/2);
$radius = 90;
$c = new PieChart($w, $h);
$labels = array('Immo. incorporelles',
'Immo. corporelles',
'Immo. financières',
'Stock et encours',
'Créances Clients',
'Autres créances',
'Trésorerie Active');
$textBoxObj = $c->addTitle("Composition de l'actif", "timesbi.ttf", 15);
$c->setPieSize($x, $y, $radius);
$c->setLabelLayout(SideLayout);
$t = $c->setLabelStyle();
$t->setBackground(SameAsMainColor, Transparent, glassEffect());
$t->setRoundedCorners(5);
# Set the border color of the sector the same color as the fill color. Set the line # color of the join line to black (0x0)
$c->setLineColor(SameAsMainColor, 0x000000);
$c->setStartAngle(135);
$c->setLabelFormat("<*block,valign=absmiddle*>{label} <*font=timesbi.ttf,size=0*>({percent|0}%)");
$c->setData($data, $labels);
$c->set3D(20);
if($c->makeChart($this->path.$file) === TRUE){
$return = $file;
}else{
$return = false;
}
}
return $return;
}
public function ratiosgraph($ratio, $data)
{
$file = 'ratiosgraph-'.$this->siret.'-'.$this->id.'-'.$ratio.'.png';
$cache = new Cache();
if( $cache->exist($this->path.$file) ){
$return = $file;
}else{
if(count($data)<=1){
$return = 0;
}else{
$labelsX = array();
$labelsY = array();
$dataX1 = array();
$dataX2 = array();
foreach($data['data'] as $value){
$dataX1[] = $value['entreprise'];
$dataX2[] = $value['secteur'];
$labelsX[] = substr($value['date'],0,4);
}
$i=-100; while($i>100){
$labelsY[] = $i;
}
$c = new XYChart(350, 250);
$c->setPlotArea(70, 10, 280, 200);
$c->yAxis->setTitle($data['unite']);
$c->xAxis->setTitle("Années");
$c->xAxis->setWidth(2);
$c->yAxis->setWidth(2);
$legendObj = $c->addLegend(50, 10, false, "times.ttf", 9);
$legendObj->setBackground(Transparent);
$c->addLineLayer($dataX1, 0x0000ff, "Entreprise");
$c->addLineLayer($dataX2, 0x008C00, "Secteur");
$c->yAxis->setLabels($labelsY);
$c->yAxis->setLabelStep(10);
$c->xAxis->setLabels($labelsX);
if($c->makeChart($this->path.$file) === TRUE){
$return = $file;
}
else{ $return = FALSE;
}
}
}
return $return;
}
public function syntheseGraphEvol($data, $ratio, $unite)
{
$file = 'syntheseEvol-'.$this->siret.'-'.$this->id.'-'.$ratio.'.png';
$cache = new Cache();
if( $cache->exist($this->path.$file) ){
$return = $file;
} else {
$unite = !empty($unite) ? $unite : 'KEUROS';
$labelsX = array();
$labelsY = array();
$dataX = array();
if(count($data)<=1){
$return = 0;
} else {
foreach($data as $value){
$dataX[] = $value['value'];
$labelsX[] = substr($value['date'],0,4);
}
$i=-100;
while($i>100){
$labelsY[] = $i;
}
# Create a XYChart object of size 250 x 250 pixels
$c = new XYChart(400, 250);
$c->setPlotArea(70, 10, 280, 200);
$c->yAxis->setTitle($unite);
$c->xAxis->setTitle("Années");
$c->xAxis->setWidth(2);
$c->yAxis->setWidth(2);
$c->addLineLayer($dataX);
# Set the labels.
$c->yAxis->setLabels($labelsY);
$c->yAxis->setLabelStep(10);
$c->xAxis->setLabels($labelsX);
if($c->makeChart($this->path.$file) === TRUE){
$return = $file;
} else {
$return = false;
}
}
}
return $return;
}
public function syntheseGraphLineCompare($data, $typeBilan)
{
$file = 'synthese-linecompare-'.$this->siret.'-'.$this->id.'-'.$typeBilan.'.png';
$cache = new Cache();
if( $cache->exist($this->path.$file) ){
$return = $this->path.$file;
} else {
//Tri des données par date et par ordre croissant
foreach ($data as $key => $row) {
$date[$key] = $row['date'];
}
array_multisort($date, SORT_ASC, $data);
//Définition des valeurs pour le graph
$dataBFR = array();
$dataFR = array();
$dataCA = array();
$i=0;
//Parcourir les années
foreach($data as $item){
$anneeFin = substr($item['date'],0,4);
$moisFin = substr($item['date'],4,2);
$jourFin = substr($item['date'],6,2);
//Calcul de la date de début
$dateDebut = date("Ymd", mktime(0, 0, 0, $moisFin-$item['duree'], $jourFin, $anneeFin));
$anneeDebut = substr($dateDebut,0,4);
$moisDebut = substr($dateDebut,4,2);
$jourDebut = substr($dateDebut,6,2);
//Affectation des abscisses
$dataBFR['x'][$i] = $dataFR['x'][$i] = $dataCA['x'][$i] = $dataEBE['x'][$i] = chartTime((int)$anneeDebut, (int)$moisDebut, (int)$jourDebut);
$dataBFR['x'][$i+1] = $dataFR['x'][$i+1] = $dataCA['x'][$i+1] = $dataEBE['x'][$i+1] = chartTime((int)$anneeFin, (int)$moisFin, (int)$jourFin);
//Affectation des ordonnées
$dataBFR['y'][$i] = $dataBFR['y'][$i+1] = $item['r236'];
$dataFR['y'][$i] = $dataFR['y'][$i+1] = $item['r235'];
$dataCA['y'][$i] = $dataCA['y'][$i+1] = $item['r6'];
$dataEBE['y'][$i] = $dataEBE['y'][$i+1] = $item['r146'];
$i+=2;
}
$c = new XYChart(665, 350, 0xcccccc, 0x000000, 1);
$c->addTitle("Synthèse *", "timesbi.ttf", 15, 0x000000);
$c->addText(60, 320, "* Elements financier rapportés à 12 mois" );
$c->setPlotArea(70, 80, 500, 200, 0xffffff, -1, -1, 0xcccccc, 0xcccccc);
$c->yAxis->setTitle("KEUROS","timesbi.ttf",10);
$c->xAxis->setTitle( "<*block,valign=absmiddle*>Années<*/*>");
$c->xAxis->setWidth(2);
$c->yAxis->setWidth(2);
// Add a legend box at (55, 32) (top of the chart) with horizontal layout. Use 9 pts
// Arial Bold font. Set the background and border color to Transparent.
$legendObj = $c->addLegend(55, 30, false, "times.ttf", 9);
$legendObj->setBackground(Transparent);
// Add a blue (0000ff) step line layer to the chart and set the line width to 2 pixels
$layer1 = $c->addStepLineLayer($dataFR['y'], 0x0000ff, "FONDS DE ROULEMENT");
$layer1->setXData($dataFR['x']);
$layer1->setLineWidth(2);
// Add a red (ff0000) step line layer to the chart and set the line width to 2 pixels
$layer0 = $c->addStepLineLayer($dataBFR['y'], 0xff0000, "BESOIN EN FONDS DE ROULEMENT");
$layer0->setXData($dataBFR['x']);
$layer0->setLineWidth(2);
// Add a green (00ff00) step line layer to the chart and set the line width to 2 pixels
$layer2 = $c->addStepLineLayer($dataCA['y'], 0x00ff00, "CHIFFRE D'AFFAIRES");
$layer2->setXData($dataCA['x']);
$layer2->setLineWidth(2);
// Add a black (000000) step line layer style dash to the chart and set the line width to 2 pixels
$layer3 = $c->addStepLineLayer($dataEBE['y'], $c->dashLineColor(0x000000, DashLine), "EXCEDENT BRUT D'EXPLOITATION");
$layer3->setXData($dataEBE['x']);
$layer3->setLineWidth(2);
# If the FR line gets above the BFR line, color to area between the lines red (ff0000)
$c->addInterLineLayer($layer0->getLine(0), $layer1->getLine(0), 0xff0000, Transparent);
# If the FR line gets below the lower BFR line, color to area between the lines light green (8099ff99)
$c->addInterLineLayer($layer0->getLine(0), $layer1->getLine(0), Transparent, 0x8044ff44);
if($c->makeChart($this->path.$file) === TRUE){
$return = $this->path.$file;
}else{
$return = false;
}
}
return $return;
}
/**
* Génére l'histogramme flux de trésorerie
* @param array $labels
* @param array $data
* @param string $typeBilan
* @return boolean|string
*/
function flux($labels, $data, $typeBilan)
{
$couleur = array(0xff8080, 0x80ff80, 0x8080ff);
$file = 'flux-'.$this->siret.'-'.$this->id.'-'.$typeBilan.'.png';
$cache = new Cache();
if( $cache->exist($this->path.$file) ){
$return = $this->path.$file;
} else {
if (count($data)<=1) {
$return = 0;
} else {
$c = new XYChart(600, 300);
$c->setPlotArea(100, 70, 300, 200);
$legendObj = $c->addLegend(100, 20, false, "times.ttf", 9);
$legendObj->setBackground(Transparent);
$layer = $c->addBarLayer2(Stack);
$layer->setBorderColor(Transparent, softLighting(Left));
$c->xAxis->setLabels($labels);
$cptCouleur = 0;
foreach ( $data as $d ) {
$layer->addDataSet($d['values'], $couleur[$cptCouleur], $d['titre']);
$cptCouleur++;
}
$layer->setBarGap(0.2, 0);
$c->yAxis->setAutoScale(0.2);
if( $c->makeChart($this->path.$file) === TRUE ){
$return = $file;
}
else{ $return = FALSE;
}
}
}
return $return;
}
}

View File

@ -0,0 +1,23 @@
<?php
class Scores_Mobile_Detect
{
public function isMobile()
{
if (isset($_SERVER['HTTP_X_WAP_PROFILE']) || isset($_SERVER['HTTP_PROFILE']))
return true;
if (isset ($_SERVER['HTTP_USER_AGENT']))
{
if (strpos ($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false)
return true;
if (strpos ($_SERVER['HTTP_USER_AGENT'], 'Opera Mini') !== false)
return true;
}
if (preg_match('#Android|BlackBerry|Cellphone|iPhone|iPod|hiptop|HTC|MIDP-2\.|MMEF20|MOT-V|NetFront|Newt|Nintendo Wii|Nintendo DS|Nitro|Nokia|Opera Mobi|Palm|PlayStation Portable|PSP|portalmmm|SonyEricsson|Symbian|UP.Browser|UP.Link|webOS|Windows CE|WinWAP|YahooSeeker/M1A1-R2D2|LGE VX|Maemo|phone)#', $_SERVER['HTTP_USER_AGENT']))
return true;
return false;
}
}

View File

@ -184,8 +184,6 @@ class Scores_Partner_Report
//Ratios
$ratio = '';
require_once 'Finance/RatiosData.php';
require_once 'Finance/RatiosGraph.php';
$this->data->Ratios->siret = $infos->Identite->siret;
$this->data->Ratios->id = $infos->Identite->id;
@ -280,7 +278,7 @@ class Scores_Partner_Report
$tabRatio = array( $ratio => $tabRatio[$ratio] );
}
$ratiosData = new RatiosData($infos->Ratios);
$ratiosData = new Scores_Finance_Ratios_Data($infos->Ratios);
$nbBilanN = $ratiosData->getNbBilan('N');
$nbBilanC = $ratiosData->getNbBilan('C');
@ -292,7 +290,7 @@ class Scores_Partner_Report
if ($nbBilanN!=0 || $nbBilanC!=0)
{
//Génération Graphique evolution
$ratiosGraph = new RatiosGraph($this->siret, $this->id);
$ratiosGraph = new Scores_Finance_Ratios_Graph($siren);
$infosAnnee = $ratiosData->getBilansInfo($typeBilan);
$annees = array_keys($infosAnnee);
@ -331,7 +329,7 @@ class Scores_Partner_Report
//Bilans
$typeBilan = 'N';
$this->data->Bilans->typeBilan = $typeBilan;
$ratiosData = new RatiosData($infos->Ratios);
$ratiosData = new Scores_Finance_Ratios_Data($infos->Ratios);
$nbBilanN = $ratiosData->getNbBilan('N');
$nbBilanC = $ratiosData->getNbBilan('C');
@ -348,7 +346,7 @@ class Scores_Partner_Report
$infosAnnee = $ratiosData->getBilansInfo($typeBilan);
$annees = array_keys($infosAnnee);
$ratiosGraph = new RatiosGraph($this->siret, $this->id);
$ratiosGraph = new Scores_Finance_Ratios_Graph($siren);
$tabRatioActif = array(
'r59' => array( 'titre' => 'Actif Immobilisé Net', 'class' => 'subhead'),
@ -546,7 +544,7 @@ class Scores_Partner_Report
}
//Formattage des données
$ratiosData = new RatiosData($infos->Ratios);
$ratiosData = new Scores_Finance_Ratios_Data($infos->Ratios);
$nbBilanN = $ratiosData->getNbBilan('N');
$nbBilanC = $ratiosData->getNbBilan('C');
@ -567,7 +565,7 @@ class Scores_Partner_Report
sort($annees);
if (count($annees)>1){
//Générer les différents graphiques d'évolutions
$ratiosGraph = new RatiosGraph($this->siret, $this->id);
$ratiosGraph = new Scores_Finance_Ratios_Graph($siren);
$tabGraphEvol = array();
foreach($tabRatio as $idRatio => $infoRatio){
$dataGraphEvol = array();

View File

@ -1,5 +1,5 @@
<?php
class Scores_Wkhtmltopdf
class Scores_Wkhtml_Pdf
{
protected $wkhtml;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,5 @@
- Récupérer l'extension de ChartDirector pour PHP et le placer dans le répertoire des extensions
- Copier le répertoire "fonts" dans le répertoire des extensions PHP
Attention, pour que les fonts soient accessible placer le répertoire des extensions en chmod 755
- Placer la clé dans le répertoire des extensions PHP

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,622 @@
<?php
/**
* Copyright 2011 Craig Campbell
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Server Side Chrome PHP debugger class
*
* @package ChromePhp
* @author Craig Campbell <iamcraigcampbell@gmail.com>
*/
class ChromePhp
{
/**
* @var string
*/
const COOKIE_NAME = 'chromephp_log';
/**
* @var string
*/
const VERSION = '2.2.3';
/**
* @var string
*/
const LOG_PATH = 'log_path';
/**
* @var string
*/
const URL_PATH = 'url_path';
/**
* @var string
*/
const STORE_LOGS = 'store_logs';
/**
* @var string
*/
const BACKTRACE_LEVEL = 'backtrace_level';
/**
* @var string
*/
const MAX_TRANSFER = 'max_transfer';
/**
* @var string
*/
const LOG = 'log';
/**
* @var string
*/
const WARN = 'warn';
/**
* @var string
*/
const ERROR = 'error';
/**
* @var string
*/
const GROUP = 'group';
/**
* @var string
*/
const INFO = 'info';
/**
* @var string
*/
const GROUP_END = 'groupEnd';
/**
* @var string
*/
const GROUP_COLLAPSED = 'groupCollapsed';
/**
* @var string
*/
const COOKIE_SIZE_WARNING = 'cookie size of 4kb exceeded! try ChromePhp::useFile() to pull the log data from disk';
/**
* @var string
*/
protected $_php_version;
/**
* @var int
*/
protected $_timestamp;
/**
* @var array
*/
protected $_json = array(
'version' => self::VERSION,
'columns' => array('label', 'log', 'backtrace', 'type'),
'rows' => array()
);
/**
* @var array
*/
protected $_backtraces = array();
/**
* @var bool
*/
protected $_error_triggered = false;
/**
* @var array
*/
protected $_settings = array(
self::LOG_PATH => null,
self::URL_PATH=> null,
self::STORE_LOGS => false,
self::BACKTRACE_LEVEL => 1,
self::MAX_TRANSFER => 3000
);
/**
* @var ChromePhp
*/
protected static $_instance;
/**
* Prevent recursion when working with objects referring to each other
*
* @var array
*/
protected $_processed = array();
/**
* constructor
*/
private function __construct()
{
$this->_deleteCookie();
$this->_php_version = phpversion();
$this->_timestamp = $this->_php_version >= 5.1 ? $_SERVER['REQUEST_TIME'] : time();
$this->_json['request_uri'] = $_SERVER['REQUEST_URI'];
}
/**
* gets instance of this class
*
* @return ChromePhp
*/
public static function getInstance()
{
if (self::$_instance === null) {
self::$_instance = new ChromePhp();
}
return self::$_instance;
}
/**
* logs a variable to the console
*
* @param string label
* @param mixed value
* @param string severity ChromePhp::LOG || ChromePhp::WARN || ChromePhp::ERROR
* @return void
*/
public static function log()
{
$args = func_get_args();
$severity = count($args) == 3 ? array_pop($args) : '';
// save precious bytes in the cookie
if ($severity == self::LOG) {
$severity = '';
}
return self::_log($args + array('type' => $severity));
}
/**
* logs a warning to the console
*
* @param string label
* @param mixed value
* @return void
*/
public static function warn()
{
return self::_log(func_get_args() + array('type' => self::WARN));
}
/**
* logs an error to the console
*
* @param string label
* @param mixed value
* @return void
*/
public static function error()
{
return self::_log(func_get_args() + array('type' => self::ERROR));
}
/**
* sends a group log
*
* @param string value
*/
public static function group()
{
return self::_log(func_get_args() + array('type' => self::GROUP));
}
/**
* sends an info log
*
* @param string value
*/
public static function info()
{
return self::_log(func_get_args() + array('type' => self::INFO));
}
/**
* sends a collapsed group log
*
* @param string value
*/
public static function groupCollapsed()
{
return self::_log(func_get_args() + array('type' => self::GROUP_COLLAPSED));
}
/**
* ends a group log
*
* @param string value
*/
public static function groupEnd()
{
return self::_log(func_get_args() + array('type' => self::GROUP_END));
}
/**
* internal logging call
*
* @param string $type
* @return void
*/
protected static function _log(array $args)
{
$type = $args['type'];
unset($args['type']);
// nothing passed in, don't do anything
if (count($args) == 0 && $type != self::GROUP_END) {
return;
}
// default to single
$label = null;
$value = isset($args[0]) ? $args[0] : '';
$logger = self::getInstance();
if ($logger->_error_triggered) {
return;
}
// if there are two values passed in then the first one is the label
if (count($args) == 2) {
$label = $args[0];
$value = $args[1];
}
$logger->_processed = array();
$value = $logger->_convert($value);
$backtrace = debug_backtrace(false);
$level = $logger->getSetting(self::BACKTRACE_LEVEL);
$backtrace_message = 'unknown';
if (isset($backtrace[$level]['file']) && isset($backtrace[$level]['line'])) {
$backtrace_message = $backtrace[$level]['file'] . ' : ' . $backtrace[$level]['line'];
}
$logger->_addRow($label, $value, $backtrace_message, $type);
}
/**
* converts an object to a better format for logging
*
* @param Object
* @return array
*/
protected function _convert($object)
{
// if this isn't an object then just return it
if (!is_object($object)) {
return $object;
}
//Mark this object as processed so we don't convert it twice and it
//Also avoid recursion when objects refer to each other
$this->_processed[] = $object;
$object_as_array = array();
// first add the class name
$object_as_array['class'] = get_class($object);
// loop through object vars
$object_vars = get_object_vars($object);
foreach ($object_vars as $key => $value) {
// same instance as parent object
if ($value === $object || in_array($value, $this->_processed, true)) {
$value = 'recursion - parent object [' . get_class($value) . ']';
}
$object_as_array[$key] = $this->_convert($value);
}
$reflection = new ReflectionClass($object);
// loop through the properties and add those
foreach ($reflection->getProperties() as $property) {
// if one of these properties was already added above then ignore it
if (array_key_exists($property->getName(), $object_vars)) {
continue;
}
$type = $this->_getPropertyKey($property);
if ($this->_php_version >= 5.3) {
$property->setAccessible(true);
}
try {
$value = $property->getValue($object);
} catch (ReflectionException $e) {
$value = 'only PHP 5.3 can access private/protected properties';
}
// same instance as parent object
if ($value === $object || in_array($value, $this->_processed, true)) {
$value = 'recursion - parent object [' . get_class($value) . ']';
}
$object_as_array[$type] = $this->_convert($value);
}
return $object_as_array;
}
/**
* takes a reflection property and returns a nicely formatted key of the property name
*
* @param ReflectionProperty
* @return string
*/
protected function _getPropertyKey(ReflectionProperty $property)
{
$static = $property->isStatic() ? ' static' : '';
if ($property->isPublic()) {
return 'public' . $static . ' ' . $property->getName();
}
if ($property->isProtected()) {
return 'protected' . $static . ' ' . $property->getName();
}
if ($property->isPrivate()) {
return 'private' . $static . ' ' . $property->getName();
}
}
/**
* adds a value to the cookie
*
* @var mixed
* @return void
*/
protected function _addRow($label, $log, $backtrace, $type)
{
// if this is logged on the same line for example in a loop, set it to null to save space
if (in_array($backtrace, $this->_backtraces)) {
$backtrace = null;
}
if ($backtrace !== null) {
$this->_backtraces[] = $backtrace;
}
$this->_clearRows();
$row = array($label, $log, $backtrace, $type);
// if we are in cookie mode and the row won't fit then don't add it
if ($this->getSetting(self::LOG_PATH) === null && !$this->_willFit($row)) {
return $this->_cookieMonster();
}
$this->_json['rows'][] = $row;
$this->_writeCookie();
}
/**
* clears existing rows in special cases
*
* for ajax requests chrome will be listening for cookie changes
* this means we can send the cookie data one row at a time as it comes in
*
* @return void
*/
protected function _clearRows()
{
// if we are in file mode we want the file to have all the log data
if ($this->getSetting(self::LOG_PATH) !== null) {
return;
}
// X-Requested-With header not present or not equal to XMLHttpRequest
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
return;
}
if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {
return;
}
$this->_json['rows'] = array();
}
/**
* determines if this row will fit in the cookie
*
* @param array $row
* @return bool
*/
protected function _willFit($row)
{
$json = $this->_json;
$json['rows'][] = $row;
// if we don't have multibyte string length available just use regular string length
// this doesn't have to be perfect, just want to prevent sending more data
// than chrome or apache can handle in a cookie
$encoded_string = $this->_encode($json);
$size = function_exists('mb_strlen') ? mb_strlen($encoded_string) : strlen($encoded_string);
// if the size is greater than the max transfer size
if ($size > $this->getSetting(self::MAX_TRANSFER)) {
return false;
}
return true;
}
/**
* writes the cookie
*
* @return bool
*/
protected function _writeCookie()
{
// if we are going to use a file then use that
// here we only want to json_encode
if ($this->getSetting(self::LOG_PATH) !== null) {
return $this->_writeToFile(json_encode($this->_json));
}
return $this->_setCookie($this->_json);
}
/**
* deletes the main cookie
*
* @return bool
*/
protected function _deleteCookie()
{
return setcookie(self::COOKIE_NAME, null, 1);
}
/**
* encodes the data to be sent along with the request
*
* @param array $data
* @return string
*/
protected function _encode($data)
{
return base64_encode(utf8_encode(json_encode($data)));
}
/**
* sets the main cookie
*
* @param array
* @return bool
*/
protected function _setCookie($data)
{
return setcookie(self::COOKIE_NAME, $this->_encode($data), time() + 30);
}
/**
* adds a setting
*
* @param string key
* @param mixed value
* @return void
*/
public function addSetting($key, $value)
{
$this->_settings[$key] = $value;
}
/**
* add ability to set multiple settings in one call
*
* @param array $settings
* @return void
*/
public function addSettings(array $settings)
{
foreach ($settings as $key => $value) {
$this->addSetting($key, $value);
}
}
/**
* gets a setting
*
* @param string key
* @return mixed
*/
public function getSetting($key)
{
if (!isset($this->_settings[$key])) {
return null;
}
return $this->_settings[$key];
}
/**
* this will allow you to specify a path on disk and a uri to access a static file that can store json
*
* this allows you to log data that is more than 4k
*
* @param string path to directory on disk to keep log files
* @param string url path to url to access the files
*/
public static function useFile($path, $url)
{
$logger = self::getInstance();
$logger->addSetting(self::LOG_PATH, rtrim($path, '/'));
$logger->addSetting(self::URL_PATH, rtrim($url, '/'));
}
/**
* handles cases when there is too much data
*
* @param string
* @return void
*/
protected function _cookieMonster()
{
$this->_error_triggered = true;
$this->_json['rows'][] = array(null, self::COOKIE_SIZE_WARNING, 'ChromePhp', self::WARN);
return $this->_writeCookie();
}
/**
* writes data to a file
*
* @param string
* @return void
*/
protected function _writeToFile($json)
{
// if the log path is not setup then create it
if (!is_dir($this->getSetting(self::LOG_PATH))) {
mkdir($this->getSetting(self::LOG_PATH));
}
$file_name = 'last_run.json';
if ($this->getSetting(self::STORE_LOGS)) {
$file_name = 'run_' . $this->_timestamp . '.json';
}
file_put_contents($this->getSetting(self::LOG_PATH) . '/' . $file_name, $json);
$data = array(
'uri' => $this->getSetting(self::URL_PATH) . '/' . $file_name,
'request_uri' => $_SERVER['REQUEST_URI'],
'time' => $this->_timestamp,
'version' => self::VERSION
);
return $this->_setCookie($data);
}
}
?>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,104 @@
<?php
//
// FPDI - Version 1.3.2
//
// Copyright 2004-2010 Setasign - Jan Slabon
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
if (!defined('ORD_z'))
define('ORD_z',ord('z'));
if (!defined('ORD_exclmark'))
define('ORD_exclmark', ord('!'));
if (!defined('ORD_u'))
define('ORD_u', ord('u'));
if (!defined('ORD_tilde'))
define('ORD_tilde', ord('~'));
$__tmp = version_compare(phpversion(), "5") == -1 ? array('FilterASCII85') : array('FilterASCII85', false);
if (!call_user_func_array('class_exists', $__tmp)) {
class FilterASCII85 {
function error($msg) {
die($msg);
}
function decode($in) {
$out = '';
$state = 0;
$chn = null;
$l = strlen($in);
for ($k = 0; $k < $l; ++$k) {
$ch = ord($in[$k]) & 0xff;
if ($ch == ORD_tilde) {
break;
}
if (preg_match('/^\s$/',chr($ch))) {
continue;
}
if ($ch == ORD_z && $state == 0) {
$out .= chr(0).chr(0).chr(0).chr(0);
continue;
}
if ($ch < ORD_exclmark || $ch > ORD_u) {
return $this->error('Illegal character in ASCII85Decode.');
}
$chn[$state++] = $ch - ORD_exclmark;
if ($state == 5) {
$state = 0;
$r = 0;
for ($j = 0; $j < 5; ++$j)
$r = $r * 85 + $chn[$j];
$out .= chr($r >> 24);
$out .= chr($r >> 16);
$out .= chr($r >> 8);
$out .= chr($r);
}
}
$r = 0;
if ($state == 1)
return $this->error('Illegal length in ASCII85Decode.');
if ($state == 2) {
$r = $chn[0] * 85 * 85 * 85 * 85 + ($chn[1]+1) * 85 * 85 * 85;
$out .= chr($r >> 24);
}
else if ($state == 3) {
$r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85 + ($chn[2]+1) * 85 * 85;
$out .= chr($r >> 24);
$out .= chr($r >> 16);
}
else if ($state == 4) {
$r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85 + $chn[2] * 85 * 85 + ($chn[3]+1) * 85 ;
$out .= chr($r >> 24);
$out .= chr($r >> 16);
$out .= chr($r >> 8);
}
return $out;
}
function encode($in) {
return $this->error("ASCII85 encoding not implemented.");
}
}
}
unset($__tmp);

View File

@ -0,0 +1,33 @@
<?php
//
// FPDI - Version 1.3.2
//
// Copyright 2004-2010 Setasign - Jan Slabon
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
require_once('FilterASCII85.php');
class FilterASCII85_FPDI extends FilterASCII85 {
var $fpdi;
function FPDI_FilterASCII85(&$fpdi) {
$this->fpdi =& $fpdi;
}
function error($msg) {
$this->fpdi->error($msg);
}
}

View File

@ -0,0 +1,160 @@
<?php
//
// FPDI - Version 1.3.2
//
// Copyright 2004-2010 Setasign - Jan Slabon
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
$__tmp = version_compare(phpversion(), "5") == -1 ? array('FilterLZW') : array('FilterLZW', false);
if (!call_user_func_array('class_exists', $__tmp)) {
class FilterLZW {
var $sTable = array();
var $data = null;
var $dataLength = 0;
var $tIdx;
var $bitsToGet = 9;
var $bytePointer;
var $bitPointer;
var $nextData = 0;
var $nextBits = 0;
var $andTable = array(511, 1023, 2047, 4095);
function error($msg) {
die($msg);
}
/**
* Method to decode LZW compressed data.
*
* @param string data The compressed data.
*/
function decode($data) {
if($data[0] == 0x00 && $data[1] == 0x01) {
$this->error('LZW flavour not supported.');
}
$this->initsTable();
$this->data = $data;
$this->dataLength = strlen($data);
// Initialize pointers
$this->bytePointer = 0;
$this->bitPointer = 0;
$this->nextData = 0;
$this->nextBits = 0;
$oldCode = 0;
$string = '';
$uncompData = '';
while (($code = $this->getNextCode()) != 257) {
if ($code == 256) {
$this->initsTable();
$code = $this->getNextCode();
if ($code == 257) {
break;
}
$uncompData .= $this->sTable[$code];
$oldCode = $code;
} else {
if ($code < $this->tIdx) {
$string = $this->sTable[$code];
$uncompData .= $string;
$this->addStringToTable($this->sTable[$oldCode], $string[0]);
$oldCode = $code;
} else {
$string = $this->sTable[$oldCode];
$string = $string.$string[0];
$uncompData .= $string;
$this->addStringToTable($string);
$oldCode = $code;
}
}
}
return $uncompData;
}
/**
* Initialize the string table.
*/
function initsTable() {
$this->sTable = array();
for ($i = 0; $i < 256; $i++)
$this->sTable[$i] = chr($i);
$this->tIdx = 258;
$this->bitsToGet = 9;
}
/**
* Add a new string to the string table.
*/
function addStringToTable ($oldString, $newString='') {
$string = $oldString.$newString;
// Add this new String to the table
$this->sTable[$this->tIdx++] = $string;
if ($this->tIdx == 511) {
$this->bitsToGet = 10;
} else if ($this->tIdx == 1023) {
$this->bitsToGet = 11;
} else if ($this->tIdx == 2047) {
$this->bitsToGet = 12;
}
}
// Returns the next 9, 10, 11 or 12 bits
function getNextCode() {
if ($this->bytePointer == $this->dataLength) {
return 257;
}
$this->nextData = ($this->nextData << 8) | (ord($this->data[$this->bytePointer++]) & 0xff);
$this->nextBits += 8;
if ($this->nextBits < $this->bitsToGet) {
$this->nextData = ($this->nextData << 8) | (ord($this->data[$this->bytePointer++]) & 0xff);
$this->nextBits += 8;
}
$code = ($this->nextData >> ($this->nextBits - $this->bitsToGet)) & $this->andTable[$this->bitsToGet-9];
$this->nextBits -= $this->bitsToGet;
return $code;
}
function encode($in) {
$this->error("LZW encoding not implemented.");
}
}
}
unset($__tmp);

View File

@ -0,0 +1,33 @@
<?php
//
// FPDI - Version 1.3.2
//
// Copyright 2004-2010 Setasign - Jan Slabon
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
require_once('FilterLZW.php');
class FilterLZW_FPDI extends FilterLZW {
var $fpdi;
function FilterLZW_FPDI(&$fpdi) {
$this->fpdi =& $fpdi;
}
function error($msg) {
$this->fpdi->error($msg);
}
}

View File

@ -0,0 +1,409 @@
<?php
//
// FPDF_TPL - Version 1.1.4
//
// Copyright 2004-2010 Setasign - Jan Slabon
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
class FPDF_TPL extends FPDF {
/**
* Array of Tpl-Data
* @var array
*/
var $tpls = array();
/**
* Current Template-ID
* @var int
*/
var $tpl = 0;
/**
* "In Template"-Flag
* @var boolean
*/
var $_intpl = false;
/**
* Nameprefix of Templates used in Resources-Dictonary
* @var string A String defining the Prefix used as Template-Object-Names. Have to beginn with an /
*/
var $tplprefix = "/TPL";
/**
* Resources used By Templates and Pages
* @var array
*/
var $_res = array();
/**
* Last used Template data
*
* @var array
*/
var $lastUsedTemplateData = array();
/**
* Start a Template
*
* This method starts a template. You can give own coordinates to build an own sized
* Template. Pay attention, that the margins are adapted to the new templatesize.
* If you want to write outside the template, for example to build a clipped Template,
* you have to set the Margins and "Cursor"-Position manual after beginTemplate-Call.
*
* If no parameter is given, the template uses the current page-size.
* The Method returns an ID of the current Template. This ID is used later for using this template.
* Warning: A created Template is used in PDF at all events. Still if you don't use it after creation!
*
* @param int $x The x-coordinate given in user-unit
* @param int $y The y-coordinate given in user-unit
* @param int $w The width given in user-unit
* @param int $h The height given in user-unit
* @return int The ID of new created Template
*/
function beginTemplate($x=null, $y=null, $w=null, $h=null) {
if ($this->page <= 0)
$this->error("You have to add a page to fpdf first!");
if ($x == null)
$x = 0;
if ($y == null)
$y = 0;
if ($w == null)
$w = $this->w;
if ($h == null)
$h = $this->h;
// Save settings
$this->tpl++;
$tpl =& $this->tpls[$this->tpl];
$tpl = array(
'o_x' => $this->x,
'o_y' => $this->y,
'o_AutoPageBreak' => $this->AutoPageBreak,
'o_bMargin' => $this->bMargin,
'o_tMargin' => $this->tMargin,
'o_lMargin' => $this->lMargin,
'o_rMargin' => $this->rMargin,
'o_h' => $this->h,
'o_w' => $this->w,
'buffer' => '',
'x' => $x,
'y' => $y,
'w' => $w,
'h' => $h
);
$this->SetAutoPageBreak(false);
// Define own high and width to calculate possitions correct
$this->h = $h;
$this->w = $w;
$this->_intpl = true;
$this->SetXY($x+$this->lMargin, $y+$this->tMargin);
$this->SetRightMargin($this->w-$w+$this->rMargin);
return $this->tpl;
}
/**
* End Template
*
* This method ends a template and reset initiated variables on beginTemplate.
*
* @return mixed If a template is opened, the ID is returned. If not a false is returned.
*/
function endTemplate() {
if ($this->_intpl) {
$this->_intpl = false;
$tpl =& $this->tpls[$this->tpl];
$this->SetXY($tpl['o_x'], $tpl['o_y']);
$this->tMargin = $tpl['o_tMargin'];
$this->lMargin = $tpl['o_lMargin'];
$this->rMargin = $tpl['o_rMargin'];
$this->h = $tpl['o_h'];
$this->w = $tpl['o_w'];
$this->SetAutoPageBreak($tpl['o_AutoPageBreak'], $tpl['o_bMargin']);
return $this->tpl;
} else {
return false;
}
}
/**
* Use a Template in current Page or other Template
*
* You can use a template in a page or in another template.
* You can give the used template a new size like you use the Image()-method.
* All parameters are optional. The width or height is calculated automaticaly
* if one is given. If no parameter is given the origin size as defined in
* beginTemplate() is used.
* The calculated or used width and height are returned as an array.
*
* @param int $tplidx A valid template-Id
* @param int $_x The x-position
* @param int $_y The y-position
* @param int $_w The new width of the template
* @param int $_h The new height of the template
* @retrun array The height and width of the template
*/
function useTemplate($tplidx, $_x=null, $_y=null, $_w=0, $_h=0) {
if ($this->page <= 0)
$this->error("You have to add a page to fpdf first!");
if (!isset($this->tpls[$tplidx]))
$this->error("Template does not exist!");
if ($this->_intpl) {
$this->_res['tpl'][$this->tpl]['tpls'][$tplidx] =& $this->tpls[$tplidx];
}
$tpl =& $this->tpls[$tplidx];
$w = $tpl['w'];
$h = $tpl['h'];
if ($_x == null)
$_x = 0;
if ($_y == null)
$_y = 0;
$_x += $tpl['x'];
$_y += $tpl['y'];
$wh = $this->getTemplateSize($tplidx, $_w, $_h);
$_w = $wh['w'];
$_h = $wh['h'];
$tData = array(
'x' => $this->x,
'y' => $this->y,
'w' => $_w,
'h' => $_h,
'scaleX' => ($_w/$w),
'scaleY' => ($_h/$h),
'tx' => $_x,
'ty' => ($this->h-$_y-$_h),
'lty' => ($this->h-$_y-$_h) - ($this->h-$h) * ($_h/$h)
);
$this->_out(sprintf("q %.4F 0 0 %.4F %.4F %.4F cm", $tData['scaleX'], $tData['scaleY'], $tData['tx']*$this->k, $tData['ty']*$this->k)); // Translate
$this->_out(sprintf('%s%d Do Q', $this->tplprefix, $tplidx));
$this->lastUsedTemplateData = $tData;
return array("w" => $_w, "h" => $_h);
}
/**
* Get The calculated Size of a Template
*
* If one size is given, this method calculates the other one.
*
* @param int $tplidx A valid template-Id
* @param int $_w The width of the template
* @param int $_h The height of the template
* @return array The height and width of the template
*/
function getTemplateSize($tplidx, $_w=0, $_h=0) {
if (!$this->tpls[$tplidx])
return false;
$tpl =& $this->tpls[$tplidx];
$w = $tpl['w'];
$h = $tpl['h'];
if ($_w == 0 and $_h == 0) {
$_w = $w;
$_h = $h;
}
if($_w==0)
$_w = $_h*$w/$h;
if($_h==0)
$_h = $_w*$h/$w;
return array("w" => $_w, "h" => $_h);
}
/**
* See FPDF/TCPDF-Documentation ;-)
*/
function SetFont($family, $style='', $size=0, $fontfile='') {
if (!is_subclass_of($this, 'TCPDF') && func_num_args() > 3) {
$this->Error('More than 3 arguments for the SetFont method are only available in TCPDF.');
}
/**
* force the resetting of font changes in a template
*/
if ($this->_intpl)
$this->FontFamily = '';
parent::SetFont($family, $style, $size, $fontfile);
$fontkey = $this->FontFamily.$this->FontStyle;
if ($this->_intpl) {
$this->_res['tpl'][$this->tpl]['fonts'][$fontkey] =& $this->fonts[$fontkey];
} else {
$this->_res['page'][$this->page]['fonts'][$fontkey] =& $this->fonts[$fontkey];
}
}
/**
* See FPDF/TCPDF-Documentation ;-)
*/
function Image($file, $x, $y, $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0, $fitbox = false, $hidden = false) {
if (!is_subclass_of($this, 'TCPDF') && func_num_args() > 7) {
$this->Error('More than 7 arguments for the Image method are only available in TCPDF.');
}
parent::Image($file, $x, $y, $w, $h, $type, $link, $align, $resize, $dpi, $palign, $ismask, $imgmask, $border, $fitbox, $hidden);
if ($this->_intpl) {
$this->_res['tpl'][$this->tpl]['images'][$file] =& $this->images[$file];
} else {
$this->_res['page'][$this->page]['images'][$file] =& $this->images[$file];
}
}
/**
* See FPDF-Documentation ;-)
*
* AddPage is not available when you're "in" a template.
*/
function AddPage($orientation='', $format='') {
if ($this->_intpl)
$this->Error('Adding pages in templates isn\'t possible!');
parent::AddPage($orientation, $format);
}
/**
* Preserve adding Links in Templates ...won't work
*/
function Link($x, $y, $w, $h, $link, $spaces=0) {
if (!is_subclass_of($this, 'TCPDF') && func_num_args() > 5) {
$this->Error('More than 5 arguments for the Image method are only available in TCPDF.');
}
if ($this->_intpl)
$this->Error('Using links in templates aren\'t possible!');
parent::Link($x, $y, $w, $h, $link, $spaces);
}
function AddLink() {
if ($this->_intpl)
$this->Error('Adding links in templates aren\'t possible!');
return parent::AddLink();
}
function SetLink($link, $y=0, $page=-1) {
if ($this->_intpl)
$this->Error('Setting links in templates aren\'t possible!');
parent::SetLink($link, $y, $page);
}
/**
* Private Method that writes the form xobjects
*/
function _putformxobjects() {
$filter=($this->compress) ? '/Filter /FlateDecode ' : '';
reset($this->tpls);
foreach($this->tpls AS $tplidx => $tpl) {
$p=($this->compress) ? gzcompress($tpl['buffer']) : $tpl['buffer'];
$this->_newobj();
$this->tpls[$tplidx]['n'] = $this->n;
$this->_out('<<'.$filter.'/Type /XObject');
$this->_out('/Subtype /Form');
$this->_out('/FormType 1');
$this->_out(sprintf('/BBox [%.2F %.2F %.2F %.2F]',
// llx
$tpl['x']*$this->k,
// lly
-$tpl['y']*$this->k,
// urx
($tpl['w']+$tpl['x'])*$this->k,
// ury
($tpl['h']-$tpl['y'])*$this->k
));
if ($tpl['x'] != 0 || $tpl['y'] != 0) {
$this->_out(sprintf('/Matrix [1 0 0 1 %.5F %.5F]',
-$tpl['x']*$this->k*2, $tpl['y']*$this->k*2
));
}
$this->_out('/Resources ');
$this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
if (isset($this->_res['tpl'][$tplidx]['fonts']) && count($this->_res['tpl'][$tplidx]['fonts'])) {
$this->_out('/Font <<');
foreach($this->_res['tpl'][$tplidx]['fonts'] as $font)
$this->_out('/F'.$font['i'].' '.$font['n'].' 0 R');
$this->_out('>>');
}
if(isset($this->_res['tpl'][$tplidx]['images']) && count($this->_res['tpl'][$tplidx]['images']) ||
isset($this->_res['tpl'][$tplidx]['tpls']) && count($this->_res['tpl'][$tplidx]['tpls']))
{
$this->_out('/XObject <<');
if (isset($this->_res['tpl'][$tplidx]['images']) && count($this->_res['tpl'][$tplidx]['images'])) {
foreach($this->_res['tpl'][$tplidx]['images'] as $image)
$this->_out('/I'.$image['i'].' '.$image['n'].' 0 R');
}
if (isset($this->_res['tpl'][$tplidx]['tpls']) && count($this->_res['tpl'][$tplidx]['tpls'])) {
foreach($this->_res['tpl'][$tplidx]['tpls'] as $i => $tpl)
$this->_out($this->tplprefix.$i.' '.$tpl['n'].' 0 R');
}
$this->_out('>>');
}
$this->_out('>>');
$this->_out('/Length '.strlen($p).' >>');
$this->_putstream($p);
$this->_out('endobj');
}
}
/**
* Overwritten to add _putformxobjects() after _putimages()
*
*/
function _putimages() {
parent::_putimages();
$this->_putformxobjects();
}
function _putxobjectdict() {
parent::_putxobjectdict();
if (count($this->tpls)) {
foreach($this->tpls as $tplidx => $tpl) {
$this->_out(sprintf('%s%d %d 0 R', $this->tplprefix, $tplidx, $tpl['n']));
}
}
}
/**
* Private Method
*/
function _out($s) {
if ($this->state==2 && $this->_intpl) {
$this->tpls[$this->tpl]['buffer'] .= $s."\n";
} else {
parent::_out($s);
}
}
}

View File

@ -0,0 +1,504 @@
<?php
//
// FPDI - Version 1.3.2
//
// Copyright 2004-2010 Setasign - Jan Slabon
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
define('FPDI_VERSION','1.3.2');
// Check for TCPDF and remap TCPDF to FPDF
$__tmp = version_compare(phpversion(), "5") == -1 ? array('TCPDF') : array('TCPDF', false);
if (call_user_func_array('class_exists', $__tmp)) {
require_once('fpdi2tcpdf_bridge.php');
}
unset($__tmp);
require_once('fpdf_tpl.php');
require_once('fpdi_pdf_parser.php');
class FPDI extends FPDF_TPL {
/**
* Actual filename
* @var string
*/
var $current_filename;
/**
* Parser-Objects
* @var array
*/
var $parsers;
/**
* Current parser
* @var object
*/
var $current_parser;
/**
* object stack
* @var array
*/
var $_obj_stack;
/**
* done object stack
* @var array
*/
var $_don_obj_stack;
/**
* Current Object Id.
* @var integer
*/
var $_current_obj_id;
/**
* The name of the last imported page box
* @var string
*/
var $lastUsedPageBox;
var $_importedPages = array();
/**
* Set a source-file
*
* @param string $filename a valid filename
* @return int number of available pages
*/
function setSourceFile($filename) {
$this->current_filename = $filename;
$fn =& $this->current_filename;
if (!isset($this->parsers[$fn]))
$this->parsers[$fn] = new fpdi_pdf_parser($fn, $this);
$this->current_parser =& $this->parsers[$fn];
return $this->parsers[$fn]->getPageCount();
}
/**
* Import a page
*
* @param int $pageno pagenumber
* @return int Index of imported page - to use with fpdf_tpl::useTemplate()
*/
function importPage($pageno, $boxName='/CropBox') {
if ($this->_intpl) {
return $this->error('Please import the desired pages before creating a new template.');
}
$fn =& $this->current_filename;
// check if page already imported
$pageKey = $fn.((int)$pageno).$boxName;
if (isset($this->_importedPages[$pageKey]))
return $this->_importedPages[$pageKey];
$parser =& $this->parsers[$fn];
$parser->setPageno($pageno);
if (!in_array($boxName, $parser->availableBoxes))
return $this->Error(sprintf('Unknown box: %s', $boxName));
$pageboxes = $parser->getPageBoxes($pageno);
/**
* MediaBox
* CropBox: Default -> MediaBox
* BleedBox: Default -> CropBox
* TrimBox: Default -> CropBox
* ArtBox: Default -> CropBox
*/
if (!isset($pageboxes[$boxName]) && ($boxName == '/BleedBox' || $boxName == '/TrimBox' || $boxName == '/ArtBox'))
$boxName = '/CropBox';
if (!isset($pageboxes[$boxName]) && $boxName == '/CropBox')
$boxName = '/MediaBox';
if (!isset($pageboxes[$boxName]))
return false;
$this->lastUsedPageBox = $boxName;
$box = $pageboxes[$boxName];
$this->tpl++;
$this->tpls[$this->tpl] = array();
$tpl =& $this->tpls[$this->tpl];
$tpl['parser'] =& $parser;
$tpl['resources'] = $parser->getPageResources();
$tpl['buffer'] = $parser->getContent();
$tpl['box'] = $box;
// To build an array that can be used by PDF_TPL::useTemplate()
$this->tpls[$this->tpl] = array_merge($this->tpls[$this->tpl], $box);
// An imported page will start at 0,0 everytime. Translation will be set in _putformxobjects()
$tpl['x'] = 0;
$tpl['y'] = 0;
// handle rotated pages
$rotation = $parser->getPageRotation($pageno);
$tpl['_rotationAngle'] = 0;
if (isset($rotation[1]) && ($angle = $rotation[1] % 360) != 0) {
$steps = $angle / 90;
$_w = $tpl['w'];
$_h = $tpl['h'];
$tpl['w'] = $steps % 2 == 0 ? $_w : $_h;
$tpl['h'] = $steps % 2 == 0 ? $_h : $_w;
$tpl['_rotationAngle'] = $angle*-1;
}
$this->_importedPages[$pageKey] = $this->tpl;
return $this->tpl;
}
function getLastUsedPageBox() {
return $this->lastUsedPageBox;
}
function useTemplate($tplidx, $_x=null, $_y=null, $_w=0, $_h=0, $adjustPageSize=false) {
if ($adjustPageSize == true && is_null($_x) && is_null($_y)) {
$size = $this->getTemplateSize($tplidx, $_w, $_h);
$format = array($size['w'], $size['h']);
if ($format[0]!=$this->CurPageFormat[0] || $format[1]!=$this->CurPageFormat[1]) {
$this->w=$format[0];
$this->h=$format[1];
$this->wPt=$this->w*$this->k;
$this->hPt=$this->h*$this->k;
$this->PageBreakTrigger=$this->h-$this->bMargin;
$this->CurPageFormat=$format;
$this->PageSizes[$this->page]=array($this->wPt, $this->hPt);
}
}
$this->_out('q 0 J 1 w 0 j 0 G 0 g'); // reset standard values
$s = parent::useTemplate($tplidx, $_x, $_y, $_w, $_h);
$this->_out('Q');
return $s;
}
/**
* Private method, that rebuilds all needed objects of source files
*/
function _putimportedobjects() {
if (is_array($this->parsers) && count($this->parsers) > 0) {
foreach($this->parsers AS $filename => $p) {
$this->current_parser =& $this->parsers[$filename];
if (isset($this->_obj_stack[$filename]) && is_array($this->_obj_stack[$filename])) {
while(($n = key($this->_obj_stack[$filename])) !== null) {
$nObj = $this->current_parser->pdf_resolve_object($this->current_parser->c,$this->_obj_stack[$filename][$n][1]);
$this->_newobj($this->_obj_stack[$filename][$n][0]);
if ($nObj[0] == PDF_TYPE_STREAM) {
$this->pdf_write_value ($nObj);
} else {
$this->pdf_write_value ($nObj[1]);
}
$this->_out('endobj');
$this->_obj_stack[$filename][$n] = null; // free memory
unset($this->_obj_stack[$filename][$n]);
reset($this->_obj_stack[$filename]);
}
}
}
}
}
/**
* Private Method that writes the form xobjects
*/
function _putformxobjects() {
$filter=($this->compress) ? '/Filter /FlateDecode ' : '';
reset($this->tpls);
foreach($this->tpls AS $tplidx => $tpl) {
$p=($this->compress) ? gzcompress($tpl['buffer']) : $tpl['buffer'];
$this->_newobj();
$cN = $this->n; // TCPDF/Protection: rem current "n"
$this->tpls[$tplidx]['n'] = $this->n;
$this->_out('<<'.$filter.'/Type /XObject');
$this->_out('/Subtype /Form');
$this->_out('/FormType 1');
$this->_out(sprintf('/BBox [%.2F %.2F %.2F %.2F]',
(isset($tpl['box']['llx']) ? $tpl['box']['llx'] : $tpl['x'])*$this->k,
(isset($tpl['box']['lly']) ? $tpl['box']['lly'] : -$tpl['y'])*$this->k,
(isset($tpl['box']['urx']) ? $tpl['box']['urx'] : $tpl['w'] + $tpl['x'])*$this->k,
(isset($tpl['box']['ury']) ? $tpl['box']['ury'] : $tpl['h']-$tpl['y'])*$this->k
));
$c = 1;
$s = 0;
$tx = 0;
$ty = 0;
if (isset($tpl['box'])) {
$tx = -$tpl['box']['llx'];
$ty = -$tpl['box']['lly'];
if ($tpl['_rotationAngle'] <> 0) {
$angle = $tpl['_rotationAngle'] * M_PI/180;
$c=cos($angle);
$s=sin($angle);
switch($tpl['_rotationAngle']) {
case -90:
$tx = -$tpl['box']['lly'];
$ty = $tpl['box']['urx'];
break;
case -180:
$tx = $tpl['box']['urx'];
$ty = $tpl['box']['ury'];
break;
case -270:
$tx = $tpl['box']['ury'];
$ty = -$tpl['box']['llx'];
break;
}
}
} else if ($tpl['x'] != 0 || $tpl['y'] != 0) {
$tx = -$tpl['x']*2;
$ty = $tpl['y']*2;
}
$tx *= $this->k;
$ty *= $this->k;
if ($c != 1 || $s != 0 || $tx != 0 || $ty != 0) {
$this->_out(sprintf('/Matrix [%.5F %.5F %.5F %.5F %.5F %.5F]',
$c, $s, -$s, $c, $tx, $ty
));
}
$this->_out('/Resources ');
if (isset($tpl['resources'])) {
$this->current_parser =& $tpl['parser'];
$this->pdf_write_value($tpl['resources']); // "n" will be changed
} else {
$this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
if (isset($this->_res['tpl'][$tplidx]['fonts']) && count($this->_res['tpl'][$tplidx]['fonts'])) {
$this->_out('/Font <<');
foreach($this->_res['tpl'][$tplidx]['fonts'] as $font)
$this->_out('/F'.$font['i'].' '.$font['n'].' 0 R');
$this->_out('>>');
}
if(isset($this->_res['tpl'][$tplidx]['images']) && count($this->_res['tpl'][$tplidx]['images']) ||
isset($this->_res['tpl'][$tplidx]['tpls']) && count($this->_res['tpl'][$tplidx]['tpls']))
{
$this->_out('/XObject <<');
if (isset($this->_res['tpl'][$tplidx]['images']) && count($this->_res['tpl'][$tplidx]['images'])) {
foreach($this->_res['tpl'][$tplidx]['images'] as $image)
$this->_out('/I'.$image['i'].' '.$image['n'].' 0 R');
}
if (isset($this->_res['tpl'][$tplidx]['tpls']) && count($this->_res['tpl'][$tplidx]['tpls'])) {
foreach($this->_res['tpl'][$tplidx]['tpls'] as $i => $tpl)
$this->_out($this->tplprefix.$i.' '.$tpl['n'].' 0 R');
}
$this->_out('>>');
}
$this->_out('>>');
}
$nN = $this->n; // TCPDF: rem new "n"
$this->n = $cN; // TCPDF: reset to current "n"
$this->_out('/Length '.strlen($p).' >>');
$this->_putstream($p);
$this->_out('endobj');
$this->n = $nN; // TCPDF: reset to new "n"
}
$this->_putimportedobjects();
}
/**
* Rewritten to handle existing own defined objects
*/
function _newobj($obj_id=false,$onlynewobj=false) {
if (!$obj_id) {
$obj_id = ++$this->n;
}
//Begin a new object
if (!$onlynewobj) {
$this->offsets[$obj_id] = is_subclass_of($this, 'TCPDF') ? $this->bufferlen : strlen($this->buffer);
$this->_out($obj_id.' 0 obj');
$this->_current_obj_id = $obj_id; // for later use with encryption
}
return $obj_id;
}
/**
* Writes a value
* Needed to rebuild the source document
*
* @param mixed $value A PDF-Value. Structure of values see cases in this method
*/
function pdf_write_value(&$value)
{
if (is_subclass_of($this, 'TCPDF')) {
parent::pdf_write_value($value);
}
switch ($value[0]) {
case PDF_TYPE_TOKEN :
$this->_straightOut($value[1] . ' ');
break;
case PDF_TYPE_NUMERIC :
case PDF_TYPE_REAL :
if (is_float($value[1]) && $value[1] != 0) {
$this->_straightOut(rtrim(rtrim(sprintf('%F', $value[1]), '0'), '.') .' ');
} else {
$this->_straightOut($value[1] . ' ');
}
break;
case PDF_TYPE_ARRAY :
// An array. Output the proper
// structure and move on.
$this->_straightOut('[');
for ($i = 0; $i < count($value[1]); $i++) {
$this->pdf_write_value($value[1][$i]);
}
$this->_out(']');
break;
case PDF_TYPE_DICTIONARY :
// A dictionary.
$this->_straightOut('<<');
reset ($value[1]);
while (list($k, $v) = each($value[1])) {
$this->_straightOut($k . ' ');
$this->pdf_write_value($v);
}
$this->_straightOut('>>');
break;
case PDF_TYPE_OBJREF :
// An indirect object reference
// Fill the object stack if needed
$cpfn =& $this->current_parser->filename;
if (!isset($this->_don_obj_stack[$cpfn][$value[1]])) {
$this->_newobj(false,true);
$this->_obj_stack[$cpfn][$value[1]] = array($this->n, $value);
$this->_don_obj_stack[$cpfn][$value[1]] = array($this->n, $value); // Value is maybee obsolete!!!
}
$objid = $this->_don_obj_stack[$cpfn][$value[1]][0];
$this->_out($objid.' 0 R');
break;
case PDF_TYPE_STRING :
// A string.
$this->_straightOut('('.$value[1].')');
break;
case PDF_TYPE_STREAM :
// A stream. First, output the
// stream dictionary, then the
// stream data itself.
$this->pdf_write_value($value[1]);
$this->_out('stream');
$this->_out($value[2][1]);
$this->_out('endstream');
break;
case PDF_TYPE_HEX :
$this->_straightOut('<'.$value[1].'>');
break;
case PDF_TYPE_BOOLEAN :
$this->_straightOut($value[1] ? 'true ' : 'false ');
break;
case PDF_TYPE_NULL :
// The null object.
$this->_straightOut('null ');
break;
}
}
/**
* Modified so not each call will add a newline to the output.
*/
function _straightOut($s) {
if (!is_subclass_of($this, 'TCPDF')) {
if($this->state==2)
$this->pages[$this->page] .= $s;
else
$this->buffer .= $s;
} else {
if ($this->state == 2) {
if (isset($this->footerlen[$this->page]) AND ($this->footerlen[$this->page] > 0)) {
// puts data before page footer
$page = substr($this->getPageBuffer($this->page), 0, -$this->footerlen[$this->page]);
$footer = substr($this->getPageBuffer($this->page), -$this->footerlen[$this->page]);
$this->setPageBuffer($this->page, $page.' '.$s."\n".$footer);
} else {
$this->setPageBuffer($this->page, $s, true);
}
} else {
$this->setBuffer($s);
}
}
}
/**
* rewritten to close opened parsers
*
*/
function _enddoc() {
parent::_enddoc();
$this->_closeParsers();
}
/**
* close all files opened by parsers
*/
function _closeParsers() {
if ($this->state > 2 && count($this->parsers) > 0) {
foreach ($this->parsers as $k => $_){
$this->parsers[$k]->closeFile();
$this->parsers[$k] = null;
unset($this->parsers[$k]);
}
return true;
}
return false;
}
}

View File

@ -0,0 +1,171 @@
<?php
//
// FPDI - Version 1.3.2
//
// Copyright 2004-2010 Setasign - Jan Slabon
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
/**
* This class is used as a bridge between TCPDF and FPDI
* and will create the possibility to use both FPDF and TCPDF
* via one FPDI version.
*
* We'll simply remap TCPDF to FPDF again.
*
* It'll be loaded and extended by FPDF_TPL.
*/
class FPDF extends TCPDF {
function __get($name) {
switch ($name) {
case 'PDFVersion':
return $this->PDFVersion;
case 'k':
return $this->k;
default:
// Error handling
$this->Error('Cannot access protected property '.get_class($this).':$'.$name.' / Undefined property: '.get_class($this).'::$'.$name);
}
}
function __set($name, $value) {
switch ($name) {
case 'PDFVersion':
$this->PDFVersion = $value;
break;
default:
// Error handling
$this->Error('Cannot access protected property '.get_class($this).':$'.$name.' / Undefined property: '.get_class($this).'::$'.$name);
}
}
/**
* Encryption of imported data by FPDI
*
* @param array $value
*/
function pdf_write_value(&$value) {
switch ($value[0]) {
case PDF_TYPE_STRING :
if ($this->encrypted) {
$value[1] = $this->_unescape($value[1]);
$value[1] = $this->_RC4($this->_objectkey($this->_current_obj_id), $value[1]);
$value[1] = $this->_escape($value[1]);
}
break;
case PDF_TYPE_STREAM :
if ($this->encrypted) {
$value[2][1] = $this->_RC4($this->_objectkey($this->_current_obj_id), $value[2][1]);
}
break;
case PDF_TYPE_HEX :
if ($this->encrypted) {
$value[1] = $this->hex2str($value[1]);
$value[1] = $this->_RC4($this->_objectkey($this->_current_obj_id), $value[1]);
// remake hexstring of encrypted string
$value[1] = $this->str2hex($value[1]);
}
break;
}
}
/**
* Unescapes a PDF string
*
* @param string $s
* @return string
*/
function _unescape($s) {
$out = '';
for ($count = 0, $n = strlen($s); $count < $n; $count++) {
if ($s[$count] != '\\' || $count == $n-1) {
$out .= $s[$count];
} else {
switch ($s[++$count]) {
case ')':
case '(':
case '\\':
$out .= $s[$count];
break;
case 'f':
$out .= chr(0x0C);
break;
case 'b':
$out .= chr(0x08);
break;
case 't':
$out .= chr(0x09);
break;
case 'r':
$out .= chr(0x0D);
break;
case 'n':
$out .= chr(0x0A);
break;
case "\r":
if ($count != $n-1 && $s[$count+1] == "\n")
$count++;
break;
case "\n":
break;
default:
// Octal-Values
if (ord($s[$count]) >= ord('0') &&
ord($s[$count]) <= ord('9')) {
$oct = ''. $s[$count];
if (ord($s[$count+1]) >= ord('0') &&
ord($s[$count+1]) <= ord('9')) {
$oct .= $s[++$count];
if (ord($s[$count+1]) >= ord('0') &&
ord($s[$count+1]) <= ord('9')) {
$oct .= $s[++$count];
}
}
$out .= chr(octdec($oct));
} else {
$out .= $s[$count];
}
}
}
}
return $out;
}
/**
* Hexadecimal to string
*
* @param string $hex
* @return string
*/
function hex2str($hex) {
return pack('H*', str_replace(array("\r", "\n", ' '), '', $hex));
}
/**
* String to hexadecimal
*
* @param string $str
* @return string
*/
function str2hex($str) {
return current(unpack('H*', $str));
}
}

View File

@ -0,0 +1,391 @@
<?php
//
// FPDI - Version 1.3.2
//
// Copyright 2004-2010 Setasign - Jan Slabon
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
require_once('pdf_parser.php');
class fpdi_pdf_parser extends pdf_parser {
/**
* Pages
* Index beginns at 0
*
* @var array
*/
var $pages;
/**
* Page count
* @var integer
*/
var $page_count;
/**
* actual page number
* @var integer
*/
var $pageno;
/**
* PDF Version of imported Document
* @var string
*/
var $pdfVersion;
/**
* FPDI Reference
* @var object
*/
var $fpdi;
/**
* Available BoxTypes
*
* @var array
*/
var $availableBoxes = array('/MediaBox', '/CropBox', '/BleedBox', '/TrimBox', '/ArtBox');
/**
* Constructor
*
* @param string $filename Source-Filename
* @param object $fpdi Object of type fpdi
*/
function fpdi_pdf_parser($filename, &$fpdi) {
$this->fpdi =& $fpdi;
parent::pdf_parser($filename);
// resolve Pages-Dictonary
$pages = $this->pdf_resolve_object($this->c, $this->root[1][1]['/Pages']);
// Read pages
$this->read_pages($this->c, $pages, $this->pages);
// count pages;
$this->page_count = count($this->pages);
}
/**
* Overwrite parent::error()
*
* @param string $msg Error-Message
*/
function error($msg) {
$this->fpdi->error($msg);
}
/**
* Get pagecount from sourcefile
*
* @return int
*/
function getPageCount() {
return $this->page_count;
}
/**
* Set pageno
*
* @param int $pageno Pagenumber to use
*/
function setPageno($pageno) {
$pageno = ((int) $pageno) - 1;
if ($pageno < 0 || $pageno >= $this->getPageCount()) {
$this->fpdi->error('Pagenumber is wrong!');
}
$this->pageno = $pageno;
}
/**
* Get page-resources from current page
*
* @return array
*/
function getPageResources() {
return $this->_getPageResources($this->pages[$this->pageno]);
}
/**
* Get page-resources from /Page
*
* @param array $obj Array of pdf-data
*/
function _getPageResources ($obj) { // $obj = /Page
$obj = $this->pdf_resolve_object($this->c, $obj);
// If the current object has a resources
// dictionary associated with it, we use
// it. Otherwise, we move back to its
// parent object.
if (isset ($obj[1][1]['/Resources'])) {
$res = $this->pdf_resolve_object($this->c, $obj[1][1]['/Resources']);
if ($res[0] == PDF_TYPE_OBJECT)
return $res[1];
return $res;
} else {
if (!isset ($obj[1][1]['/Parent'])) {
return false;
} else {
$res = $this->_getPageResources($obj[1][1]['/Parent']);
if ($res[0] == PDF_TYPE_OBJECT)
return $res[1];
return $res;
}
}
}
/**
* Get content of current page
*
* If more /Contents is an array, the streams are concated
*
* @return string
*/
function getContent() {
$buffer = '';
if (isset($this->pages[$this->pageno][1][1]['/Contents'])) {
$contents = $this->_getPageContent($this->pages[$this->pageno][1][1]['/Contents']);
foreach($contents AS $tmp_content) {
$buffer .= $this->_rebuildContentStream($tmp_content).' ';
}
}
return $buffer;
}
/**
* Resolve all content-objects
*
* @param array $content_ref
* @return array
*/
function _getPageContent($content_ref) {
$contents = array();
if ($content_ref[0] == PDF_TYPE_OBJREF) {
$content = $this->pdf_resolve_object($this->c, $content_ref);
if ($content[1][0] == PDF_TYPE_ARRAY) {
$contents = $this->_getPageContent($content[1]);
} else {
$contents[] = $content;
}
} else if ($content_ref[0] == PDF_TYPE_ARRAY) {
foreach ($content_ref[1] AS $tmp_content_ref) {
$contents = array_merge($contents,$this->_getPageContent($tmp_content_ref));
}
}
return $contents;
}
/**
* Rebuild content-streams
*
* @param array $obj
* @return string
*/
function _rebuildContentStream($obj) {
$filters = array();
if (isset($obj[1][1]['/Filter'])) {
$_filter = $obj[1][1]['/Filter'];
if ($_filter[0] == PDF_TYPE_TOKEN) {
$filters[] = $_filter;
} else if ($_filter[0] == PDF_TYPE_ARRAY) {
$filters = $_filter[1];
}
}
$stream = $obj[2][1];
foreach ($filters AS $_filter) {
switch ($_filter[1]) {
case '/FlateDecode':
if (function_exists('gzuncompress')) {
$stream = (strlen($stream) > 0) ? @gzuncompress($stream) : '';
} else {
$this->error(sprintf('To handle %s filter, please compile php with zlib support.',$_filter[1]));
}
if ($stream === false) {
$this->error('Error while decompressing stream.');
}
break;
case '/LZWDecode':
include_once('filters/FilterLZW_FPDI.php');
$decoder = new FilterLZW_FPDI($this->fpdi);
$stream = $decoder->decode($stream);
break;
case '/ASCII85Decode':
include_once('filters/FilterASCII85_FPDI.php');
$decoder = new FilterASCII85_FPDI($this->fpdi);
$stream = $decoder->decode($stream);
break;
case null:
$stream = $stream;
break;
default:
$this->error(sprintf('Unsupported Filter: %s',$_filter[1]));
}
}
return $stream;
}
/**
* Get a Box from a page
* Arrayformat is same as used by fpdf_tpl
*
* @param array $page a /Page
* @param string $box_index Type of Box @see $availableBoxes
* @return array
*/
function getPageBox($page, $box_index) {
$page = $this->pdf_resolve_object($this->c,$page);
$box = null;
if (isset($page[1][1][$box_index]))
$box =& $page[1][1][$box_index];
if (!is_null($box) && $box[0] == PDF_TYPE_OBJREF) {
$tmp_box = $this->pdf_resolve_object($this->c,$box);
$box = $tmp_box[1];
}
if (!is_null($box) && $box[0] == PDF_TYPE_ARRAY) {
$b =& $box[1];
return array('x' => $b[0][1]/$this->fpdi->k,
'y' => $b[1][1]/$this->fpdi->k,
'w' => abs($b[0][1]-$b[2][1])/$this->fpdi->k,
'h' => abs($b[1][1]-$b[3][1])/$this->fpdi->k,
'llx' => min($b[0][1], $b[2][1])/$this->fpdi->k,
'lly' => min($b[1][1], $b[3][1])/$this->fpdi->k,
'urx' => max($b[0][1], $b[2][1])/$this->fpdi->k,
'ury' => max($b[1][1], $b[3][1])/$this->fpdi->k,
);
} else if (!isset ($page[1][1]['/Parent'])) {
return false;
} else {
return $this->getPageBox($this->pdf_resolve_object($this->c, $page[1][1]['/Parent']), $box_index);
}
}
function getPageBoxes($pageno) {
return $this->_getPageBoxes($this->pages[$pageno-1]);
}
/**
* Get all Boxes from /Page
*
* @param array a /Page
* @return array
*/
function _getPageBoxes($page) {
$boxes = array();
foreach($this->availableBoxes AS $box) {
if ($_box = $this->getPageBox($page,$box)) {
$boxes[$box] = $_box;
}
}
return $boxes;
}
/**
* Get the page rotation by pageno
*
* @param integer $pageno
* @return array
*/
function getPageRotation($pageno) {
return $this->_getPageRotation($this->pages[$pageno-1]);
}
function _getPageRotation ($obj) { // $obj = /Page
$obj = $this->pdf_resolve_object($this->c, $obj);
if (isset ($obj[1][1]['/Rotate'])) {
$res = $this->pdf_resolve_object($this->c, $obj[1][1]['/Rotate']);
if ($res[0] == PDF_TYPE_OBJECT)
return $res[1];
return $res;
} else {
if (!isset ($obj[1][1]['/Parent'])) {
return false;
} else {
$res = $this->_getPageRotation($obj[1][1]['/Parent']);
if ($res[0] == PDF_TYPE_OBJECT)
return $res[1];
return $res;
}
}
}
/**
* Read all /Page(es)
*
* @param object pdf_context
* @param array /Pages
* @param array the result-array
*/
function read_pages (&$c, &$pages, &$result) {
// Get the kids dictionary
$_kids = $this->pdf_resolve_object ($c, $pages[1][1]['/Kids']);
if (!is_array($_kids))
$this->error('Cannot find /Kids in current /Page-Dictionary');
if ($_kids[1][0] == PDF_TYPE_ARRAY) {
$kids = $_kids[1][1];
} else {
$kids = $_kids[1];
}
foreach ($kids as $v) {
$pg = $this->pdf_resolve_object ($c, $v);
if ($pg[1][1]['/Type'][1] === '/Pages') {
// If one of the kids is an embedded
// /Pages array, resolve it as well.
$this->read_pages ($c, $pg, $result);
} else {
$result[] = $pg;
}
}
}
/**
* Get PDF-Version
*
* And reset the PDF Version used in FPDI if needed
*/
function getPDFVersion() {
parent::getPDFVersion();
$this->fpdi->PDFVersion = max($this->fpdi->PDFVersion, $this->pdfVersion);
}
}

View File

@ -0,0 +1,103 @@
<?php
//
// FPDI - Version 1.3.2
//
// Copyright 2004-2010 Setasign - Jan Slabon
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
$__tmp = version_compare(phpversion(), "5") == -1 ? array('pdf_context') : array('pdf_context', false);
if (!call_user_func_array('class_exists', $__tmp)) {
class pdf_context {
/**
* Modi
*
* @var integer 0 = file | 1 = string
*/
var $_mode = 0;
var $file;
var $buffer;
var $offset;
var $length;
var $stack;
// Constructor
function pdf_context(&$f) {
$this->file =& $f;
if (is_string($this->file))
$this->_mode = 1;
$this->reset();
}
// Optionally move the file
// pointer to a new location
// and reset the buffered data
function reset($pos = null, $l = 100) {
if ($this->_mode == 0) {
if (!is_null ($pos)) {
fseek ($this->file, $pos);
}
$this->buffer = $l > 0 ? fread($this->file, $l) : '';
$this->length = strlen($this->buffer);
if ($this->length < $l)
$this->increase_length($l - $this->length);
} else {
$this->buffer = $this->file;
$this->length = strlen($this->buffer);
}
$this->offset = 0;
$this->stack = array();
}
// Make sure that there is at least one
// character beyond the current offset in
// the buffer to prevent the tokenizer
// from attempting to access data that does
// not exist
function ensure_content() {
if ($this->offset >= $this->length - 1) {
return $this->increase_length();
} else {
return true;
}
}
// Forcefully read more data into the buffer
function increase_length($l=100) {
if ($this->_mode == 0 && feof($this->file)) {
return false;
} else if ($this->_mode == 0) {
$totalLength = $this->length + $l;
do {
$this->buffer .= fread($this->file, $totalLength-$this->length);
} while ((($this->length = strlen($this->buffer)) != $totalLength) && !feof($this->file));
return true;
} else {
return false;
}
}
}
}
unset($__tmp);

View File

@ -0,0 +1,708 @@
<?php
//
// FPDI - Version 1.3.2
//
// Copyright 2004-2010 Setasign - Jan Slabon
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
if (!defined ('PDF_TYPE_NULL'))
define ('PDF_TYPE_NULL', 0);
if (!defined ('PDF_TYPE_NUMERIC'))
define ('PDF_TYPE_NUMERIC', 1);
if (!defined ('PDF_TYPE_TOKEN'))
define ('PDF_TYPE_TOKEN', 2);
if (!defined ('PDF_TYPE_HEX'))
define ('PDF_TYPE_HEX', 3);
if (!defined ('PDF_TYPE_STRING'))
define ('PDF_TYPE_STRING', 4);
if (!defined ('PDF_TYPE_DICTIONARY'))
define ('PDF_TYPE_DICTIONARY', 5);
if (!defined ('PDF_TYPE_ARRAY'))
define ('PDF_TYPE_ARRAY', 6);
if (!defined ('PDF_TYPE_OBJDEC'))
define ('PDF_TYPE_OBJDEC', 7);
if (!defined ('PDF_TYPE_OBJREF'))
define ('PDF_TYPE_OBJREF', 8);
if (!defined ('PDF_TYPE_OBJECT'))
define ('PDF_TYPE_OBJECT', 9);
if (!defined ('PDF_TYPE_STREAM'))
define ('PDF_TYPE_STREAM', 10);
if (!defined ('PDF_TYPE_BOOLEAN'))
define ('PDF_TYPE_BOOLEAN', 11);
if (!defined ('PDF_TYPE_REAL'))
define ('PDF_TYPE_REAL', 12);
require_once('pdf_context.php');
$__tmp = version_compare(phpversion(), "5") == -1 ? array('pdf_parser') : array('pdf_parser', false);
if (!call_user_func_array('class_exists', $__tmp)) {
class pdf_parser {
/**
* Filename
* @var string
*/
var $filename;
/**
* File resource
* @var resource
*/
var $f;
/**
* PDF Context
* @var object pdf_context-Instance
*/
var $c;
/**
* xref-Data
* @var array
*/
var $xref;
/**
* root-Object
* @var array
*/
var $root;
/**
* PDF version of the loaded document
* @var string
*/
var $pdfVersion;
/**
* Constructor
*
* @param string $filename Source-Filename
*/
function pdf_parser($filename) {
$this->filename = $filename;
$this->f = @fopen($this->filename, 'rb');
if (!$this->f)
$this->error(sprintf('Cannot open %s !', $filename));
$this->getPDFVersion();
$this->c = new pdf_context($this->f);
// Read xref-Data
$this->xref = array();
$this->pdf_read_xref($this->xref, $this->pdf_find_xref());
// Check for Encryption
$this->getEncryption();
// Read root
$this->pdf_read_root();
}
/**
* Close the opened file
*/
function closeFile() {
if (isset($this->f) && is_resource($this->f)) {
fclose($this->f);
unset($this->f);
}
}
/**
* Print Error and die
*
* @param string $msg Error-Message
*/
function error($msg) {
die('<b>PDF-Parser Error:</b> '.$msg);
}
/**
* Check Trailer for Encryption
*/
function getEncryption() {
if (isset($this->xref['trailer'][1]['/Encrypt'])) {
$this->error('File is encrypted!');
}
}
/**
* Find/Return /Root
*
* @return array
*/
function pdf_find_root() {
if ($this->xref['trailer'][1]['/Root'][0] != PDF_TYPE_OBJREF) {
$this->error('Wrong Type of Root-Element! Must be an indirect reference');
}
return $this->xref['trailer'][1]['/Root'];
}
/**
* Read the /Root
*/
function pdf_read_root() {
// read root
$this->root = $this->pdf_resolve_object($this->c, $this->pdf_find_root());
}
/**
* Get PDF-Version
*
* And reset the PDF Version used in FPDI if needed
*/
function getPDFVersion() {
fseek($this->f, 0);
preg_match('/\d\.\d/',fread($this->f,16),$m);
if (isset($m[0]))
$this->pdfVersion = $m[0];
return $this->pdfVersion;
}
/**
* Find the xref-Table
*/
function pdf_find_xref() {
$toRead = 1500;
$stat = fseek ($this->f, -$toRead, SEEK_END);
if ($stat === -1) {
fseek ($this->f, 0);
}
$data = fread($this->f, $toRead);
$pos = strlen($data) - strpos(strrev($data), strrev('startxref'));
$data = substr($data, $pos);
if (!preg_match('/\s*(\d+).*$/s', $data, $matches)) {
$this->error('Unable to find pointer to xref table');
}
return (int) $matches[1];
}
/**
* Read xref-table
*
* @param array $result Array of xref-table
* @param integer $offset of xref-table
*/
function pdf_read_xref(&$result, $offset) {
fseek($this->f, $o_pos = $offset-20); // set some bytes backwards to fetch errorious docs
$data = fread($this->f, 100);
$xrefPos = strrpos($data, 'xref');
if ($xrefPos === false) {
fseek($this->f, $offset);
$c = new pdf_context($this->f);
$xrefStreamObjDec = $this->pdf_read_value($c);
if (is_array($xrefStreamObjDec) && isset($xrefStreamObjDec[0]) && $xrefStreamObjDec[0] == PDF_TYPE_OBJDEC) {
$this->error(sprintf('This document (%s) probably uses a compression technique which is not supported by the free parser shipped with FPDI.', $this->filename));
} else {
$this->error('Unable to find xref table.');
}
}
if (!isset($result['xref_location'])) {
$result['xref_location'] = $o_pos+$xrefPos;
$result['max_object'] = 0;
}
$cylces = -1;
$bytesPerCycle = 100;
fseek($this->f, $o_pos = $o_pos+$xrefPos+4); // set the handle directly after the "xref"-keyword
$data = fread($this->f, $bytesPerCycle);
while (($trailerPos = strpos($data, 'trailer', max($bytesPerCycle*$cylces++, 0))) === false && !feof($this->f)) {
$data .= fread($this->f, $bytesPerCycle);
}
if ($trailerPos === false) {
$this->error('Trailer keyword not found after xref table');
}
$data = substr($data, 0, $trailerPos);
// get Line-Ending
preg_match_all("/(\r\n|\n|\r)/", substr($data, 0, 100), $m); // check the first 100 bytes for linebreaks
$differentLineEndings = count(array_unique($m[0]));
if ($differentLineEndings > 1) {
$lines = preg_split("/(\r\n|\n|\r)/", $data, -1, PREG_SPLIT_NO_EMPTY);
} else {
$lines = explode($m[0][1], $data);
}
$data = $differentLineEndings = $m = null;
unset($data, $differentLineEndings, $m);
$linesCount = count($lines);
$start = 1;
for ($i = 0; $i < $linesCount; $i++) {
$line = trim($lines[$i]);
if ($line) {
$pieces = explode(' ', $line);
$c = count($pieces);
switch($c) {
case 2:
$start = (int)$pieces[0];
$end = $start+(int)$pieces[1];
if ($end > $result['max_object'])
$result['max_object'] = $end;
break;
case 3:
if (!isset($result['xref'][$start]))
$result['xref'][$start] = array();
if (!array_key_exists($gen = (int) $pieces[1], $result['xref'][$start])) {
$result['xref'][$start][$gen] = $pieces[2] == 'n' ? (int) $pieces[0] : null;
}
$start++;
break;
default:
$this->error('Unexpected data in xref table');
}
}
}
$lines = $pieces = $line = $start = $end = $gen = null;
unset($lines, $pieces, $line, $start, $end, $gen);
fseek($this->f, $o_pos+$trailerPos+7);
$c = new pdf_context($this->f);
$trailer = $this->pdf_read_value($c);
$c = null;
unset($c);
if (!isset($result['trailer'])) {
$result['trailer'] = $trailer;
}
if (isset($trailer[1]['/Prev'])) {
$this->pdf_read_xref($result, $trailer[1]['/Prev'][1]);
}
$trailer = null;
unset($trailer);
return true;
}
/**
* Reads an Value
*
* @param object $c pdf_context
* @param string $token a Token
* @return mixed
*/
function pdf_read_value(&$c, $token = null) {
if (is_null($token)) {
$token = $this->pdf_read_token($c);
}
if ($token === false) {
return false;
}
switch ($token) {
case '<':
// This is a hex string.
// Read the value, then the terminator
$pos = $c->offset;
while(1) {
$match = strpos ($c->buffer, '>', $pos);
// If you can't find it, try
// reading more data from the stream
if ($match === false) {
if (!$c->increase_length()) {
return false;
} else {
continue;
}
}
$result = substr ($c->buffer, $c->offset, $match - $c->offset);
$c->offset = $match + 1;
return array (PDF_TYPE_HEX, $result);
}
break;
case '<<':
// This is a dictionary.
$result = array();
// Recurse into this function until we reach
// the end of the dictionary.
while (($key = $this->pdf_read_token($c)) !== '>>') {
if ($key === false) {
return false;
}
if (($value = $this->pdf_read_value($c)) === false) {
return false;
}
// Catch missing value
if ($value[0] == PDF_TYPE_TOKEN && $value[1] == '>>') {
$result[$key] = array(PDF_TYPE_NULL);
break;
}
$result[$key] = $value;
}
return array (PDF_TYPE_DICTIONARY, $result);
case '[':
// This is an array.
$result = array();
// Recurse into this function until we reach
// the end of the array.
while (($token = $this->pdf_read_token($c)) !== ']') {
if ($token === false) {
return false;
}
if (($value = $this->pdf_read_value($c, $token)) === false) {
return false;
}
$result[] = $value;
}
return array (PDF_TYPE_ARRAY, $result);
case '(' :
// This is a string
$pos = $c->offset;
$openBrackets = 1;
do {
for (; $openBrackets != 0 && $pos < $c->length; $pos++) {
switch (ord($c->buffer[$pos])) {
case 0x28: // '('
$openBrackets++;
break;
case 0x29: // ')'
$openBrackets--;
break;
case 0x5C: // backslash
$pos++;
}
}
} while($openBrackets != 0 && $c->increase_length());
$result = substr($c->buffer, $c->offset, $pos - $c->offset - 1);
$c->offset = $pos;
return array (PDF_TYPE_STRING, $result);
case 'stream':
$o_pos = ftell($c->file)-strlen($c->buffer);
$o_offset = $c->offset;
$c->reset($startpos = $o_pos + $o_offset);
$e = 0; // ensure line breaks in front of the stream
if ($c->buffer[0] == chr(10) || $c->buffer[0] == chr(13))
$e++;
if ($c->buffer[1] == chr(10) && $c->buffer[0] != chr(10))
$e++;
if ($this->actual_obj[1][1]['/Length'][0] == PDF_TYPE_OBJREF) {
$tmp_c = new pdf_context($this->f);
$tmp_length = $this->pdf_resolve_object($tmp_c, $this->actual_obj[1][1]['/Length']);
$length = $tmp_length[1][1];
} else {
$length = $this->actual_obj[1][1]['/Length'][1];
}
if ($length > 0) {
$c->reset($startpos+$e,$length);
$v = $c->buffer;
} else {
$v = '';
}
$c->reset($startpos+$e+$length+9); // 9 = strlen("endstream")
return array(PDF_TYPE_STREAM, $v);
default :
if (is_numeric ($token)) {
// A numeric token. Make sure that
// it is not part of something else.
if (($tok2 = $this->pdf_read_token ($c)) !== false) {
if (is_numeric ($tok2)) {
// Two numeric tokens in a row.
// In this case, we're probably in
// front of either an object reference
// or an object specification.
// Determine the case and return the data
if (($tok3 = $this->pdf_read_token ($c)) !== false) {
switch ($tok3) {
case 'obj' :
return array (PDF_TYPE_OBJDEC, (int) $token, (int) $tok2);
case 'R' :
return array (PDF_TYPE_OBJREF, (int) $token, (int) $tok2);
}
// If we get to this point, that numeric value up
// there was just a numeric value. Push the extra
// tokens back into the stack and return the value.
array_push ($c->stack, $tok3);
}
}
array_push ($c->stack, $tok2);
}
if ($token === (string)((int)$token))
return array (PDF_TYPE_NUMERIC, (int)$token);
else
return array (PDF_TYPE_REAL, (float)$token);
} else if ($token == 'true' || $token == 'false') {
return array (PDF_TYPE_BOOLEAN, $token == 'true');
} else if ($token == 'null') {
return array (PDF_TYPE_NULL);
} else {
// Just a token. Return it.
return array (PDF_TYPE_TOKEN, $token);
}
}
}
/**
* Resolve an object
*
* @param object $c pdf_context
* @param array $obj_spec The object-data
* @param boolean $encapsulate Must set to true, cause the parsing and fpdi use this method only without this para
*/
function pdf_resolve_object(&$c, $obj_spec, $encapsulate = true) {
// Exit if we get invalid data
if (!is_array($obj_spec)) {
$ret = false;
return $ret;
}
if ($obj_spec[0] == PDF_TYPE_OBJREF) {
// This is a reference, resolve it
if (isset($this->xref['xref'][$obj_spec[1]][$obj_spec[2]])) {
// Save current file position
// This is needed if you want to resolve
// references while you're reading another object
// (e.g.: if you need to determine the length
// of a stream)
$old_pos = ftell($c->file);
// Reposition the file pointer and
// load the object header.
$c->reset($this->xref['xref'][$obj_spec[1]][$obj_spec[2]]);
$header = $this->pdf_read_value($c);
if ($header[0] != PDF_TYPE_OBJDEC || $header[1] != $obj_spec[1] || $header[2] != $obj_spec[2]) {
$this->error("Unable to find object ({$obj_spec[1]}, {$obj_spec[2]}) at expected location");
}
// If we're being asked to store all the information
// about the object, we add the object ID and generation
// number for later use
$result = array();
$this->actual_obj =& $result;
if ($encapsulate) {
$result = array (
PDF_TYPE_OBJECT,
'obj' => $obj_spec[1],
'gen' => $obj_spec[2]
);
}
// Now simply read the object data until
// we encounter an end-of-object marker
while(1) {
$value = $this->pdf_read_value($c);
if ($value === false || count($result) > 4) {
// in this case the parser coudn't find an endobj so we break here
break;
}
if ($value[0] == PDF_TYPE_TOKEN && $value[1] === 'endobj') {
break;
}
$result[] = $value;
}
$c->reset($old_pos);
if (isset($result[2][0]) && $result[2][0] == PDF_TYPE_STREAM) {
$result[0] = PDF_TYPE_STREAM;
}
return $result;
}
} else {
return $obj_spec;
}
}
/**
* Reads a token from the file
*
* @param object $c pdf_context
* @return mixed
*/
function pdf_read_token(&$c)
{
// If there is a token available
// on the stack, pop it out and
// return it.
if (count($c->stack)) {
return array_pop($c->stack);
}
// Strip away any whitespace
do {
if (!$c->ensure_content()) {
return false;
}
$c->offset += strspn($c->buffer, " \n\r\t", $c->offset);
} while ($c->offset >= $c->length - 1);
// Get the first character in the stream
$char = $c->buffer[$c->offset++];
switch ($char) {
case '[':
case ']':
case '(':
case ')':
// This is either an array or literal string
// delimiter, Return it
return $char;
case '<':
case '>':
// This could either be a hex string or
// dictionary delimiter. Determine the
// appropriate case and return the token
if ($c->buffer[$c->offset] == $char) {
if (!$c->ensure_content()) {
return false;
}
$c->offset++;
return $char . $char;
} else {
return $char;
}
case '%':
// This is a comment - jump over it!
$pos = $c->offset;
while(1) {
$match = preg_match("/(\r\n|\r|\n)/", $c->buffer, $m, PREG_OFFSET_CAPTURE, $pos);
if ($match === 0) {
if (!$c->increase_length()) {
return false;
} else {
continue;
}
}
$c->offset = $m[0][1]+strlen($m[0][0]);
return $this->pdf_read_token($c);
}
default:
// This is "another" type of token (probably
// a dictionary entry or a numeric value)
// Find the end and return it.
if (!$c->ensure_content()) {
return false;
}
while(1) {
// Determine the length of the token
$pos = strcspn($c->buffer, " %[]<>()\r\n\t/", $c->offset);
if ($c->offset + $pos <= $c->length - 1) {
break;
} else {
// If the script reaches this point,
// the token may span beyond the end
// of the current buffer. Therefore,
// we increase the size of the buffer
// and try again--just to be safe.
$c->increase_length();
}
}
$result = substr($c->buffer, $c->offset - 1, $pos + 1);
$c->offset += $pos;
return $result;
}
}
}
}
unset($__tmp);

View File

@ -0,0 +1,165 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.

View File

@ -0,0 +1,217 @@
3.31 (2001-05-21)
problème de compatibilité avec FPDF corrigé
3.30 / 4.01 (2001-05-07)
correction sur la gestion des textes
correction sur le parseur HTML
correction sur la gestion de border-collapse
correction sur la gestion des TDs, H1->H6
ajout des balises fieldset et legend (cf exemple 4)
ajout de la langue CS
nombreuses améliorations
v4.01 uniquement : Utilisation de TCPDF 5.0.002
v4.01 uniquement : Utilisation des QR-code de TCPDF, il n'y a plus besoin d'une librairie externe
v4.01 uniquement : Utilisation des exceptions PHP pour les erreurs. Tous les exemples ont été mis à jour en consequence
(merci à Pavel Kochman pour ses sugestions et ses ajouts)
3.29 / 4.00 (2010-03-17)
modification des barcodes. ATTENTION : bar_w et bar_h n'existent plus !
correction sur la gestion de page_footer
correction sur la gestion des html entities
correction sur le positionnement des textes
correction sur le positionnement des tableaux
nombreuses corrections sur les positionnements, les couleurs, ...
amélioration de la partie SVG (balise G, ...)
amélioration sur createIndex
harmonisation des noms des méthodes
correction sur la gestion des textes
v4.00 uniquement : HTML2PDF est maintenant écrit en PHP5 et basé sur TCPDF (=> unicode, utf8, ...)
v4.00 uniquement : utilisation de TCPDF pour les formulaires et les barcodes
v4.00 uniquement : amélioration de la partie SVG (alpha)
3.28 (2010-01-18)
ajout de la gestion de la balise label
correction pour compatibilité PHP4
3.27 (2010-01-11)
correction sur page_header et page_footer
ajout de la possibilité de pouvoir mettre l'index automatique dans la page que l'on veut
correction sur la gestion du canal alpha pour les PNGs
correction sur la gestion des border-radius (cf exemple radius) conforme au CSS3
correction sur la gestion du background-color
correction sur la gestion de thead, tfoot, et tbody
ajout du dessin verctoriel (cf exemples draw, tigre, sapin)
ajout de la propriété label="none/label" pour la balise <barcode>
nombreux petits correctifs
3.26 (2009-11-16)
correction pour support des images générés en CGI
ajout de la gestion du canal alpha pour les PNGs (nécessite GD2)
ajout de la méthode setDefaultFont permettant de spécifier une fonte par défaut
ajout de la propriété format pour la balise <page> (cf exemple 4)
amélioration de la gestion des couleurs css RGB (cf exemple 2)
ajout de la gestion des couleurs css CMYK (cf exemple 2)
ajout de la propriété css overflow:hidden pour la balise <div> (cf exemple 2)
correction sur page_header et page_footer
ajout de la possibilité de pouvoir directement convertir le résultat d'une vraie page HTML
nombreux petits correctifs sur les styles
3.25 (2009-10-07)
correctif sur le calcul des tableaux dans le page_footer
correctif sur l'interprétation des espaces entre certaines balises
correction sur la gestion des balises H1, H2, H3, H4, H5, H6
correction sur la gestion de la balise table
support des balises xhtml du type <span />
ajout des balises COL (cf exemple 5), DEL, INS, et QRCODE (cf exemple 13)
ajout de la propriété css text-transform
ajout de la propriété css rotate (uniquement sur les DIV, cf exemple 8)
ne plus rendre obligatoire l'existence d'une image (nouvelle méthode setTestIsImage)
ajout d'un mode DEBUG - les anciennes fonction d'analyse des ressources ont été supprimées
ajout de la méthode setEncoding
ajout de la langue danoise DA (merci à Daniel K.)
3.24 (2009-08-05)
correction sur le calcul de la largeur des divs
modification pour compatibilité avec la localisation PHP
modification pour compatibilité avec PHP 5.3.0
3.23 (2009-07-30)
correction sur le calcul des DIVs
correction sur l'interpretation de certains styles CSS
correction de la fonction de creation d'index automatique CreateIndex
ATTENTION : la methode d'appel de CreateIndex a changé. Regardez l'exemple About !!!!
3.22a (2009-06-16)
redistribution de HTML2PDF sous la licence LGPL !!! (au lieu de GPL)
3.22 (2009-06-08)
correction sur le background-color
refonte totale de la gestion de text-align. les valeurs center et right marchent maintenant meme en cas de contenu riche
3.21 (2009-05-05)
ajout de la propriété css FLOAT pour la balise IMG
correction sur la gestion des TFOOT
correction sur le positionnement des images
3.20 (2009-04-06)
ajout de la gestion des margins pour la balise DIV
ajout de la gestion de la propriete css LINE-HEIGHT
correction sur l'interpretation de la valeur de certains styles CSS (background-image, background-position, ...)
correction sur la reconnaissance des balises thead et tfoot
correction sur la balise select
correction sur les fichiers de langue (merci à Sinan)
3.19 (2009-03-11)
optimisation du parseur HTML - merci à Jezelinside
ajout de la balise TFOOT
amélioration de la gestion des tableaux : les contenus des balises THEAD et TFOOT sont maintenant répétés sur chaque page.
ajout de la balise spécifique BOOKMARK afin de créer des "marques-page"
possibilité de rajouter un index automatique en fin de fichier
ajout de la langue turque TR (merci à Hidayet)
amélioration de la méthode Output. Elle est maintenant également utilisable comme celle de FPDF
3.18 (2009-02-22)
correction sur les sauts de page automatique pour les balises TABLE, UL, OL
correction sur l'interpretation des styles pour la balise HR
correction sur l'interpretation du style border-collapse pour la balise TABLE
prise en compte de margin:auto pour les tables et les divs
les commentaires dans les CSS sont acceptés
3.17 (2008-12-30)
ajout de la gestion des balises INPUT (text, radio, checkbox, button, hidden, ...), SELECT, OPTION, TEXTAREA (cf exemple 14)
ajout de la possibilité de mettre des scripts dans le pdf, via $html2pdf->pdf->IncludeJS(...); (cf exemples JS)
correction sur le saut de page automatique pour les images
correction sur les sauts de lignes automatiques pour certaines balises (UL, P, ...)
ajout de la langue NL (merci à Roland)
3.16 (2008-12-09)
ajout de la gestion de list-style: none (cf exemple 13)
correction dans la gestion des fontes ajoutées à fpdf (via la méthode AddFont)
nombreuses corrections sur le calcul des largeurs des éléments table, div, hr, td, th
ajout de l'exemple about.php
(pour info, les PDF générés à partir des exemples sont maintenant dans le répertoire /exemples/pdf/, et sont supprimables)
3.15 (2008-12-01)
correction sur l'identification des styles en cas de valeurs multiples dans la propriete class
prise en compte de border-radius pour la limite des backgrounds (color et image)
ajout des proprietes CSS border-top-*, border-right-*, border-bottom-*, border-left-*
ajout de la propriété CSS list-style-image (cf exemple 12)
pour la balise table, ajout de l'interprétation de align="center" et align="right" (cf exemple 1)
correction dans le positionnement des images
correction de quelques bugs
ajout d'une fonction d'analyse des ressources HTML2PDFgetTimerDebug (cf début du fichier html2pdf.class.php)
3.14 (2008-11-17)
ajout d'une langue (pt : Brazilian Portuguese language) et amelioration de la methode vueHTML (merci à Rodrigo)
correction du positionnement du contenu des DIVs. gestion des proprietes valign et align
ajout de la propriete CSS border-collapse (cf exemple 0)
ajout de la propriete CSS border-radius (cf exemple 1)
correction de quelques bugs
3.13 (2008-09-24)
reecriture de la balise hr, avec prise en compte des styles (cf exemple 0)
ajout de la propriete backcolor pour la balise page (cf exemple 9)
ajout des proprietes backleft et backright pour la balise page afin de pouvoir changer les marges des pages (cf exemple 8)
nombreuses corrections sur les balises et les styles
3.12 (2008-09-16)
ajout des balises ol, ul, li (cf exemple 12)
correction sur le calcul de la taille des td en cas de colspan et rowspan
ajout de la méthode setTestTdInOnePage afin de pouvoir desactiver le test sur la taille des TD (cf exemple 11)
correction de quelques bugs
3.11 (2008-08-29)
ajout des balises div, p, pre, s
gestion des styles CSS position (relative, absolute), left, top, right, bottom (cf exemple 10)
meilleur gestion des border : border-style, border-color, border-width (cf exemple 10)
possibilité d'indiquer les marges par défault, via le constructeur (cf exemple 2)
3.10a (2008-08-26)
correction pour compatibilité php4 / php5
3.10 (2008-08-25)
ajout des liens internes (cf exemple 7)
gestion complete des background : image, repeat, position, color (cf exemple 1)
gestion de underline, overline, linethrough (cf exemple 2)
correction de quelques bugs
3.09 :
mise à jour vers fpdf version 1.6, ajout de barcode, correction de l'affichage de certains caractères spéciaux
correction du calcul de la hauteur de ligne de la balise br
detection en cas de contenu trop grand dans un TD
amélioration de la balise page (ajout de l'attribue pageset, avec les valeurs new et old)
ajout de FPDF_PROTECTION, accesible via $pdf->pdf->SetProtection(...)
3.08 : version opérationnelle de page_header, ajout de page_footer, correction des borders des tableaux
3.07 : correction de l'interpretation de cellspacing, amélioration de la balise page_header
3.06 : première gestion de la balise page_header, correction des dimensions des tableaux
3.05 : ajout de la propriété vertical-align, ajout de la gestion des fichiers de langue
3.04 : correction du saut de page automatique pour les tableaux. Ajout de propriétés à la balise PAGE
3.03 : correction de bugs au niveau de la gestion des images PHP par FPDF, meilleure gestion des erreurs
3.02 : ajout de la gestion des noms des couleurs, correction de la gestion des images générées par php, correction de quelques bugs
3.01 : correction de quelques bugs, ajout d'une protection pour les balises non existantes
3.00 : refont totale du calcul des tableaux. Prise en compte des colspan et rowspan
2.85 : ajout de la propriété cellspacing, nouvelle gestion des padding des tableaux (identique à l'html)
2.80 : ajout des types de border dotted et dasheds
2.75 : ajout des top, left, right, bottom pour padding et border
2.70 :
correction de la balise HR, ajout de la propriété padding pour les table, th, td
correction des dimensions, les unités px, mm, in, pt sont enfin réellement reproduites, correction de font-size, border, ...
ajout d'une propriété à la balise page : footer
correction dans l'affichage et le calcul des tables
2.55 : vérification de la validité du code (ouverture / fermeture) - ajout des unités mm, in, pt
2.50 : correction de nobreak, des marges, ajout de nombreuses balises
2.40 : refonte totale de l'identification des styles CSS. Les héritages marchent.
2.39 : corrections diverses, ajout de certaines propriétés (bgcolor, ...)
2.38 : meilleur identification des propriétés border et color
2.37 : nombreuses corrections : balise A, couleur de fond, retour à la ligne, gestion des images dans un texte, ...
2.36 : ajout des balises STRONG, EM
2.35 : amélioration de la gestion des feuilles de style
2.31 : correction de quelques bugs
2.30 : première version opérationnel des feuilles de style
2.25 : ajout de la balise LINK pour le type text/css
2.20 : premier jet de la gestion des feuilles de style, ajout de la balise STYLE
2.15 : n'interprète plus l'HTML en commentaire <!-- -->
2.10 : ajout des balises H1 -> H6
2.01 : correction de quelques bugs
2.00 : première version diffusée

View File

@ -0,0 +1,341 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>FAQ</title>
<link type="text/css" rel="stylesheet" href="fpdf.css">
<style type="text/css">
ul {list-style-type:none; margin:0; padding:0}
ul#answers li {margin-top:1.8em}
.question {font-weight:bold; color:#900000}
</style>
</head>
<body>
<h1>FAQ</h1>
<ul>
<li><b>1.</b> <a href='#q1'>What's exactly the license of FPDF? Are there any usage restrictions?</a></li>
<li><b>2.</b> <a href='#q2'>When I try to create a PDF, a lot of weird characters show on the screen. Why?</a></li>
<li><b>3.</b> <a href='#q3'>I try to generate a PDF and IE displays a blank page. What happens?</a></li>
<li><b>4.</b> <a href='#q4'>I can't make line breaks work. I put \n in the string printed by MultiCell but it doesn't work.</a></li>
<li><b>5.</b> <a href='#q5'>I try to display a variable in the Header method but nothing prints.</a></li>
<li><b>6.</b> <a href='#q6'>I defined the Header and Footer methods in my PDF class but nothing appears.</a></li>
<li><b>7.</b> <a href='#q7'>Accented characters are replaced by some strange characters like é.</a></li>
<li><b>8.</b> <a href='#q8'>I try to display the Euro symbol but it doesn't work.</a></li>
<li><b>9.</b> <a href='#q9'>I get the following error when I try to generate a PDF: Some data has already been output, can't send PDF file</a></li>
<li><b>10.</b> <a href='#q10'>I draw a frame with very precise dimensions, but when printed I notice some differences.</a></li>
<li><b>11.</b> <a href='#q11'>I'd like to use the whole surface of the page, but when printed I always have some margins. How can I get rid of them?</a></li>
<li><b>12.</b> <a href='#q12'>How can I put a background in my PDF?</a></li>
<li><b>13.</b> <a href='#q13'>How can I set a specific header or footer on the first page?</a></li>
<li><b>14.</b> <a href='#q14'>I'd like to use extensions provided by different scripts. How can I combine them?</a></li>
<li><b>15.</b> <a href='#q15'>How can I send the PDF by email?</a></li>
<li><b>16.</b> <a href='#q16'>What's the limit of the file sizes I can generate with FPDF?</a></li>
<li><b>17.</b> <a href='#q17'>Can I modify a PDF with FPDF?</a></li>
<li><b>18.</b> <a href='#q18'>I'd like to make a search engine in PHP and index PDF files. Can I do it with FPDF?</a></li>
<li><b>19.</b> <a href='#q19'>Can I convert an HTML page to PDF with FPDF?</a></li>
<li><b>20.</b> <a href='#q20'>Can I concatenate PDF files with FPDF?</a></li>
</ul>
<ul id='answers'>
<li id='q1'>
<p><b>1.</b> <span class='question'>What's exactly the license of FPDF? Are there any usage restrictions?</span></p>
FPDF is released under a permissive license: there is no usage restriction. You may embed it
freely in your application (commercial or not), with or without modifications.
</li>
<li id='q2'>
<p><b>2.</b> <span class='question'>When I try to create a PDF, a lot of weird characters show on the screen. Why?</span></p>
These "weird" characters are in fact the actual content of your PDF. This behavior is a bug of
IE6. When it first receives an HTML page, then a PDF from the same URL, it displays it directly
without launching Acrobat. This happens frequently during the development stage: on the least
script error, an HTML page is sent, and after correction, the PDF arrives.
<br>
To solve the problem, simply quit and restart IE. You can also go to another URL and come
back.
<br>
To avoid this kind of inconvenience during the development, you can generate the PDF directly
to a file and open it through the explorer.
</li>
<li id='q3'>
<p><b>3.</b> <span class='question'>I try to generate a PDF and IE displays a blank page. What happens?</span></p>
First of all, check that you send nothing to the browser after the PDF (not even a space or a
carriage return). You can put an exit statement just after the call to the Output() method to
be sure. If it still doesn't work, it means you're a victim of the "blank page syndrome". IE
used in conjunction with the Acrobat plug-in suffers from many bugs. To avoid these problems
in a reliable manner, two main techniques exist:
<br>
<br>
- Disable the plug-in and use Acrobat as a helper application. To do this, launch Acrobat, go
to the Edit menu, Preferences, Internet, and uncheck "Display PDF in browser". Then, the next
time you load a PDF in IE, it displays the dialog box "Open it" or "Save it to disk". Uncheck
the option "Always ask before opening this type of file" and choose Open. From now on, PDF files
will open automatically in an external Acrobat window.
<br>
The drawback of the method is that you need to alter the client configuration, which you can do
in an intranet environment but not for the Internet.
<br>
<br>
- Use a redirection technique. It consists in generating the PDF in a temporary file on the server
and redirect the client to it. For example, at the end of the script, you can put the following:
<div class="doc-source">
<pre><code>//Determine a temporary file name in the current directory
$file = basename(tempnam('.', 'tmp'));
rename($file, $file.'.pdf');
$file .= '.pdf';
//Save PDF to file
$pdf-&gt;Output($file, 'F');
//Redirect
header('Location: '.$file);</code></pre>
</div>
This method turns the dynamic PDF into a static one and avoids all troubles. But you have to do
some cleaning in order to delete the temporary files. For example:
<div class="doc-source">
<pre><code>function CleanFiles($dir)
{
//Delete temporary files
$t = time();
$h = opendir($dir);
while($file=readdir($h))
{
if(substr($file,0,3)=='tmp' &amp;&amp; substr($file,-4)=='.pdf')
{
$path = $dir.'/'.$file;
if($t-filemtime($path)&gt;3600)
@unlink($path);
}
}
closedir($h);
}</code></pre>
</div>
This function deletes all files of the form tmp*.pdf older than an hour in the specified
directory. You may call it where you want, for example in the script which generates the PDF.
</li>
<li id='q4'>
<p><b>4.</b> <span class='question'>I can't make line breaks work. I put \n in the string printed by MultiCell but it doesn't work.</span></p>
You have to enclose your string with double quotes, not single ones.
</li>
<li id='q5'>
<p><b>5.</b> <span class='question'>I try to display a variable in the Header method but nothing prints.</span></p>
You have to use the <code>global</code> keyword to access global variables, for example:
<div class="doc-source">
<pre><code>function Header()
{
global $title;
$this-&gt;SetFont('Arial', 'B', 15);
$this-&gt;Cell(0, 10, $title, 1, 1, 'C');
}
$title = 'My title';</code></pre>
</div>
Alternatively, you can use an object property:
<div class="doc-source">
<pre><code>function Header()
{
$this-&gt;SetFont('Arial', 'B', 15);
$this-&gt;Cell(0, 10, $this-&gt;title, 1, 1, 'C');
}
$pdf-&gt;title = 'My title';</code></pre>
</div>
</li>
<li id='q6'>
<p><b>6.</b> <span class='question'>I defined the Header and Footer methods in my PDF class but nothing appears.</span></p>
You have to create an object from the PDF class, not FPDF:
<div class="doc-source">
<pre><code>$pdf = new PDF();</code></pre>
</div>
</li>
<li id='q7'>
<p><b>7.</b> <span class='question'>Accented characters are replaced by some strange characters like é.</span></p>
Don't use UTF-8 encoding. Standard FPDF fonts use ISO-8859-1 or Windows-1252.
It is possible to perform a conversion to ISO-8859-1 with utf8_decode():
<div class="doc-source">
<pre><code>$str = utf8_decode($str);</code></pre>
</div>
But some characters such as Euro won't be translated correctly. If the iconv extension is available, the
right way to do it is the following:
<div class="doc-source">
<pre><code>$str = iconv('UTF-8', 'windows-1252', $str);</code></pre>
</div>
</li>
<li id='q8'>
<p><b>8.</b> <span class='question'>I try to display the Euro symbol but it doesn't work.</span></p>
The standard fonts have the Euro character at position 128. You can define a constant like this
for convenience:
<div class="doc-source">
<pre><code>define('EURO', chr(128));</code></pre>
</div>
</li>
<li id='q9'>
<p><b>9.</b> <span class='question'>I get the following error when I try to generate a PDF: Some data has already been output, can't send PDF file</span></p>
You must send nothing to the browser except the PDF itself: no HTML, no space, no carriage return. A common
case is having extra blank at the end of an included script file.<br>
If you can't figure out where the problem comes from, this other message appearing just before can help you:<br>
<br>
<b>Warning:</b> Cannot modify header information - headers already sent by (output started at script.php:X)<br>
<br>
It means that script.php outputs something at line X. Go to this line and fix it.
In case the message doesn't show, first check that you didn't disable warnings, then add this at the very
beginning of your script:
<div class="doc-source">
<pre><code>ob_end_clean();</code></pre>
</div>
If you still don't see it, disable zlib.output_compression in your php.ini and it should appear.
</li>
<li id='q10'>
<p><b>10.</b> <span class='question'>I draw a frame with very precise dimensions, but when printed I notice some differences.</span></p>
To respect dimensions, select "None" for the Page Scaling setting instead of "Shrink to Printable Area" in the print dialog box.
</li>
<li id='q11'>
<p><b>11.</b> <span class='question'>I'd like to use the whole surface of the page, but when printed I always have some margins. How can I get rid of them?</span></p>
Printers have physical margins (different depending on the models); it is therefore impossible to remove
them and print on the whole surface of the paper.
</li>
<li id='q12'>
<p><b>12.</b> <span class='question'>How can I put a background in my PDF?</span></p>
For a picture, call Image() in the Header() method, before any other output. To set a background color, use Rect().
</li>
<li id='q13'>
<p><b>13.</b> <span class='question'>How can I set a specific header or footer on the first page?</span></p>
Simply test the page number:
<div class="doc-source">
<pre><code>function Header()
{
if($this-&gt;PageNo()==1)
{
//First page
...
}
else
{
//Other pages
...
}
}</code></pre>
</div>
</li>
<li id='q14'>
<p><b>14.</b> <span class='question'>I'd like to use extensions provided by different scripts. How can I combine them?</span></p>
Use an inheritance chain. If you have two classes, say A in a.php:
<div class="doc-source">
<pre><code>require('fpdf.php');
class A extends FPDF
{
...
}</code></pre>
</div>
and B in b.php:
<div class="doc-source">
<pre><code>require('fpdf.php');
class B extends FPDF
{
...
}</code></pre>
</div>
then make B extend A:
<div class="doc-source">
<pre><code>require('a.php');
class B extends A
{
...
}</code></pre>
</div>
and make your own class extend B:
<div class="doc-source">
<pre><code>require('b.php');
class PDF extends B
{
...
}
$pdf = new PDF();</code></pre>
</div>
</li>
<li id='q15'>
<p><b>15.</b> <span class='question'>How can I send the PDF by email?</span></p>
As any other file, but an easy way is to use <a href="http://phpmailer.codeworxtech.com">PHPMailer</a> and
its in-memory attachment:
<div class="doc-source">
<pre><code>$mail = new PHPMailer();
...
$doc = $pdf-&gt;Output('', 'S');
$mail-&gt;AddStringAttachment($doc, 'doc.pdf', 'base64', 'application/pdf');
$mail-&gt;Send();</code></pre>
</div>
</li>
<li id='q16'>
<p><b>16.</b> <span class='question'>What's the limit of the file sizes I can generate with FPDF?</span></p>
There is no particular limit. There are some constraints, however:
<br>
<br>
- The maximum memory size allocated to PHP scripts is usually 8MB. For very big documents,
especially with images, this limit may be reached (the file being built into memory). The
parameter is configured in the php.ini file.
<br>
<br>
- The maximum execution time allocated defaults to 30 seconds. This limit can of course be easily
reached. It is configured in php.ini and may be altered dynamically with set_time_limit().
<br>
<br>
- Browsers generally have a 5 minute time-out. If you send the PDF directly to the browser and
reach the limit, it will be lost. It is therefore advised for very big documents to
generate them in a file, and to send some data to the browser from time to time (with a call
to flush() to force the output). When the document is finished, you can send a redirection to
it or create a link.
<br>
Remark: even if the browser times out, the script may continue to run on the server.
</li>
<li id='q17'>
<p><b>17.</b> <span class='question'>Can I modify a PDF with FPDF?</span></p>
It is possible to import pages from an existing PDF document thanks to the FPDI extension:<br>
<br>
<a href="http://www.setasign.de/products/pdf-php-solutions/fpdi/" target="_blank">http://www.setasign.de/products/pdf-php-solutions/fpdi/</a><br>
<br>
You can then add some content to them.
</li>
<li id='q18'>
<p><b>18.</b> <span class='question'>I'd like to make a search engine in PHP and index PDF files. Can I do it with FPDF?</span></p>
No. But a GPL C utility does exist, pdftotext, which is able to extract the textual content from
a PDF. It is provided with the Xpdf package:<br>
<br>
<a href="http://www.foolabs.com/xpdf/" target="_blank">http://www.foolabs.com/xpdf/</a>
</li>
<li id='q19'>
<p><b>19.</b> <span class='question'>Can I convert an HTML page to PDF with FPDF?</span></p>
Not real-world pages. But a GPL C utility does exist, htmldoc, which allows to do it and gives good results:<br>
<br>
<a href="http://www.htmldoc.org" target="_blank">http://www.htmldoc.org</a>
</li>
<li id='q20'>
<p><b>20.</b> <span class='question'>Can I concatenate PDF files with FPDF?</span></p>
Not directly, but it is possible to use <a href="http://www.setasign.de/products/pdf-php-solutions/fpdi/demos/concatenate-fake/" target="_blank">FPDI</a>
to perform this task. Some free command-line tools also exist:<br>
<br>
<a href="http://thierry.schmit.free.fr/spip/spip.php?article15&amp;lang=en" target="_blank">mbtPdfAsm</a><br>
<a href="http://www.accesspdf.com/pdftk/" target="_blank">pdftk</a>
</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,3 @@
You can read the documentation at : http://fpdf.org/en/doc/index.php
it has been removed because of the size of the package of HTML2PDF...

View File

@ -0,0 +1,7 @@
<?php
for($i=0;$i<=255;$i++)
$fpdf_charwidths['courier'][chr($i)]=600;
$fpdf_charwidths['courierB']=$fpdf_charwidths['courier'];
$fpdf_charwidths['courierI']=$fpdf_charwidths['courier'];
$fpdf_charwidths['courierBI']=$fpdf_charwidths['courier'];
?>

View File

@ -0,0 +1,15 @@
<?php
$fpdf_charwidths['helvetica']=array(
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
?>

View File

@ -0,0 +1,15 @@
<?php
$fpdf_charwidths['helveticaB']=array(
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
?>

View File

@ -0,0 +1,15 @@
<?php
$fpdf_charwidths['helveticaBI']=array(
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
?>

View File

@ -0,0 +1,15 @@
<?php
$fpdf_charwidths['helveticaI']=array(
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
?>

View File

@ -0,0 +1,251 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!89 U+2030 perthousand
!8A U+0160 Scaron
!8B U+2039 guilsinglleft
!8C U+015A Sacute
!8D U+0164 Tcaron
!8E U+017D Zcaron
!8F U+0179 Zacute
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!99 U+2122 trademark
!9A U+0161 scaron
!9B U+203A guilsinglright
!9C U+015B sacute
!9D U+0165 tcaron
!9E U+017E zcaron
!9F U+017A zacute
!A0 U+00A0 space
!A1 U+02C7 caron
!A2 U+02D8 breve
!A3 U+0141 Lslash
!A4 U+00A4 currency
!A5 U+0104 Aogonek
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+015E Scedilla
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+017B Zdotaccent
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+02DB ogonek
!B3 U+0142 lslash
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00B8 cedilla
!B9 U+0105 aogonek
!BA U+015F scedilla
!BB U+00BB guillemotright
!BC U+013D Lcaron
!BD U+02DD hungarumlaut
!BE U+013E lcaron
!BF U+017C zdotaccent
!C0 U+0154 Racute
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+0102 Abreve
!C4 U+00C4 Adieresis
!C5 U+0139 Lacute
!C6 U+0106 Cacute
!C7 U+00C7 Ccedilla
!C8 U+010C Ccaron
!C9 U+00C9 Eacute
!CA U+0118 Eogonek
!CB U+00CB Edieresis
!CC U+011A Ecaron
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+010E Dcaron
!D0 U+0110 Dcroat
!D1 U+0143 Nacute
!D2 U+0147 Ncaron
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+0150 Ohungarumlaut
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+0158 Rcaron
!D9 U+016E Uring
!DA U+00DA Uacute
!DB U+0170 Uhungarumlaut
!DC U+00DC Udieresis
!DD U+00DD Yacute
!DE U+0162 Tcommaaccent
!DF U+00DF germandbls
!E0 U+0155 racute
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+0103 abreve
!E4 U+00E4 adieresis
!E5 U+013A lacute
!E6 U+0107 cacute
!E7 U+00E7 ccedilla
!E8 U+010D ccaron
!E9 U+00E9 eacute
!EA U+0119 eogonek
!EB U+00EB edieresis
!EC U+011B ecaron
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+010F dcaron
!F0 U+0111 dcroat
!F1 U+0144 nacute
!F2 U+0148 ncaron
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+0151 ohungarumlaut
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+0159 rcaron
!F9 U+016F uring
!FA U+00FA uacute
!FB U+0171 uhungarumlaut
!FC U+00FC udieresis
!FD U+00FD yacute
!FE U+0163 tcommaaccent
!FF U+02D9 dotaccent

View File

@ -0,0 +1,255 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0402 afii10051
!81 U+0403 afii10052
!82 U+201A quotesinglbase
!83 U+0453 afii10100
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!88 U+20AC Euro
!89 U+2030 perthousand
!8A U+0409 afii10058
!8B U+2039 guilsinglleft
!8C U+040A afii10059
!8D U+040C afii10061
!8E U+040B afii10060
!8F U+040F afii10145
!90 U+0452 afii10099
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!99 U+2122 trademark
!9A U+0459 afii10106
!9B U+203A guilsinglright
!9C U+045A afii10107
!9D U+045C afii10109
!9E U+045B afii10108
!9F U+045F afii10193
!A0 U+00A0 space
!A1 U+040E afii10062
!A2 U+045E afii10110
!A3 U+0408 afii10057
!A4 U+00A4 currency
!A5 U+0490 afii10050
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+0401 afii10023
!A9 U+00A9 copyright
!AA U+0404 afii10053
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+0407 afii10056
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+0406 afii10055
!B3 U+0456 afii10103
!B4 U+0491 afii10098
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+0451 afii10071
!B9 U+2116 afii61352
!BA U+0454 afii10101
!BB U+00BB guillemotright
!BC U+0458 afii10105
!BD U+0405 afii10054
!BE U+0455 afii10102
!BF U+0457 afii10104
!C0 U+0410 afii10017
!C1 U+0411 afii10018
!C2 U+0412 afii10019
!C3 U+0413 afii10020
!C4 U+0414 afii10021
!C5 U+0415 afii10022
!C6 U+0416 afii10024
!C7 U+0417 afii10025
!C8 U+0418 afii10026
!C9 U+0419 afii10027
!CA U+041A afii10028
!CB U+041B afii10029
!CC U+041C afii10030
!CD U+041D afii10031
!CE U+041E afii10032
!CF U+041F afii10033
!D0 U+0420 afii10034
!D1 U+0421 afii10035
!D2 U+0422 afii10036
!D3 U+0423 afii10037
!D4 U+0424 afii10038
!D5 U+0425 afii10039
!D6 U+0426 afii10040
!D7 U+0427 afii10041
!D8 U+0428 afii10042
!D9 U+0429 afii10043
!DA U+042A afii10044
!DB U+042B afii10045
!DC U+042C afii10046
!DD U+042D afii10047
!DE U+042E afii10048
!DF U+042F afii10049
!E0 U+0430 afii10065
!E1 U+0431 afii10066
!E2 U+0432 afii10067
!E3 U+0433 afii10068
!E4 U+0434 afii10069
!E5 U+0435 afii10070
!E6 U+0436 afii10072
!E7 U+0437 afii10073
!E8 U+0438 afii10074
!E9 U+0439 afii10075
!EA U+043A afii10076
!EB U+043B afii10077
!EC U+043C afii10078
!ED U+043D afii10079
!EE U+043E afii10080
!EF U+043F afii10081
!F0 U+0440 afii10082
!F1 U+0441 afii10083
!F2 U+0442 afii10084
!F3 U+0443 afii10085
!F4 U+0444 afii10086
!F5 U+0445 afii10087
!F6 U+0446 afii10088
!F7 U+0447 afii10089
!F8 U+0448 afii10090
!F9 U+0449 afii10091
!FA U+044A afii10092
!FB U+044B afii10093
!FC U+044C afii10094
!FD U+044D afii10095
!FE U+044E afii10096
!FF U+044F afii10097

View File

@ -0,0 +1,251 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!83 U+0192 florin
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!88 U+02C6 circumflex
!89 U+2030 perthousand
!8A U+0160 Scaron
!8B U+2039 guilsinglleft
!8C U+0152 OE
!8E U+017D Zcaron
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!98 U+02DC tilde
!99 U+2122 trademark
!9A U+0161 scaron
!9B U+203A guilsinglright
!9C U+0153 oe
!9E U+017E zcaron
!9F U+0178 Ydieresis
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+00AA ordfeminine
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00B8 cedilla
!B9 U+00B9 onesuperior
!BA U+00BA ordmasculine
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00BF questiondown
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+00C3 Atilde
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+00CC Igrave
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+00D0 Eth
!D1 U+00D1 Ntilde
!D2 U+00D2 Ograve
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+00DD Yacute
!DE U+00DE Thorn
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+00E3 atilde
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+00EC igrave
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+00F0 eth
!F1 U+00F1 ntilde
!F2 U+00F2 ograve
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+00FD yacute
!FE U+00FE thorn
!FF U+00FF ydieresis

View File

@ -0,0 +1,239 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!83 U+0192 florin
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!89 U+2030 perthousand
!8B U+2039 guilsinglleft
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!99 U+2122 trademark
!9B U+203A guilsinglright
!A0 U+00A0 space
!A1 U+0385 dieresistonos
!A2 U+0386 Alphatonos
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+2015 afii00208
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+0384 tonos
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+0388 Epsilontonos
!B9 U+0389 Etatonos
!BA U+038A Iotatonos
!BB U+00BB guillemotright
!BC U+038C Omicrontonos
!BD U+00BD onehalf
!BE U+038E Upsilontonos
!BF U+038F Omegatonos
!C0 U+0390 iotadieresistonos
!C1 U+0391 Alpha
!C2 U+0392 Beta
!C3 U+0393 Gamma
!C4 U+0394 Delta
!C5 U+0395 Epsilon
!C6 U+0396 Zeta
!C7 U+0397 Eta
!C8 U+0398 Theta
!C9 U+0399 Iota
!CA U+039A Kappa
!CB U+039B Lambda
!CC U+039C Mu
!CD U+039D Nu
!CE U+039E Xi
!CF U+039F Omicron
!D0 U+03A0 Pi
!D1 U+03A1 Rho
!D3 U+03A3 Sigma
!D4 U+03A4 Tau
!D5 U+03A5 Upsilon
!D6 U+03A6 Phi
!D7 U+03A7 Chi
!D8 U+03A8 Psi
!D9 U+03A9 Omega
!DA U+03AA Iotadieresis
!DB U+03AB Upsilondieresis
!DC U+03AC alphatonos
!DD U+03AD epsilontonos
!DE U+03AE etatonos
!DF U+03AF iotatonos
!E0 U+03B0 upsilondieresistonos
!E1 U+03B1 alpha
!E2 U+03B2 beta
!E3 U+03B3 gamma
!E4 U+03B4 delta
!E5 U+03B5 epsilon
!E6 U+03B6 zeta
!E7 U+03B7 eta
!E8 U+03B8 theta
!E9 U+03B9 iota
!EA U+03BA kappa
!EB U+03BB lambda
!EC U+03BC mu
!ED U+03BD nu
!EE U+03BE xi
!EF U+03BF omicron
!F0 U+03C0 pi
!F1 U+03C1 rho
!F2 U+03C2 sigma1
!F3 U+03C3 sigma
!F4 U+03C4 tau
!F5 U+03C5 upsilon
!F6 U+03C6 phi
!F7 U+03C7 chi
!F8 U+03C8 psi
!F9 U+03C9 omega
!FA U+03CA iotadieresis
!FB U+03CB upsilondieresis
!FC U+03CC omicrontonos
!FD U+03CD upsilontonos
!FE U+03CE omegatonos

View File

@ -0,0 +1,249 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!83 U+0192 florin
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!88 U+02C6 circumflex
!89 U+2030 perthousand
!8A U+0160 Scaron
!8B U+2039 guilsinglleft
!8C U+0152 OE
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!98 U+02DC tilde
!99 U+2122 trademark
!9A U+0161 scaron
!9B U+203A guilsinglright
!9C U+0153 oe
!9F U+0178 Ydieresis
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+00AA ordfeminine
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00B8 cedilla
!B9 U+00B9 onesuperior
!BA U+00BA ordmasculine
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00BF questiondown
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+00C3 Atilde
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+00CC Igrave
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+011E Gbreve
!D1 U+00D1 Ntilde
!D2 U+00D2 Ograve
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+0130 Idotaccent
!DE U+015E Scedilla
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+00E3 atilde
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+00EC igrave
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+011F gbreve
!F1 U+00F1 ntilde
!F2 U+00F2 ograve
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+0131 dotlessi
!FE U+015F scedilla
!FF U+00FF ydieresis

View File

@ -0,0 +1,233 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!83 U+0192 florin
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!88 U+02C6 circumflex
!89 U+2030 perthousand
!8B U+2039 guilsinglleft
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!98 U+02DC tilde
!99 U+2122 trademark
!9B U+203A guilsinglright
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+20AA afii57636
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+00D7 multiply
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD sfthyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 middot
!B8 U+00B8 cedilla
!B9 U+00B9 onesuperior
!BA U+00F7 divide
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00BF questiondown
!C0 U+05B0 afii57799
!C1 U+05B1 afii57801
!C2 U+05B2 afii57800
!C3 U+05B3 afii57802
!C4 U+05B4 afii57793
!C5 U+05B5 afii57794
!C6 U+05B6 afii57795
!C7 U+05B7 afii57798
!C8 U+05B8 afii57797
!C9 U+05B9 afii57806
!CB U+05BB afii57796
!CC U+05BC afii57807
!CD U+05BD afii57839
!CE U+05BE afii57645
!CF U+05BF afii57841
!D0 U+05C0 afii57842
!D1 U+05C1 afii57804
!D2 U+05C2 afii57803
!D3 U+05C3 afii57658
!D4 U+05F0 afii57716
!D5 U+05F1 afii57717
!D6 U+05F2 afii57718
!D7 U+05F3 gereshhebrew
!D8 U+05F4 gershayimhebrew
!E0 U+05D0 afii57664
!E1 U+05D1 afii57665
!E2 U+05D2 afii57666
!E3 U+05D3 afii57667
!E4 U+05D4 afii57668
!E5 U+05D5 afii57669
!E6 U+05D6 afii57670
!E7 U+05D7 afii57671
!E8 U+05D8 afii57672
!E9 U+05D9 afii57673
!EA U+05DA afii57674
!EB U+05DB afii57675
!EC U+05DC afii57676
!ED U+05DD afii57677
!EE U+05DE afii57678
!EF U+05DF afii57679
!F0 U+05E0 afii57680
!F1 U+05E1 afii57681
!F2 U+05E2 afii57682
!F3 U+05E3 afii57683
!F4 U+05E4 afii57684
!F5 U+05E5 afii57685
!F6 U+05E6 afii57686
!F7 U+05E7 afii57687
!F8 U+05E8 afii57688
!F9 U+05E9 afii57689
!FA U+05EA afii57690
!FD U+200E afii299
!FE U+200F afii300

View File

@ -0,0 +1,244 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!89 U+2030 perthousand
!8B U+2039 guilsinglleft
!8D U+00A8 dieresis
!8E U+02C7 caron
!8F U+00B8 cedilla
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!99 U+2122 trademark
!9B U+203A guilsinglright
!9D U+00AF macron
!9E U+02DB ogonek
!A0 U+00A0 space
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00D8 Oslash
!A9 U+00A9 copyright
!AA U+0156 Rcommaaccent
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00C6 AE
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00F8 oslash
!B9 U+00B9 onesuperior
!BA U+0157 rcommaaccent
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00E6 ae
!C0 U+0104 Aogonek
!C1 U+012E Iogonek
!C2 U+0100 Amacron
!C3 U+0106 Cacute
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+0118 Eogonek
!C7 U+0112 Emacron
!C8 U+010C Ccaron
!C9 U+00C9 Eacute
!CA U+0179 Zacute
!CB U+0116 Edotaccent
!CC U+0122 Gcommaaccent
!CD U+0136 Kcommaaccent
!CE U+012A Imacron
!CF U+013B Lcommaaccent
!D0 U+0160 Scaron
!D1 U+0143 Nacute
!D2 U+0145 Ncommaaccent
!D3 U+00D3 Oacute
!D4 U+014C Omacron
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+0172 Uogonek
!D9 U+0141 Lslash
!DA U+015A Sacute
!DB U+016A Umacron
!DC U+00DC Udieresis
!DD U+017B Zdotaccent
!DE U+017D Zcaron
!DF U+00DF germandbls
!E0 U+0105 aogonek
!E1 U+012F iogonek
!E2 U+0101 amacron
!E3 U+0107 cacute
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+0119 eogonek
!E7 U+0113 emacron
!E8 U+010D ccaron
!E9 U+00E9 eacute
!EA U+017A zacute
!EB U+0117 edotaccent
!EC U+0123 gcommaaccent
!ED U+0137 kcommaaccent
!EE U+012B imacron
!EF U+013C lcommaaccent
!F0 U+0161 scaron
!F1 U+0144 nacute
!F2 U+0146 ncommaaccent
!F3 U+00F3 oacute
!F4 U+014D omacron
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+0173 uogonek
!F9 U+0142 lslash
!FA U+015B sacute
!FB U+016B umacron
!FC U+00FC udieresis
!FD U+017C zdotaccent
!FE U+017E zcaron
!FF U+02D9 dotaccent

View File

@ -0,0 +1,247 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!83 U+0192 florin
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!88 U+02C6 circumflex
!89 U+2030 perthousand
!8B U+2039 guilsinglleft
!8C U+0152 OE
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!98 U+02DC tilde
!99 U+2122 trademark
!9B U+203A guilsinglright
!9C U+0153 oe
!9F U+0178 Ydieresis
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+00AA ordfeminine
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00B8 cedilla
!B9 U+00B9 onesuperior
!BA U+00BA ordmasculine
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00BF questiondown
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+0102 Abreve
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+0300 gravecomb
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+0110 Dcroat
!D1 U+00D1 Ntilde
!D2 U+0309 hookabovecomb
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+01A0 Ohorn
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+01AF Uhorn
!DE U+0303 tildecomb
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+0103 abreve
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+0301 acutecomb
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+0111 dcroat
!F1 U+00F1 ntilde
!F2 U+0323 dotbelowcomb
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+01A1 ohorn
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+01B0 uhorn
!FE U+20AB dong
!FF U+00FF ydieresis

View File

@ -0,0 +1,225 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!85 U+2026 ellipsis
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!A0 U+00A0 space
!A1 U+0E01 kokaithai
!A2 U+0E02 khokhaithai
!A3 U+0E03 khokhuatthai
!A4 U+0E04 khokhwaithai
!A5 U+0E05 khokhonthai
!A6 U+0E06 khorakhangthai
!A7 U+0E07 ngonguthai
!A8 U+0E08 chochanthai
!A9 U+0E09 chochingthai
!AA U+0E0A chochangthai
!AB U+0E0B sosothai
!AC U+0E0C chochoethai
!AD U+0E0D yoyingthai
!AE U+0E0E dochadathai
!AF U+0E0F topatakthai
!B0 U+0E10 thothanthai
!B1 U+0E11 thonangmonthothai
!B2 U+0E12 thophuthaothai
!B3 U+0E13 nonenthai
!B4 U+0E14 dodekthai
!B5 U+0E15 totaothai
!B6 U+0E16 thothungthai
!B7 U+0E17 thothahanthai
!B8 U+0E18 thothongthai
!B9 U+0E19 nonuthai
!BA U+0E1A bobaimaithai
!BB U+0E1B poplathai
!BC U+0E1C phophungthai
!BD U+0E1D fofathai
!BE U+0E1E phophanthai
!BF U+0E1F fofanthai
!C0 U+0E20 phosamphaothai
!C1 U+0E21 momathai
!C2 U+0E22 yoyakthai
!C3 U+0E23 roruathai
!C4 U+0E24 ruthai
!C5 U+0E25 lolingthai
!C6 U+0E26 luthai
!C7 U+0E27 wowaenthai
!C8 U+0E28 sosalathai
!C9 U+0E29 sorusithai
!CA U+0E2A sosuathai
!CB U+0E2B hohipthai
!CC U+0E2C lochulathai
!CD U+0E2D oangthai
!CE U+0E2E honokhukthai
!CF U+0E2F paiyannoithai
!D0 U+0E30 saraathai
!D1 U+0E31 maihanakatthai
!D2 U+0E32 saraaathai
!D3 U+0E33 saraamthai
!D4 U+0E34 saraithai
!D5 U+0E35 saraiithai
!D6 U+0E36 sarauethai
!D7 U+0E37 saraueethai
!D8 U+0E38 sarauthai
!D9 U+0E39 sarauuthai
!DA U+0E3A phinthuthai
!DF U+0E3F bahtthai
!E0 U+0E40 saraethai
!E1 U+0E41 saraaethai
!E2 U+0E42 saraothai
!E3 U+0E43 saraaimaimuanthai
!E4 U+0E44 saraaimaimalaithai
!E5 U+0E45 lakkhangyaothai
!E6 U+0E46 maiyamokthai
!E7 U+0E47 maitaikhuthai
!E8 U+0E48 maiekthai
!E9 U+0E49 maithothai
!EA U+0E4A maitrithai
!EB U+0E4B maichattawathai
!EC U+0E4C thanthakhatthai
!ED U+0E4D nikhahitthai
!EE U+0E4E yamakkanthai
!EF U+0E4F fongmanthai
!F0 U+0E50 zerothai
!F1 U+0E51 onethai
!F2 U+0E52 twothai
!F3 U+0E53 threethai
!F4 U+0E54 fourthai
!F5 U+0E55 fivethai
!F6 U+0E56 sixthai
!F7 U+0E57 seventhai
!F8 U+0E58 eightthai
!F9 U+0E59 ninethai
!FA U+0E5A angkhankhuthai
!FB U+0E5B khomutthai

View File

@ -0,0 +1,256 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+00AA ordfeminine
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00B8 cedilla
!B9 U+00B9 onesuperior
!BA U+00BA ordmasculine
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00BF questiondown
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+00C3 Atilde
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+00CC Igrave
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+00D0 Eth
!D1 U+00D1 Ntilde
!D2 U+00D2 Ograve
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+00DD Yacute
!DE U+00DE Thorn
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+00E3 atilde
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+00EC igrave
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+00F0 eth
!F1 U+00F1 ntilde
!F2 U+00F2 ograve
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+00FD yacute
!FE U+00FE thorn
!FF U+00FF ydieresis

View File

@ -0,0 +1,248 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+0E01 kokaithai
!A2 U+0E02 khokhaithai
!A3 U+0E03 khokhuatthai
!A4 U+0E04 khokhwaithai
!A5 U+0E05 khokhonthai
!A6 U+0E06 khorakhangthai
!A7 U+0E07 ngonguthai
!A8 U+0E08 chochanthai
!A9 U+0E09 chochingthai
!AA U+0E0A chochangthai
!AB U+0E0B sosothai
!AC U+0E0C chochoethai
!AD U+0E0D yoyingthai
!AE U+0E0E dochadathai
!AF U+0E0F topatakthai
!B0 U+0E10 thothanthai
!B1 U+0E11 thonangmonthothai
!B2 U+0E12 thophuthaothai
!B3 U+0E13 nonenthai
!B4 U+0E14 dodekthai
!B5 U+0E15 totaothai
!B6 U+0E16 thothungthai
!B7 U+0E17 thothahanthai
!B8 U+0E18 thothongthai
!B9 U+0E19 nonuthai
!BA U+0E1A bobaimaithai
!BB U+0E1B poplathai
!BC U+0E1C phophungthai
!BD U+0E1D fofathai
!BE U+0E1E phophanthai
!BF U+0E1F fofanthai
!C0 U+0E20 phosamphaothai
!C1 U+0E21 momathai
!C2 U+0E22 yoyakthai
!C3 U+0E23 roruathai
!C4 U+0E24 ruthai
!C5 U+0E25 lolingthai
!C6 U+0E26 luthai
!C7 U+0E27 wowaenthai
!C8 U+0E28 sosalathai
!C9 U+0E29 sorusithai
!CA U+0E2A sosuathai
!CB U+0E2B hohipthai
!CC U+0E2C lochulathai
!CD U+0E2D oangthai
!CE U+0E2E honokhukthai
!CF U+0E2F paiyannoithai
!D0 U+0E30 saraathai
!D1 U+0E31 maihanakatthai
!D2 U+0E32 saraaathai
!D3 U+0E33 saraamthai
!D4 U+0E34 saraithai
!D5 U+0E35 saraiithai
!D6 U+0E36 sarauethai
!D7 U+0E37 saraueethai
!D8 U+0E38 sarauthai
!D9 U+0E39 sarauuthai
!DA U+0E3A phinthuthai
!DF U+0E3F bahtthai
!E0 U+0E40 saraethai
!E1 U+0E41 saraaethai
!E2 U+0E42 saraothai
!E3 U+0E43 saraaimaimuanthai
!E4 U+0E44 saraaimaimalaithai
!E5 U+0E45 lakkhangyaothai
!E6 U+0E46 maiyamokthai
!E7 U+0E47 maitaikhuthai
!E8 U+0E48 maiekthai
!E9 U+0E49 maithothai
!EA U+0E4A maitrithai
!EB U+0E4B maichattawathai
!EC U+0E4C thanthakhatthai
!ED U+0E4D nikhahitthai
!EE U+0E4E yamakkanthai
!EF U+0E4F fongmanthai
!F0 U+0E50 zerothai
!F1 U+0E51 onethai
!F2 U+0E52 twothai
!F3 U+0E53 threethai
!F4 U+0E54 fourthai
!F5 U+0E55 fivethai
!F6 U+0E56 sixthai
!F7 U+0E57 seventhai
!F8 U+0E58 eightthai
!F9 U+0E59 ninethai
!FA U+0E5A angkhankhuthai
!FB U+0E5B khomutthai

View File

@ -0,0 +1,256 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+20AC Euro
!A5 U+00A5 yen
!A6 U+0160 Scaron
!A7 U+00A7 section
!A8 U+0161 scaron
!A9 U+00A9 copyright
!AA U+00AA ordfeminine
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+017D Zcaron
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+017E zcaron
!B9 U+00B9 onesuperior
!BA U+00BA ordmasculine
!BB U+00BB guillemotright
!BC U+0152 OE
!BD U+0153 oe
!BE U+0178 Ydieresis
!BF U+00BF questiondown
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+00C3 Atilde
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+00CC Igrave
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+00D0 Eth
!D1 U+00D1 Ntilde
!D2 U+00D2 Ograve
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+00DD Yacute
!DE U+00DE Thorn
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+00E3 atilde
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+00EC igrave
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+00F0 eth
!F1 U+00F1 ntilde
!F2 U+00F2 ograve
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+00FD yacute
!FE U+00FE thorn
!FF U+00FF ydieresis

View File

@ -0,0 +1,256 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+0104 Aogonek
!A2 U+0105 aogonek
!A3 U+0141 Lslash
!A4 U+20AC Euro
!A5 U+201E quotedblbase
!A6 U+0160 Scaron
!A7 U+00A7 section
!A8 U+0161 scaron
!A9 U+00A9 copyright
!AA U+0218 Scommaaccent
!AB U+00AB guillemotleft
!AC U+0179 Zacute
!AD U+00AD hyphen
!AE U+017A zacute
!AF U+017B Zdotaccent
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+010C Ccaron
!B3 U+0142 lslash
!B4 U+017D Zcaron
!B5 U+201D quotedblright
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+017E zcaron
!B9 U+010D ccaron
!BA U+0219 scommaaccent
!BB U+00BB guillemotright
!BC U+0152 OE
!BD U+0153 oe
!BE U+0178 Ydieresis
!BF U+017C zdotaccent
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+0102 Abreve
!C4 U+00C4 Adieresis
!C5 U+0106 Cacute
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+00CC Igrave
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+0110 Dcroat
!D1 U+0143 Nacute
!D2 U+00D2 Ograve
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+0150 Ohungarumlaut
!D6 U+00D6 Odieresis
!D7 U+015A Sacute
!D8 U+0170 Uhungarumlaut
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+0118 Eogonek
!DE U+021A Tcommaaccent
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+0103 abreve
!E4 U+00E4 adieresis
!E5 U+0107 cacute
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+00EC igrave
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+0111 dcroat
!F1 U+0144 nacute
!F2 U+00F2 ograve
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+0151 ohungarumlaut
!F6 U+00F6 odieresis
!F7 U+015B sacute
!F8 U+0171 uhungarumlaut
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+0119 eogonek
!FE U+021B tcommaaccent
!FF U+00FF ydieresis

View File

@ -0,0 +1,256 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+0104 Aogonek
!A2 U+02D8 breve
!A3 U+0141 Lslash
!A4 U+00A4 currency
!A5 U+013D Lcaron
!A6 U+015A Sacute
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+0160 Scaron
!AA U+015E Scedilla
!AB U+0164 Tcaron
!AC U+0179 Zacute
!AD U+00AD hyphen
!AE U+017D Zcaron
!AF U+017B Zdotaccent
!B0 U+00B0 degree
!B1 U+0105 aogonek
!B2 U+02DB ogonek
!B3 U+0142 lslash
!B4 U+00B4 acute
!B5 U+013E lcaron
!B6 U+015B sacute
!B7 U+02C7 caron
!B8 U+00B8 cedilla
!B9 U+0161 scaron
!BA U+015F scedilla
!BB U+0165 tcaron
!BC U+017A zacute
!BD U+02DD hungarumlaut
!BE U+017E zcaron
!BF U+017C zdotaccent
!C0 U+0154 Racute
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+0102 Abreve
!C4 U+00C4 Adieresis
!C5 U+0139 Lacute
!C6 U+0106 Cacute
!C7 U+00C7 Ccedilla
!C8 U+010C Ccaron
!C9 U+00C9 Eacute
!CA U+0118 Eogonek
!CB U+00CB Edieresis
!CC U+011A Ecaron
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+010E Dcaron
!D0 U+0110 Dcroat
!D1 U+0143 Nacute
!D2 U+0147 Ncaron
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+0150 Ohungarumlaut
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+0158 Rcaron
!D9 U+016E Uring
!DA U+00DA Uacute
!DB U+0170 Uhungarumlaut
!DC U+00DC Udieresis
!DD U+00DD Yacute
!DE U+0162 Tcommaaccent
!DF U+00DF germandbls
!E0 U+0155 racute
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+0103 abreve
!E4 U+00E4 adieresis
!E5 U+013A lacute
!E6 U+0107 cacute
!E7 U+00E7 ccedilla
!E8 U+010D ccaron
!E9 U+00E9 eacute
!EA U+0119 eogonek
!EB U+00EB edieresis
!EC U+011B ecaron
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+010F dcaron
!F0 U+0111 dcroat
!F1 U+0144 nacute
!F2 U+0148 ncaron
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+0151 ohungarumlaut
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+0159 rcaron
!F9 U+016F uring
!FA U+00FA uacute
!FB U+0171 uhungarumlaut
!FC U+00FC udieresis
!FD U+00FD yacute
!FE U+0163 tcommaaccent
!FF U+02D9 dotaccent

View File

@ -0,0 +1,256 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+0104 Aogonek
!A2 U+0138 kgreenlandic
!A3 U+0156 Rcommaaccent
!A4 U+00A4 currency
!A5 U+0128 Itilde
!A6 U+013B Lcommaaccent
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+0160 Scaron
!AA U+0112 Emacron
!AB U+0122 Gcommaaccent
!AC U+0166 Tbar
!AD U+00AD hyphen
!AE U+017D Zcaron
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+0105 aogonek
!B2 U+02DB ogonek
!B3 U+0157 rcommaaccent
!B4 U+00B4 acute
!B5 U+0129 itilde
!B6 U+013C lcommaaccent
!B7 U+02C7 caron
!B8 U+00B8 cedilla
!B9 U+0161 scaron
!BA U+0113 emacron
!BB U+0123 gcommaaccent
!BC U+0167 tbar
!BD U+014A Eng
!BE U+017E zcaron
!BF U+014B eng
!C0 U+0100 Amacron
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+00C3 Atilde
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+012E Iogonek
!C8 U+010C Ccaron
!C9 U+00C9 Eacute
!CA U+0118 Eogonek
!CB U+00CB Edieresis
!CC U+0116 Edotaccent
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+012A Imacron
!D0 U+0110 Dcroat
!D1 U+0145 Ncommaaccent
!D2 U+014C Omacron
!D3 U+0136 Kcommaaccent
!D4 U+00D4 Ocircumflex
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+0172 Uogonek
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+0168 Utilde
!DE U+016A Umacron
!DF U+00DF germandbls
!E0 U+0101 amacron
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+00E3 atilde
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+012F iogonek
!E8 U+010D ccaron
!E9 U+00E9 eacute
!EA U+0119 eogonek
!EB U+00EB edieresis
!EC U+0117 edotaccent
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+012B imacron
!F0 U+0111 dcroat
!F1 U+0146 ncommaaccent
!F2 U+014D omacron
!F3 U+0137 kcommaaccent
!F4 U+00F4 ocircumflex
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+0173 uogonek
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+0169 utilde
!FE U+016B umacron
!FF U+02D9 dotaccent

View File

@ -0,0 +1,256 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+0401 afii10023
!A2 U+0402 afii10051
!A3 U+0403 afii10052
!A4 U+0404 afii10053
!A5 U+0405 afii10054
!A6 U+0406 afii10055
!A7 U+0407 afii10056
!A8 U+0408 afii10057
!A9 U+0409 afii10058
!AA U+040A afii10059
!AB U+040B afii10060
!AC U+040C afii10061
!AD U+00AD hyphen
!AE U+040E afii10062
!AF U+040F afii10145
!B0 U+0410 afii10017
!B1 U+0411 afii10018
!B2 U+0412 afii10019
!B3 U+0413 afii10020
!B4 U+0414 afii10021
!B5 U+0415 afii10022
!B6 U+0416 afii10024
!B7 U+0417 afii10025
!B8 U+0418 afii10026
!B9 U+0419 afii10027
!BA U+041A afii10028
!BB U+041B afii10029
!BC U+041C afii10030
!BD U+041D afii10031
!BE U+041E afii10032
!BF U+041F afii10033
!C0 U+0420 afii10034
!C1 U+0421 afii10035
!C2 U+0422 afii10036
!C3 U+0423 afii10037
!C4 U+0424 afii10038
!C5 U+0425 afii10039
!C6 U+0426 afii10040
!C7 U+0427 afii10041
!C8 U+0428 afii10042
!C9 U+0429 afii10043
!CA U+042A afii10044
!CB U+042B afii10045
!CC U+042C afii10046
!CD U+042D afii10047
!CE U+042E afii10048
!CF U+042F afii10049
!D0 U+0430 afii10065
!D1 U+0431 afii10066
!D2 U+0432 afii10067
!D3 U+0433 afii10068
!D4 U+0434 afii10069
!D5 U+0435 afii10070
!D6 U+0436 afii10072
!D7 U+0437 afii10073
!D8 U+0438 afii10074
!D9 U+0439 afii10075
!DA U+043A afii10076
!DB U+043B afii10077
!DC U+043C afii10078
!DD U+043D afii10079
!DE U+043E afii10080
!DF U+043F afii10081
!E0 U+0440 afii10082
!E1 U+0441 afii10083
!E2 U+0442 afii10084
!E3 U+0443 afii10085
!E4 U+0444 afii10086
!E5 U+0445 afii10087
!E6 U+0446 afii10088
!E7 U+0447 afii10089
!E8 U+0448 afii10090
!E9 U+0449 afii10091
!EA U+044A afii10092
!EB U+044B afii10093
!EC U+044C afii10094
!ED U+044D afii10095
!EE U+044E afii10096
!EF U+044F afii10097
!F0 U+2116 afii61352
!F1 U+0451 afii10071
!F2 U+0452 afii10099
!F3 U+0453 afii10100
!F4 U+0454 afii10101
!F5 U+0455 afii10102
!F6 U+0456 afii10103
!F7 U+0457 afii10104
!F8 U+0458 afii10105
!F9 U+0459 afii10106
!FA U+045A afii10107
!FB U+045B afii10108
!FC U+045C afii10109
!FD U+00A7 section
!FE U+045E afii10110
!FF U+045F afii10193

View File

@ -0,0 +1,250 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+2018 quoteleft
!A2 U+2019 quoteright
!A3 U+00A3 sterling
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AF U+2015 afii00208
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+0384 tonos
!B5 U+0385 dieresistonos
!B6 U+0386 Alphatonos
!B7 U+00B7 periodcentered
!B8 U+0388 Epsilontonos
!B9 U+0389 Etatonos
!BA U+038A Iotatonos
!BB U+00BB guillemotright
!BC U+038C Omicrontonos
!BD U+00BD onehalf
!BE U+038E Upsilontonos
!BF U+038F Omegatonos
!C0 U+0390 iotadieresistonos
!C1 U+0391 Alpha
!C2 U+0392 Beta
!C3 U+0393 Gamma
!C4 U+0394 Delta
!C5 U+0395 Epsilon
!C6 U+0396 Zeta
!C7 U+0397 Eta
!C8 U+0398 Theta
!C9 U+0399 Iota
!CA U+039A Kappa
!CB U+039B Lambda
!CC U+039C Mu
!CD U+039D Nu
!CE U+039E Xi
!CF U+039F Omicron
!D0 U+03A0 Pi
!D1 U+03A1 Rho
!D3 U+03A3 Sigma
!D4 U+03A4 Tau
!D5 U+03A5 Upsilon
!D6 U+03A6 Phi
!D7 U+03A7 Chi
!D8 U+03A8 Psi
!D9 U+03A9 Omega
!DA U+03AA Iotadieresis
!DB U+03AB Upsilondieresis
!DC U+03AC alphatonos
!DD U+03AD epsilontonos
!DE U+03AE etatonos
!DF U+03AF iotatonos
!E0 U+03B0 upsilondieresistonos
!E1 U+03B1 alpha
!E2 U+03B2 beta
!E3 U+03B3 gamma
!E4 U+03B4 delta
!E5 U+03B5 epsilon
!E6 U+03B6 zeta
!E7 U+03B7 eta
!E8 U+03B8 theta
!E9 U+03B9 iota
!EA U+03BA kappa
!EB U+03BB lambda
!EC U+03BC mu
!ED U+03BD nu
!EE U+03BE xi
!EF U+03BF omicron
!F0 U+03C0 pi
!F1 U+03C1 rho
!F2 U+03C2 sigma1
!F3 U+03C3 sigma
!F4 U+03C4 tau
!F5 U+03C5 upsilon
!F6 U+03C6 phi
!F7 U+03C7 chi
!F8 U+03C8 psi
!F9 U+03C9 omega
!FA U+03CA iotadieresis
!FB U+03CB upsilondieresis
!FC U+03CC omicrontonos
!FD U+03CD upsilontonos
!FE U+03CE omegatonos

View File

@ -0,0 +1,256 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+00AA ordfeminine
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00B8 cedilla
!B9 U+00B9 onesuperior
!BA U+00BA ordmasculine
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00BF questiondown
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+00C3 Atilde
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+00CC Igrave
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+011E Gbreve
!D1 U+00D1 Ntilde
!D2 U+00D2 Ograve
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+0130 Idotaccent
!DE U+015E Scedilla
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+00E3 atilde
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+00EC igrave
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+011F gbreve
!F1 U+00F1 ntilde
!F2 U+00F2 ograve
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+0131 dotlessi
!FE U+015F scedilla
!FF U+00FF ydieresis

View File

@ -0,0 +1,256 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+2500 SF100000
!81 U+2502 SF110000
!82 U+250C SF010000
!83 U+2510 SF030000
!84 U+2514 SF020000
!85 U+2518 SF040000
!86 U+251C SF080000
!87 U+2524 SF090000
!88 U+252C SF060000
!89 U+2534 SF070000
!8A U+253C SF050000
!8B U+2580 upblock
!8C U+2584 dnblock
!8D U+2588 block
!8E U+258C lfblock
!8F U+2590 rtblock
!90 U+2591 ltshade
!91 U+2592 shade
!92 U+2593 dkshade
!93 U+2320 integraltp
!94 U+25A0 filledbox
!95 U+2219 periodcentered
!96 U+221A radical
!97 U+2248 approxequal
!98 U+2264 lessequal
!99 U+2265 greaterequal
!9A U+00A0 space
!9B U+2321 integralbt
!9C U+00B0 degree
!9D U+00B2 twosuperior
!9E U+00B7 periodcentered
!9F U+00F7 divide
!A0 U+2550 SF430000
!A1 U+2551 SF240000
!A2 U+2552 SF510000
!A3 U+0451 afii10071
!A4 U+2553 SF520000
!A5 U+2554 SF390000
!A6 U+2555 SF220000
!A7 U+2556 SF210000
!A8 U+2557 SF250000
!A9 U+2558 SF500000
!AA U+2559 SF490000
!AB U+255A SF380000
!AC U+255B SF280000
!AD U+255C SF270000
!AE U+255D SF260000
!AF U+255E SF360000
!B0 U+255F SF370000
!B1 U+2560 SF420000
!B2 U+2561 SF190000
!B3 U+0401 afii10023
!B4 U+2562 SF200000
!B5 U+2563 SF230000
!B6 U+2564 SF470000
!B7 U+2565 SF480000
!B8 U+2566 SF410000
!B9 U+2567 SF450000
!BA U+2568 SF460000
!BB U+2569 SF400000
!BC U+256A SF540000
!BD U+256B SF530000
!BE U+256C SF440000
!BF U+00A9 copyright
!C0 U+044E afii10096
!C1 U+0430 afii10065
!C2 U+0431 afii10066
!C3 U+0446 afii10088
!C4 U+0434 afii10069
!C5 U+0435 afii10070
!C6 U+0444 afii10086
!C7 U+0433 afii10068
!C8 U+0445 afii10087
!C9 U+0438 afii10074
!CA U+0439 afii10075
!CB U+043A afii10076
!CC U+043B afii10077
!CD U+043C afii10078
!CE U+043D afii10079
!CF U+043E afii10080
!D0 U+043F afii10081
!D1 U+044F afii10097
!D2 U+0440 afii10082
!D3 U+0441 afii10083
!D4 U+0442 afii10084
!D5 U+0443 afii10085
!D6 U+0436 afii10072
!D7 U+0432 afii10067
!D8 U+044C afii10094
!D9 U+044B afii10093
!DA U+0437 afii10073
!DB U+0448 afii10090
!DC U+044D afii10095
!DD U+0449 afii10091
!DE U+0447 afii10089
!DF U+044A afii10092
!E0 U+042E afii10048
!E1 U+0410 afii10017
!E2 U+0411 afii10018
!E3 U+0426 afii10040
!E4 U+0414 afii10021
!E5 U+0415 afii10022
!E6 U+0424 afii10038
!E7 U+0413 afii10020
!E8 U+0425 afii10039
!E9 U+0418 afii10026
!EA U+0419 afii10027
!EB U+041A afii10028
!EC U+041B afii10029
!ED U+041C afii10030
!EE U+041D afii10031
!EF U+041E afii10032
!F0 U+041F afii10033
!F1 U+042F afii10049
!F2 U+0420 afii10034
!F3 U+0421 afii10035
!F4 U+0422 afii10036
!F5 U+0423 afii10037
!F6 U+0416 afii10024
!F7 U+0412 afii10019
!F8 U+042C afii10046
!F9 U+042B afii10045
!FA U+0417 afii10025
!FB U+0428 afii10042
!FC U+042D afii10047
!FD U+0429 afii10043
!FE U+0427 afii10041
!FF U+042A afii10044

View File

@ -0,0 +1,256 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+2500 SF100000
!81 U+2502 SF110000
!82 U+250C SF010000
!83 U+2510 SF030000
!84 U+2514 SF020000
!85 U+2518 SF040000
!86 U+251C SF080000
!87 U+2524 SF090000
!88 U+252C SF060000
!89 U+2534 SF070000
!8A U+253C SF050000
!8B U+2580 upblock
!8C U+2584 dnblock
!8D U+2588 block
!8E U+258C lfblock
!8F U+2590 rtblock
!90 U+2591 ltshade
!91 U+2592 shade
!92 U+2593 dkshade
!93 U+2320 integraltp
!94 U+25A0 filledbox
!95 U+2022 bullet
!96 U+221A radical
!97 U+2248 approxequal
!98 U+2264 lessequal
!99 U+2265 greaterequal
!9A U+00A0 space
!9B U+2321 integralbt
!9C U+00B0 degree
!9D U+00B2 twosuperior
!9E U+00B7 periodcentered
!9F U+00F7 divide
!A0 U+2550 SF430000
!A1 U+2551 SF240000
!A2 U+2552 SF510000
!A3 U+0451 afii10071
!A4 U+0454 afii10101
!A5 U+2554 SF390000
!A6 U+0456 afii10103
!A7 U+0457 afii10104
!A8 U+2557 SF250000
!A9 U+2558 SF500000
!AA U+2559 SF490000
!AB U+255A SF380000
!AC U+255B SF280000
!AD U+0491 afii10098
!AE U+255D SF260000
!AF U+255E SF360000
!B0 U+255F SF370000
!B1 U+2560 SF420000
!B2 U+2561 SF190000
!B3 U+0401 afii10023
!B4 U+0404 afii10053
!B5 U+2563 SF230000
!B6 U+0406 afii10055
!B7 U+0407 afii10056
!B8 U+2566 SF410000
!B9 U+2567 SF450000
!BA U+2568 SF460000
!BB U+2569 SF400000
!BC U+256A SF540000
!BD U+0490 afii10050
!BE U+256C SF440000
!BF U+00A9 copyright
!C0 U+044E afii10096
!C1 U+0430 afii10065
!C2 U+0431 afii10066
!C3 U+0446 afii10088
!C4 U+0434 afii10069
!C5 U+0435 afii10070
!C6 U+0444 afii10086
!C7 U+0433 afii10068
!C8 U+0445 afii10087
!C9 U+0438 afii10074
!CA U+0439 afii10075
!CB U+043A afii10076
!CC U+043B afii10077
!CD U+043C afii10078
!CE U+043D afii10079
!CF U+043E afii10080
!D0 U+043F afii10081
!D1 U+044F afii10097
!D2 U+0440 afii10082
!D3 U+0441 afii10083
!D4 U+0442 afii10084
!D5 U+0443 afii10085
!D6 U+0436 afii10072
!D7 U+0432 afii10067
!D8 U+044C afii10094
!D9 U+044B afii10093
!DA U+0437 afii10073
!DB U+0448 afii10090
!DC U+044D afii10095
!DD U+0449 afii10091
!DE U+0447 afii10089
!DF U+044A afii10092
!E0 U+042E afii10048
!E1 U+0410 afii10017
!E2 U+0411 afii10018
!E3 U+0426 afii10040
!E4 U+0414 afii10021
!E5 U+0415 afii10022
!E6 U+0424 afii10038
!E7 U+0413 afii10020
!E8 U+0425 afii10039
!E9 U+0418 afii10026
!EA U+0419 afii10027
!EB U+041A afii10028
!EC U+041B afii10029
!ED U+041C afii10030
!EE U+041D afii10031
!EF U+041E afii10032
!F0 U+041F afii10033
!F1 U+042F afii10049
!F2 U+0420 afii10034
!F3 U+0421 afii10035
!F4 U+0422 afii10036
!F5 U+0423 afii10037
!F6 U+0416 afii10024
!F7 U+0412 afii10019
!F8 U+042C afii10046
!F9 U+042B afii10045
!FA U+0417 afii10025
!FB U+0428 afii10042
!FC U+042D afii10047
!FD U+0429 afii10043
!FE U+0427 afii10041
!FF U+042A afii10044

View File

@ -0,0 +1,419 @@
<?php
/*******************************************************************************
* Utility to generate font definition files *
* *
* Version: 1.14 *
* Date: 2008-08-03 *
* Author: Olivier PLATHEY *
*******************************************************************************/
function ReadMap($enc)
{
//Read a map file
$file=dirname(__FILE__).'/'.strtolower($enc).'.map';
$a=file($file);
if(empty($a))
die('<b>Error:</b> encoding not found: '.$enc);
$cc2gn=array();
foreach($a as $l)
{
if($l[0]=='!')
{
$e=preg_split('/[ \\t]+/',rtrim($l));
$cc=hexdec(substr($e[0],1));
$gn=$e[2];
$cc2gn[$cc]=$gn;
}
}
for($i=0;$i<=255;$i++)
{
if(!isset($cc2gn[$i]))
$cc2gn[$i]='.notdef';
}
return $cc2gn;
}
function ReadAFM($file, &$map)
{
//Read a font metric file
$a=file($file);
if(empty($a))
die('File not found');
$widths=array();
$fm=array();
$fix=array('Edot'=>'Edotaccent','edot'=>'edotaccent','Idot'=>'Idotaccent','Zdot'=>'Zdotaccent','zdot'=>'zdotaccent',
'Odblacute'=>'Ohungarumlaut','odblacute'=>'ohungarumlaut','Udblacute'=>'Uhungarumlaut','udblacute'=>'uhungarumlaut',
'Gcedilla'=>'Gcommaaccent','gcedilla'=>'gcommaaccent','Kcedilla'=>'Kcommaaccent','kcedilla'=>'kcommaaccent',
'Lcedilla'=>'Lcommaaccent','lcedilla'=>'lcommaaccent','Ncedilla'=>'Ncommaaccent','ncedilla'=>'ncommaaccent',
'Rcedilla'=>'Rcommaaccent','rcedilla'=>'rcommaaccent','Scedilla'=>'Scommaaccent','scedilla'=>'scommaaccent',
'Tcedilla'=>'Tcommaaccent','tcedilla'=>'tcommaaccent','Dslash'=>'Dcroat','dslash'=>'dcroat','Dmacron'=>'Dcroat','dmacron'=>'dcroat',
'combininggraveaccent'=>'gravecomb','combininghookabove'=>'hookabovecomb','combiningtildeaccent'=>'tildecomb',
'combiningacuteaccent'=>'acutecomb','combiningdotbelow'=>'dotbelowcomb','dongsign'=>'dong');
foreach($a as $l)
{
$e=explode(' ',rtrim($l));
if(count($e)<2)
continue;
$code=$e[0];
$param=$e[1];
if($code=='C')
{
//Character metrics
$cc=(int)$e[1];
$w=$e[4];
$gn=$e[7];
if(substr($gn,-4)=='20AC')
$gn='Euro';
if(isset($fix[$gn]))
{
//Fix incorrect glyph name
foreach($map as $c=>$n)
{
if($n==$fix[$gn])
$map[$c]=$gn;
}
}
if(empty($map))
{
//Symbolic font: use built-in encoding
$widths[$cc]=$w;
}
else
{
$widths[$gn]=$w;
if($gn=='X')
$fm['CapXHeight']=$e[13];
}
if($gn=='.notdef')
$fm['MissingWidth']=$w;
}
elseif($code=='FontName')
$fm['FontName']=$param;
elseif($code=='Weight')
$fm['Weight']=$param;
elseif($code=='ItalicAngle')
$fm['ItalicAngle']=(double)$param;
elseif($code=='Ascender')
$fm['Ascender']=(int)$param;
elseif($code=='Descender')
$fm['Descender']=(int)$param;
elseif($code=='UnderlineThickness')
$fm['UnderlineThickness']=(int)$param;
elseif($code=='UnderlinePosition')
$fm['UnderlinePosition']=(int)$param;
elseif($code=='IsFixedPitch')
$fm['IsFixedPitch']=($param=='true');
elseif($code=='FontBBox')
$fm['FontBBox']=array($e[1],$e[2],$e[3],$e[4]);
elseif($code=='CapHeight')
$fm['CapHeight']=(int)$param;
elseif($code=='StdVW')
$fm['StdVW']=(int)$param;
}
if(!isset($fm['FontName']))
die('FontName not found');
if(!empty($map))
{
if(!isset($widths['.notdef']))
$widths['.notdef']=600;
if(!isset($widths['Delta']) && isset($widths['increment']))
$widths['Delta']=$widths['increment'];
//Order widths according to map
for($i=0;$i<=255;$i++)
{
if(!isset($widths[$map[$i]]))
{
echo '<b>Warning:</b> character '.$map[$i].' is missing<br>';
$widths[$i]=$widths['.notdef'];
}
else
$widths[$i]=$widths[$map[$i]];
}
}
$fm['Widths']=$widths;
return $fm;
}
function MakeFontDescriptor($fm, $symbolic)
{
//Ascent
$asc=(isset($fm['Ascender']) ? $fm['Ascender'] : 1000);
$fd="array('Ascent'=>".$asc;
//Descent
$desc=(isset($fm['Descender']) ? $fm['Descender'] : -200);
$fd.=",'Descent'=>".$desc;
//CapHeight
if(isset($fm['CapHeight']))
$ch=$fm['CapHeight'];
elseif(isset($fm['CapXHeight']))
$ch=$fm['CapXHeight'];
else
$ch=$asc;
$fd.=",'CapHeight'=>".$ch;
//Flags
$flags=0;
if(isset($fm['IsFixedPitch']) && $fm['IsFixedPitch'])
$flags+=1<<0;
if($symbolic)
$flags+=1<<2;
if(!$symbolic)
$flags+=1<<5;
if(isset($fm['ItalicAngle']) && $fm['ItalicAngle']!=0)
$flags+=1<<6;
$fd.=",'Flags'=>".$flags;
//FontBBox
if(isset($fm['FontBBox']))
$fbb=$fm['FontBBox'];
else
$fbb=array(0,$desc-100,1000,$asc+100);
$fd.=",'FontBBox'=>'[".$fbb[0].' '.$fbb[1].' '.$fbb[2].' '.$fbb[3]."]'";
//ItalicAngle
$ia=(isset($fm['ItalicAngle']) ? $fm['ItalicAngle'] : 0);
$fd.=",'ItalicAngle'=>".$ia;
//StemV
if(isset($fm['StdVW']))
$stemv=$fm['StdVW'];
elseif(isset($fm['Weight']) && preg_match('/bold|black/i',$fm['Weight']))
$stemv=120;
else
$stemv=70;
$fd.=",'StemV'=>".$stemv;
//MissingWidth
if(isset($fm['MissingWidth']))
$fd.=",'MissingWidth'=>".$fm['MissingWidth'];
$fd.=')';
return $fd;
}
function MakeWidthArray($fm)
{
//Make character width array
$s="array(\n\t";
$cw=$fm['Widths'];
for($i=0;$i<=255;$i++)
{
if(chr($i)=="'")
$s.="'\\''";
elseif(chr($i)=="\\")
$s.="'\\\\'";
elseif($i>=32 && $i<=126)
$s.="'".chr($i)."'";
else
$s.="chr($i)";
$s.='=>'.$fm['Widths'][$i];
if($i<255)
$s.=',';
if(($i+1)%22==0)
$s.="\n\t";
}
$s.=')';
return $s;
}
function MakeFontEncoding($map)
{
//Build differences from reference encoding
$ref=ReadMap('cp1252');
$s='';
$last=0;
for($i=32;$i<=255;$i++)
{
if($map[$i]!=$ref[$i])
{
if($i!=$last+1)
$s.=$i.' ';
$last=$i;
$s.='/'.$map[$i].' ';
}
}
return rtrim($s);
}
function SaveToFile($file, $s, $mode)
{
$f=fopen($file,'w'.$mode);
if(!$f)
die('Can\'t write to file '.$file);
fwrite($f,$s,strlen($s));
fclose($f);
}
function ReadShort($f)
{
$a=unpack('n1n',fread($f,2));
return $a['n'];
}
function ReadLong($f)
{
$a=unpack('N1N',fread($f,4));
return $a['N'];
}
function CheckTTF($file)
{
//Check if font license allows embedding
$f=fopen($file,'rb');
if(!$f)
die('<b>Error:</b> Can\'t open '.$file);
//Extract number of tables
fseek($f,4,SEEK_CUR);
$nb=ReadShort($f);
fseek($f,6,SEEK_CUR);
//Seek OS/2 table
$found=false;
for($i=0;$i<$nb;$i++)
{
if(fread($f,4)=='OS/2')
{
$found=true;
break;
}
fseek($f,12,SEEK_CUR);
}
if(!$found)
{
fclose($f);
return;
}
fseek($f,4,SEEK_CUR);
$offset=ReadLong($f);
fseek($f,$offset,SEEK_SET);
//Extract fsType flags
fseek($f,8,SEEK_CUR);
$fsType=ReadShort($f);
$rl=($fsType & 0x02)!=0;
$pp=($fsType & 0x04)!=0;
$e=($fsType & 0x08)!=0;
fclose($f);
if($rl && !$pp && !$e)
echo '<b>Warning:</b> font license does not allow embedding';
}
/*******************************************************************************
* fontfile: path to TTF file (or empty string if not to be embedded) *
* afmfile: path to AFM file *
* enc: font encoding (or empty string for symbolic fonts) *
* patch: optional patch for encoding *
* type: font type if fontfile is empty *
*******************************************************************************/
function MakeFont($fontfile, $afmfile, $enc='cp1252', $patch=array(), $type='TrueType')
{
//Generate a font definition file
if(get_magic_quotes_runtime())
@set_magic_quotes_runtime(0);
ini_set('auto_detect_line_endings','1');
if($enc)
{
$map=ReadMap($enc);
foreach($patch as $cc=>$gn)
$map[$cc]=$gn;
}
else
$map=array();
if(!file_exists($afmfile))
die('<b>Error:</b> AFM file not found: '.$afmfile);
$fm=ReadAFM($afmfile,$map);
if($enc)
$diff=MakeFontEncoding($map);
else
$diff='';
$fd=MakeFontDescriptor($fm,empty($map));
//Find font type
if($fontfile)
{
$ext=strtolower(substr($fontfile,-3));
if($ext=='ttf')
$type='TrueType';
elseif($ext=='pfb')
$type='Type1';
else
die('<b>Error:</b> unrecognized font file extension: '.$ext);
}
else
{
if($type!='TrueType' && $type!='Type1')
die('<b>Error:</b> incorrect font type: '.$type);
}
//Start generation
$s='<?php'."\n";
$s.='$type=\''.$type."';\n";
$s.='$name=\''.$fm['FontName']."';\n";
$s.='$desc='.$fd.";\n";
if(!isset($fm['UnderlinePosition']))
$fm['UnderlinePosition']=-100;
if(!isset($fm['UnderlineThickness']))
$fm['UnderlineThickness']=50;
$s.='$up='.$fm['UnderlinePosition'].";\n";
$s.='$ut='.$fm['UnderlineThickness'].";\n";
$w=MakeWidthArray($fm);
$s.='$cw='.$w.";\n";
$s.='$enc=\''.$enc."';\n";
$s.='$diff=\''.$diff."';\n";
$basename=substr(basename($afmfile),0,-4);
if($fontfile)
{
//Embedded font
if(!file_exists($fontfile))
die('<b>Error:</b> font file not found: '.$fontfile);
if($type=='TrueType')
CheckTTF($fontfile);
$f=fopen($fontfile,'rb');
if(!$f)
die('<b>Error:</b> Can\'t open '.$fontfile);
$file=fread($f,filesize($fontfile));
fclose($f);
if($type=='Type1')
{
//Find first two sections and discard third one
$header=(ord($file[0])==128);
if($header)
{
//Strip first binary header
$file=substr($file,6);
}
$pos=strpos($file,'eexec');
if(!$pos)
die('<b>Error:</b> font file does not seem to be valid Type1');
$size1=$pos+6;
if($header && ord($file[$size1])==128)
{
//Strip second binary header
$file=substr($file,0,$size1).substr($file,$size1+6);
}
$pos=strpos($file,'00000000');
if(!$pos)
die('<b>Error:</b> font file does not seem to be valid Type1');
$size2=$pos-$size1;
$file=substr($file,0,$size1+$size2);
}
if(function_exists('gzcompress'))
{
$cmp=$basename.'.z';
SaveToFile($cmp,gzcompress($file),'b');
$s.='$file=\''.$cmp."';\n";
echo 'Font file compressed ('.$cmp.')<br>';
}
else
{
$s.='$file=\''.basename($fontfile)."';\n";
echo '<b>Notice:</b> font file could not be compressed (zlib extension not available)<br>';
}
if($type=='Type1')
{
$s.='$size1='.$size1.";\n";
$s.='$size2='.$size2.";\n";
}
else
$s.='$originalsize='.filesize($fontfile).";\n";
}
else
{
//Not embedded font
$s.='$file='."'';\n";
}
$s.="?>\n";
SaveToFile($basename.'.php',$s,'t');
echo 'Font definition file generated ('.$basename.'.php'.')<br>';
}
?>

View File

@ -0,0 +1,15 @@
<?php
$fpdf_charwidths['symbol']=array(
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549,
','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722,
'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768,
'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576,
'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,chr(127)=>0,chr(128)=>0,chr(129)=>0,chr(130)=>0,chr(131)=>0,
chr(132)=>0,chr(133)=>0,chr(134)=>0,chr(135)=>0,chr(136)=>0,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>0,chr(141)=>0,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>750,chr(161)=>620,chr(162)=>247,chr(163)=>549,chr(164)=>167,chr(165)=>713,chr(166)=>500,chr(167)=>753,chr(168)=>753,chr(169)=>753,chr(170)=>753,chr(171)=>1042,chr(172)=>987,chr(173)=>603,chr(174)=>987,chr(175)=>603,
chr(176)=>400,chr(177)=>549,chr(178)=>411,chr(179)=>549,chr(180)=>549,chr(181)=>713,chr(182)=>494,chr(183)=>460,chr(184)=>549,chr(185)=>549,chr(186)=>549,chr(187)=>549,chr(188)=>1000,chr(189)=>603,chr(190)=>1000,chr(191)=>658,chr(192)=>823,chr(193)=>686,chr(194)=>795,chr(195)=>987,chr(196)=>768,chr(197)=>768,
chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042,
chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329,
chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0);
?>

View File

@ -0,0 +1,15 @@
<?php
$fpdf_charwidths['times']=array(
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564,
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722,
'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944,
'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980,
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333,
chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500);
?>

View File

@ -0,0 +1,15 @@
<?php
$fpdf_charwidths['timesB']=array(
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722,
'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000,
'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833,
'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>667,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>300,chr(171)=>500,chr(172)=>570,chr(173)=>333,chr(174)=>747,chr(175)=>333,
chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>556,chr(182)=>540,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>330,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
?>

View File

@ -0,0 +1,15 @@
<?php
$fpdf_charwidths['timesBI']=array(
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667,
'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889,
'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>389,chr(159)=>611,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>266,chr(171)=>500,chr(172)=>606,chr(173)=>333,chr(174)=>747,chr(175)=>333,
chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>576,chr(182)=>500,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>300,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444);
?>

View File

@ -0,0 +1,15 @@
<?php
$fpdf_charwidths['timesI']=array(
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675,
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611,
'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833,
'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722,
'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
chr(132)=>556,chr(133)=>889,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>500,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>556,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>556,chr(148)=>556,chr(149)=>350,chr(150)=>500,chr(151)=>889,chr(152)=>333,chr(153)=>980,
chr(154)=>389,chr(155)=>333,chr(156)=>667,chr(157)=>350,chr(158)=>389,chr(159)=>556,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>275,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>675,chr(173)=>333,chr(174)=>760,chr(175)=>333,
chr(176)=>400,chr(177)=>675,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>523,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>611,chr(193)=>611,chr(194)=>611,chr(195)=>611,chr(196)=>611,chr(197)=>611,
chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444);
?>

View File

@ -0,0 +1,15 @@
<?php
$fpdf_charwidths['zapfdingbats']=array(
chr(0)=>0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0,
chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939,
','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692,
'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776,
'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873,
'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,chr(127)=>0,chr(128)=>390,chr(129)=>390,chr(130)=>317,chr(131)=>317,
chr(132)=>276,chr(133)=>276,chr(134)=>509,chr(135)=>509,chr(136)=>410,chr(137)=>410,chr(138)=>234,chr(139)=>234,chr(140)=>334,chr(141)=>334,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>0,chr(161)=>732,chr(162)=>544,chr(163)=>544,chr(164)=>910,chr(165)=>667,chr(166)=>760,chr(167)=>760,chr(168)=>776,chr(169)=>595,chr(170)=>694,chr(171)=>626,chr(172)=>788,chr(173)=>788,chr(174)=>788,chr(175)=>788,
chr(176)=>788,chr(177)=>788,chr(178)=>788,chr(179)=>788,chr(180)=>788,chr(181)=>788,chr(182)=>788,chr(183)=>788,chr(184)=>788,chr(185)=>788,chr(186)=>788,chr(187)=>788,chr(188)=>788,chr(189)=>788,chr(190)=>788,chr(191)=>788,chr(192)=>788,chr(193)=>788,chr(194)=>788,chr(195)=>788,chr(196)=>788,chr(197)=>788,
chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918,
chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874,
chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0);
?>

View File

@ -0,0 +1,21 @@
body {font-family:"Times New Roman",serif}
h1 {font:bold 135% Arial,sans-serif; color:#4000A0; margin-bottom:0.9em}
h2 {font:bold 95% Arial,sans-serif; color:#900000; margin-top:1.5em; margin-bottom:1em}
dl.param dt {text-decoration:underline}
dl.param dd {margin-top:1em; margin-bottom:1em}
dl.param ul {margin-top:1em; margin-bottom:1em}
tt, code, kbd {font-family:"Courier New",Courier,monospace; font-size:82%}
div.source {margin-top:1.4em; margin-bottom:1.3em}
div.source pre {display:table; border:1px solid #24246A; width:100%; margin:0em; font-family:inherit; font-size:100%}
div.source code {display:block; border:1px solid #C5C5EC; background-color:#F0F5FF; padding:6px; color:#000000}
div.doc-source {margin-top:1.4em; margin-bottom:1.3em}
div.doc-source pre {display:table; width:100%; margin:0em; font-family:inherit; font-size:100%}
div.doc-source code {display:block; background-color:#E0E0E0; padding:4px}
.kw {color:#000080; font-weight:bold}
.str {color:#CC0000}
.cmt {color:#008000}
p.demo {text-align:center; margin-top:-0.9em}
a.demo {text-decoration:none; font-weight:bold; color:#0000CC}
a.demo:link {text-decoration:none; font-weight:bold; color:#0000CC}
a.demo:hover {text-decoration:none; font-weight:bold; color:#0000FF}
a.demo:active {text-decoration:none; font-weight:bold; color:#0000FF}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,128 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>History</title>
<link type="text/css" rel="stylesheet" href="fpdf.css">
<style type="text/css">
dd {margin-top:1em; margin-bottom:1em}
</style>
</head>
<body>
<h1>History</h1>
<dl>
<dt><strong>v1.6</strong> (2008-08-03)</dt>
<dd>
- GIF image support.<br>
- Images can now trigger page breaks.<br>
- Possibility to have different page formats in a single document.<br>
- Document properties (author, creator, keywords, subject and title) can now be specified in UTF-8.<br>
- Fixed a bug: when a PNG was inserted through a URL, an error sometimes occurred.<br>
- An automatic page break in Header() doesn't cause an infinite loop any more.<br>
- Removed some warning messages appearing with recent PHP versions.<br>
- Added HTTP headers to reduce problems with IE.<br>
</dd>
<dt><strong>v1.53</strong> (2004-12-31)</dt>
<dd>
- When the font subdirectory is in the same directory as fpdf.php, it is no longer necessary to define the FPDF_FONTPATH constant.<br>
- The array $HTTP_SERVER_VARS is no longer used. It could cause trouble on PHP5-based configurations with the register_long_arrays option disabled.<br>
- Fixed a problem related to Type1 font embedding which caused trouble to some PDF processors.<br>
- The file name sent to the browser could not contain a space character.<br>
- The Cell() method could not print the number 0 (you had to pass the string '0').<br>
</dd>
<dt><strong>v1.52</strong> (2003-12-30)</dt>
<dd>
- Image() now displays the image at 72 dpi if no dimension is given.<br>
- Output() takes a string as second parameter to indicate destination.<br>
- Open() is now called automatically by AddPage().<br>
- Inserting remote JPEG images doesn't generate an error any longer.<br>
- Decimal separator is forced to dot in the constructor.<br>
- Added several encodings (Turkish, Thai, Hebrew, Ukrainian and Vietnamese).<br>
- The last line of a right-aligned MultiCell() was not correctly aligned if it was terminated by a carriage return.<br>
- No more error message about already sent headers when outputting the PDF to the standard output from the command line.<br>
- The underlining was going too far for text containing characters \, ( or ).<br>
- $HTTP_ENV_VARS has been replaced by $HTTP_SERVER_VARS.<br>
</dd>
<dt><strong>v1.51</strong> (2002-08-03)</dt>
<dd>
- Type1 font support.<br>
- Added Baltic encoding.<br>
- The class now works internally in points with the origin at the bottom in order to avoid two bugs occurring with Acrobat 5 :<br>&nbsp;&nbsp;* The line thickness was too large when printed under Windows 98 SE and ME.<br>&nbsp;&nbsp;* TrueType fonts didn't appear immediately inside the plug-in (a substitution font was used), one had to cause a window refresh to make them show up.<br>
- It is no longer necessary to set the decimal separator as dot to produce valid documents.<br>
- The clickable area in a cell was always on the left independently from the text alignment.<br>
- JPEG images in CMYK mode appeared in inverted colors.<br>
- Transparent PNG images in grayscale or true color mode were incorrectly handled.<br>
- Adding new fonts now works correctly even with the magic_quotes_runtime option set to on.<br>
</dd>
<dt><strong>v1.5</strong> (2002-05-28)</dt>
<dd>
- TrueType font (AddFont()) and encoding support (Western and Eastern Europe, Cyrillic and Greek).<br>
- Added Write() method.<br>
- Added underlined style.<br>
- Internal and external link support (AddLink(), SetLink(), Link()).<br>
- Added right margin management and methods SetRightMargin(), SetTopMargin().<br>
- Modification of SetDisplayMode() to select page layout.<br>
- The border parameter of MultiCell() now lets choose borders to draw as Cell().<br>
- When a document contains no page, Close() now calls AddPage() instead of causing a fatal error.<br>
</dd>
<dt><strong>v1.41</strong> (2002-03-13)</dt>
<dd>
- Fixed SetDisplayMode() which no longer worked (the PDF viewer used its default display).<br>
</dd>
<dt><strong>v1.4</strong> (2002-03-02)</dt>
<dd>
- PHP3 is no longer supported.<br>
- Page compression (SetCompression()).<br>
- Choice of page format and possibility to change orientation inside document.<br>
- Added AcceptPageBreak() method.<br>
- Ability to print the total number of pages (AliasNbPages()).<br>
- Choice of cell borders to draw.<br>
- New mode for Cell(): the current position can now move under the cell.<br>
- Ability to include an image by specifying height only (width is calculated automatically).<br>
- Fixed a bug: when a justified line triggered a page break, the footer inherited the corresponding word spacing.<br>
</dd>
<dt><strong>v1.31</strong> (2002-01-12)</dt>
<dd>
- Fixed a bug in drawing frame with MultiCell(): the last line always started from the left margin.<br>
- Removed Expires HTTP header (gives trouble in some situations).<br>
- Added Content-disposition HTTP header (seems to help in some situations).<br>
</dd>
<dt><strong>v1.3</strong> (2001-12-03)</dt>
<dd>
- Line break and text justification support (MultiCell()).<br>
- Color support (SetDrawColor(), SetFillColor(), SetTextColor()). Possibility to draw filled rectangles and paint cell background.<br>
- A cell whose width is declared null extends up to the right margin of the page.<br>
- Line width is now retained from page to page and defaults to 0.2 mm.<br>
- Added SetXY() method.<br>
- Fixed a passing by reference done in a deprecated manner for PHP4.<br>
</dd>
<dt><strong>v1.2</strong> (2001-11-11)</dt>
<dd>
- Added font metric files and GetStringWidth() method.<br>
- Centering and right-aligning text in cells.<br>
- Display mode control (SetDisplayMode()).<br>
- Added methods to set document properties (SetAuthor(), SetCreator(), SetKeywords(), SetSubject(), SetTitle()).<br>
- Possibility to force PDF download by browser.<br>
- Added SetX() and GetX() methods.<br>
- During automatic page break, current abscissa is now retained.<br>
</dd>
<dt><strong>v1.11</strong> (2001-10-20)</dt>
<dd>
- PNG support doesn't require PHP4/zlib any more. Data are now put directly into PDF without any decompression/recompression stage.<br>
- Image insertion now works correctly even with magic_quotes_runtime option set to on.<br>
</dd>
<dt><strong>v1.1</strong> (2001-10-07)</dt>
<dd>
- JPEG and PNG image support.<br>
</dd>
<dt><strong>v1.01</strong> (2001-10-03)</dt>
<dd>
- Fixed a bug involving page break: in case when Header() doesn't specify a font, the one from previous page was not restored and produced an incorrect document.<br>
</dd>
<dt><strong>v1.0</strong> (2001-09-17)</dt>
<dd>
- First version.<br>
</dd>
</dl>
</body>
</html>

View File

@ -0,0 +1,26 @@
The FPDF library is made up of the following elements:
- the main file, fpdf.php, which contains the class
- the font metric files (located in the font directory of this archive)
The metric files are necessary as soon as you want to output some text in a document.
They can be accessed from three different locations:
- the directory defined by the FPDF_FONTPATH constant (if this constant is defined)
- the font directory located in the directory containing fpdf.php (as it is the case in this archive)
- the directories accessible through include()
Here is an example defining FPDF_FONTPATH (note the mandatory final slash):
define('FPDF_FONTPATH','/home/www/font/');
require('fpdf.php');
If the files are not accessible, the SetFont() method will produce the following error:
FPDF error: Could not include font metric file
Remarks:
- Only the files corresponding to the fonts actually used are necessary
- The tutorials provided in this package are ready to be executed

View File

@ -0,0 +1,6 @@
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software to use, copy, modify, distribute, sublicense, and/or sell
copies of the software, and to permit persons to whom the software is furnished
to do so.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED.

View File

@ -0,0 +1,3 @@
You can read the tutorials at : http://fpdf.org/en/tutorial/index.php
it has been removed because of the size of the package of HTML2PDF...

View File

@ -0,0 +1,108 @@
*******************************************************
** Ce programme est distribué sous la licence LGPL, **
** reportez-vous au fichier _LGPL.txt ou à **
** http://www.gnu.org/licenses/lgpl.html **
** pour en savoir plus. **
** **
** Copyright 2000-2010 par Laurent Minguet **
*******************************************************
*******************************
* HTML2PDF v3.31 - 21/05/2010 *
*******************************
Utilisation :
------------
- necessite au minimum PHP 4.3.10
- regardez les exemples fournis pour voir le fonctionnement.
- les formulaires ne marchent QUE avec ADOBE READER 8 et ADOBE READER 9.0
- il est TRES IMPORTANT de fournir du HTML 4.01 valide au convertisseur,
mais seulement ce que contient le <body>
- pour les borders : il est conseillé qu'ils soient au format "solid 1mm #000000"
- pour les paddings : ils ne sont applicables qu'aux balises table, th, td, div, li
- Vous pouvez préciser l'encodage. Une fonte compatible doit être utilisée. Ceux acceptés sont :
cp1250, cp1251, cp1252, cp1253, cp1254, cp1255, cp1257, cp1258, cp874,
ISO-8859-1, ISO-8859-2, ISO-8859-4, ISO-8859-5, ISO-8859-7, ISO-8859-9,
ISO-8859-11, ISO-8859-15, ISO-8859-16, KOI8-R, KOI8-U
Pour l'utiliser : $html2pdf->setEncoding('cp1250');
- Une fonte par défaut peut être précisée,au cas ou la fonte demandée n'existe pas ou si aucune fonte n'est indiquée :
$html2pdf->setDefaultFont('Arial');
- la possibilité de protégé vos PDF est présente, CF Exemple 7.
- Certains tests peuvent être activés (true) ou de désactivés(false) :
* méthode setTestIsImage : tester que les images doivent existent bien
* méthode setTestTdInOnePage : tester que le contenu des TDs rentre sur une seule page
* méthode setTestIsDeprecated : tester que les anciennes proprietes des balises spécifiques ne sont plus presentes
- Un mode DEBUG permettant de connaitre les ressources utilisées lors de la construction du PDF est présente.
Il est activable en rajoutant la commande suivante juste après le constructeur (cf exemple 0):
$htmlpdf->setModeDebug();
- Certaines balises spécifiques ont été introduites :
* <page></page> (CF Exemple 7) :
permet de définir le format, l'orientation, les marges left, right, top et bottom, l'image
et la couleur de fond d'une page, sa taille et position, le footer.
Il est egalement possible de garder les header et footer des pages précédentes,
grace à l'attribue pageset="old" (CF Exemple 3 et 4)
* <page_header></page_header> (CF Exemple 3)
* <page_footer></page_footer> (CF Exemple 3)
* <nobreak></nobreak> :
permet de forcer l'affichage d'une partie sur une même page.
Si cette partie ne rentre pas dans le reste de la page, un saut de page est
effectué avant.
* <barcode></barcode> (CF Exemples 0 et 9) :
permet d'inserer des barcodes dans les pdfs, CF Exemples 0 et 9
Les types de codebar possible sont : EAN13, UPCA, C39.
* <qrcode></qrcode> (CF Exemple 13) :
permet d'inserer un codebar à 2 dimensions de type QRcode
voici un exemple d'utilisation :
<qrcode value="votre message ici" size="1mm" ec="M" style="color: black; background-color: white"></qrcode>
seul le parametre "value" est obligatoire
les différentes valeurs de type de correction sont L, M, Q, H
(QR Code is registered trademark of DENSO WAVE INCORPORATED | http://www.denso-wave.com/qrcode/)
ATTENTION : l'utilisation des QRCODE nécessite l'utilisation de PHP5
* <bookmark></bookmark> (CF Exemples 7 et About) :
permet d'inserer des bookmark dans les pdfs, CF Exemple 7 et About.
Il est egalement possible de créer un index automatiquement en fin de
document, CF exemple About.
* propriété css "rotate" :
valeurs possibles : 0, 90, 180, 270
applicable uniquement sur les divs (cf exemple 8)
change log :
-----------
regardez le fichier _changelog.txt
Aide et Support :
----------------
pour toutes questions et rapport de bug, merci d'utiliser exclusivement le lien de support ci-dessous.
Je ne répondrais à aucune question en dehors, afin que tout le monde puisse profiter des réponses.
Informations :
-------------
Programmeur : Spipu
email : webmaster@html2pdf.fr
site : http://html2pdf.fr/
wiki : http://html2pdf.fr/fr/wiki
support : http://html2pdf.fr/fr/forum
Remerciement :
-------------
* Olivier Plathey pour avoir conçu FPDF
* Nicola Asuni pour les modifications qu'il a accepté d'apporter à TCPDF
* yAronet pour l'hebergement du forum de support
* toutes les personnes qui m'ont aidé à développer cet librairie, et à traduire les différents textes

View File

@ -0,0 +1,249 @@
<?php
/*************************************************************************
* http://www.fpdf.org/en/script/script5.php
*
* @author Olivier
*
* This script implements EAN13 and UPC-A barcodes (the second being a particular case of the first one). Bars are drawn directly in the PDF (no image is generated).
* EAN13(float x, float y, string barcode [, float h [, float w]])
* x: abscissa of barcode.
* y: ordinate of barcode.
* barcode: value of barcode.
* h: height of barcode. Default value: 16.
* w: width of a bar. Default value: 0.35.
*
* UPC_A(float x, float y, string barcode [, float h [, float w]])
*
* Same parameters.
*
* An EAN13 barcode is made up of 13 digits, UPC-A of 12 (leading zeroes are added if necessary). The last digit is a check digit; if it's not supplied, it will be automatically computed.
************************************************************************/
/*************************************************************************
* http://www.fpdf.org/en/script/script46.php
*
* @author The-eh
*
* This script implements Code 39 barcodes. A Code 39 barcode can encode a string with the following characters: digits (0 to 9), uppercase letters (A to Z) and 8 additional characters (- . space $ / + % *).
* Code39(float xpos, float ypos, string code [, float baseline [, float height]])
* xpos: abscissa of barcode
* ypos: ordinate of barcode
* code: value of barcode
* height: bar height
* baseline: corresponds to the width of a wide bar
************************************************************************/
if (!defined('__CLASS_FPDF_CODEBAR__'))
{
define('__CLASS_FPDF_CODEBAR__', true);
require_once(dirname(__FILE__).'/../_fpdf/fpdf.php');
class FPDF_Codebar extends FPDF
{
var $footer_param = array();
function FPDF_Codebar($sens = 'P', $unit = 'mm', $format = 'A4')
{
$this->FPDF($sens, $unit, $format);
}
function BARCODE_EAN13($x,$y,$w,$h, $barcode,$label=true)
{
return $this->Barcode($x,$y,$w,$h, $barcode,13,$label);
}
function BARCODE_UPC_A($x,$y,$w,$h, $barcode,$label=true)
{
return $this->Barcode($x,$y,$w,$h, $barcode,12,$label);
}
function GetCheckDigit($barcode)
{
//Compute the check digit
$sum=0;
for($i=1;$i<=11;$i+=2)
$sum+=3*$barcode{$i};
for($i=0;$i<=10;$i+=2)
$sum+=$barcode{$i};
$r=$sum%10;
if($r>0)
$r=10-$r;
return $r;
}
function TestCheckDigit($barcode)
{
//Test validity of check digit
$sum=0;
for($i=1;$i<=11;$i+=2)
$sum+=3*$barcode{$i};
for($i=0;$i<=10;$i+=2)
$sum+=$barcode{$i};
return ($sum+$barcode{12})%10==0;
}
function Barcode($x,$y,$code_w,$code_h,$barcode,$len, $label=true)
{
//Padding
$barcode=str_pad($barcode,$len-1,'0',STR_PAD_LEFT);
if($len==12)
$barcode='0'.$barcode;
//Add or control the check digit
if(strlen($barcode)==12)
$barcode.=$this->GetCheckDigit($barcode);
elseif(!$this->TestCheckDigit($barcode))
$this->Error('Incorrect check digit');
//Convert digits to bars
$codes=array(
'A'=>array(
'0'=>'0001101','1'=>'0011001','2'=>'0010011','3'=>'0111101','4'=>'0100011',
'5'=>'0110001','6'=>'0101111','7'=>'0111011','8'=>'0110111','9'=>'0001011'),
'B'=>array(
'0'=>'0100111','1'=>'0110011','2'=>'0011011','3'=>'0100001','4'=>'0011101',
'5'=>'0111001','6'=>'0000101','7'=>'0010001','8'=>'0001001','9'=>'0010111'),
'C'=>array(
'0'=>'1110010','1'=>'1100110','2'=>'1101100','3'=>'1000010','4'=>'1011100',
'5'=>'1001110','6'=>'1010000','7'=>'1000100','8'=>'1001000','9'=>'1110100')
);
$parities=array(
'0'=>array('A','A','A','A','A','A'),
'1'=>array('A','A','B','A','B','B'),
'2'=>array('A','A','B','B','A','B'),
'3'=>array('A','A','B','B','B','A'),
'4'=>array('A','B','A','A','B','B'),
'5'=>array('A','B','B','A','A','B'),
'6'=>array('A','B','B','B','A','A'),
'7'=>array('A','B','A','B','A','B'),
'8'=>array('A','B','A','B','B','A'),
'9'=>array('A','B','B','A','B','A')
);
$code='101';
$p=$parities[$barcode{0}];
for($i=1;$i<=6;$i++)
$code.=$codes[$p[$i-1]][$barcode{$i}];
$code.='01010';
for($i=7;$i<=12;$i++)
$code.=$codes['C'][$barcode{$i}];
$code.='101';
//Draw bars
if (strlen($code))
{
$w = $code_w / strlen($code);
for($i=0;$i<strlen($code);$i++)
{
if($code{$i}=='1')
$this->Rect($x+$i*$w,$y,$w,$code_h,'F');
}
$code_t = substr($barcode,-$len);
$code_f = $code_w/strlen($code_t)*$this->k/0.60;
if ($label)
{
$this->SetFont('Arial','',$code_f);
$this->Text($x,$y+$code_h+0.90*$code_f/$this->k,$code_t);
//Print text uder barcode
$code_h+= $code_f/$this->k;
}
}
return array($code_w, $code_h);
}
function BARCODE_CODE39($x,$y,$w,$h, $barcode, $label=true)
{
$barChar['0'] = 'nnnwwnwnn';
$barChar['1'] = 'wnnwnnnnw';
$barChar['2'] = 'nnwwnnnnw';
$barChar['3'] = 'wnwwnnnnn';
$barChar['4'] = 'nnnwwnnnw';
$barChar['5'] = 'wnnwwnnnn';
$barChar['6'] = 'nnwwwnnnn';
$barChar['7'] = 'nnnwnnwnw';
$barChar['8'] = 'wnnwnnwnn';
$barChar['9'] = 'nnwwnnwnn';
$barChar['A'] = 'wnnnnwnnw';
$barChar['B'] = 'nnwnnwnnw';
$barChar['C'] = 'wnwnnwnnn';
$barChar['D'] = 'nnnnwwnnw';
$barChar['E'] = 'wnnnwwnnn';
$barChar['F'] = 'nnwnwwnnn';
$barChar['G'] = 'nnnnnwwnw';
$barChar['H'] = 'wnnnnwwnn';
$barChar['I'] = 'nnwnnwwnn';
$barChar['J'] = 'nnnnwwwnn';
$barChar['K'] = 'wnnnnnnww';
$barChar['L'] = 'nnwnnnnww';
$barChar['M'] = 'wnwnnnnwn';
$barChar['N'] = 'nnnnwnnww';
$barChar['O'] = 'wnnnwnnwn';
$barChar['P'] = 'nnwnwnnwn';
$barChar['Q'] = 'nnnnnnwww';
$barChar['R'] = 'wnnnnnwwn';
$barChar['S'] = 'nnwnnnwwn';
$barChar['T'] = 'nnnnwnwwn';
$barChar['U'] = 'wwnnnnnnw';
$barChar['V'] = 'nwwnnnnnw';
$barChar['W'] = 'wwwnnnnnn';
$barChar['X'] = 'nwnnwnnnw';
$barChar['Y'] = 'wwnnwnnnn';
$barChar['Z'] = 'nwwnwnnnn';
$barChar['-'] = 'nwnnnnwnw';
$barChar['.'] = 'wwnnnnwnn';
$barChar[' '] = 'nwwnnnwnn';
$barChar['*'] = 'nwnnwnwnn';
$barChar['$'] = 'nwnwnwnnn';
$barChar['/'] = 'nwnwnnnwn';
$barChar['+'] = 'nwnnnwnwn';
$barChar['%'] = 'nnnwnwnwn';
$barcode = '*'.strtoupper($barcode).'*';
$code = '';
$w_wide=3; $w_narrow=1; $w_gap=1; $nb_w = 0;
for($i=0; $i<strlen($barcode); $i++)
{
$char = $barcode{$i};
if(!isset($barChar[$char]))
$this->Error('Invalid character in barcode: '.$char);
$seq = $barChar[$char];
$code.= $seq;
for($bar=0; $bar<9; $bar++)
$nb_w+= ($seq{$bar}=='n' ? $w_narrow : $w_wide);
$nb_w+= $w_gap;
}
$w_wide = $w/$nb_w*$w_wide;
$w_narrow = $w/$nb_w*$w_narrow;
$w_gap = $w/$nb_w*$w_gap;
$xt = $x;
for($i=0; $i<strlen($code); $i++)
{
$j = $i%9;
$w_line = ($code{$i}=='n' ? $w_narrow : $w_wide);
if(!($j%2)) $this->Rect($xt, $y, $w_line, $h, 'F');
$xt+= $w_line;
if ($j==8) $xt+= $w_gap;
}
$code_w = $xt-$x;
$code_h = $h;
$code_t = $barcode;
$code_f = $code_w/strlen($code_t)*$this->k/0.60/2.5;
if ($label)
{
//Print text uder barcode
$code_h+= $code_f/$this->k;
$this->SetFont('Arial','',$code_f);
$this->Text($x,$y+$h+0.90*$code_f/$this->k,$code_t);
}
return array($code_w, $code_h);
}
}
}

View File

@ -0,0 +1,179 @@
<?php
/*************************************************************************
* http://www.fpdf.org/en/script/script1.php
*
* @author Olivier
*
* This extension adds bookmark support. The method to add a bookmark is:
*
* function Bookmark(string txt [, int level [, float y]])
*
* txt: the bookmark title.
* level: the bookmark level (0 is top level, 1 is just below, and so on).
* y: the y position of the bookmark destination in the current page. -1 means the current position. Default value: 0.
*
* The title must be encoded in ISO Latin-1.
************************************************************************/
/*************************************************************************
* http://www.fpdf.org/en/script/script13.php
*
* @author Min's
*
* This class prints an index from the created bookmarks.
************************************************************************/
if (!defined('__CLASS_FPDF_BOOKMARK__'))
{
define('__CLASS_FPDF_BOOKMARK__', true);
require_once(dirname(__FILE__).'/00_fpdf_codebar.class.php');
class FPDF_BookMark extends FPDF_Codebar
{
var $outlines=array();
var $OutlineRoot;
function FPDF_BookMark($orientation='P',$unit='mm',$format='A4')
{
$this->FPDF_Codebar($orientation,$unit,$format);
}
function Bookmark($txt, $level=0, $y=0)
{
if($y==-1) $y=$this->GetY();
$this->outlines[]=array('t'=>$txt, 'l'=>$level, 'y'=>($this->h-$y)*$this->k, 'p'=>$this->PageNo());
}
function _putbookmarks()
{
$nb=count($this->outlines);
if($nb==0) return;
$lru=array();
$level=0;
foreach($this->outlines as $i=>$o)
{
if($o['l']>0)
{
$parent=$lru[$o['l']-1];
//Set parent and last pointers
$this->outlines[$i]['parent']=$parent;
$this->outlines[$parent]['last']=$i;
if($o['l']>$level)
{
//Level increasing: set first pointer
$this->outlines[$parent]['first']=$i;
}
}
else
$this->outlines[$i]['parent']=$nb;
if($o['l']<=$level and $i>0)
{
//Set prev and next pointers
$prev=$lru[$o['l']];
$this->outlines[$prev]['next']=$i;
$this->outlines[$i]['prev']=$prev;
}
$lru[$o['l']]=$i;
$level=$o['l'];
}
//Outline items
$n=$this->n+1;
foreach($this->outlines as $i=>$o)
{
$this->_newobj();
$this->_out('<</Title '.$this->_textstring($o['t']));
$this->_out('/Parent '.($n+$o['parent']).' 0 R');
if(isset($o['prev']))
$this->_out('/Prev '.($n+$o['prev']).' 0 R');
if(isset($o['next']))
$this->_out('/Next '.($n+$o['next']).' 0 R');
if(isset($o['first']))
$this->_out('/First '.($n+$o['first']).' 0 R');
if(isset($o['last']))
$this->_out('/Last '.($n+$o['last']).' 0 R');
$this->_out(sprintf('/Dest [%d 0 R /XYZ 0 %.2F null]',1+2*$o['p'],$o['y']));
$this->_out('/Count 0>>');
$this->_out('endobj');
}
//Outline root
$this->_newobj();
$this->OutlineRoot=$this->n;
$this->_out('<</Type /Outlines /First '.$n.' 0 R');
$this->_out('/Last '.($n+$lru[0]).' 0 R>>');
$this->_out('endobj');
}
function _putresources()
{
parent::_putresources();
$this->_putbookmarks();
}
function _putcatalog()
{
parent::_putcatalog();
if(count($this->outlines)>0)
{
$this->_out('/Outlines '.$this->OutlineRoot.' 0 R');
$this->_out('/PageMode /UseOutlines');
}
}
function CreateIndex(&$obj, $titre = 'Index', $size_title = 20, $size_bookmark = 15, $bookmark_title = true, $display_page = true, $page = null)
{
if ($bookmark_title) $this->Bookmark($titre, 0, -1);
//Index title
$this->SetFontSize($size_title);
$this->Cell(0,5,$titre,0,1,'C');
$this->SetFontSize($size_bookmark);
$this->Ln(10);
$size=sizeof($this->outlines);
$PageCellSize=$this->GetStringWidth('p. '.$this->outlines[$size-1]['p'])+2;
for ($i=0;$i<$size;$i++)
{
if ($this->getY()+$this->FontSize>=($this->h - $this->bMargin))
{
$obj->INDEX_NewPage($page);
$this->SetFontSize($size_bookmark);
}
//Offset
$level=$this->outlines[$i]['l'];
if($level>0) $this->Cell($level*8);
//Caption
$str=$this->outlines[$i]['t'];
$strsize=$this->GetStringWidth($str);
$avail_size=$this->w-$this->lMargin-$this->rMargin-$PageCellSize-($level*8)-4;
while ($strsize>=$avail_size)
{
$str=substr($str,0,-1);
$strsize=$this->GetStringWidth($str);
}
if ($display_page)
{
$this->Cell($strsize+2,$this->FontSize+2,$str);
//Filling dots
$w=$this->w-$this->lMargin-$this->rMargin-$PageCellSize-($level*8)-($strsize+2);
$nb=$w/$this->GetStringWidth('.');
$dots=str_repeat('.',$nb);
$this->Cell($w,$this->FontSize+2,$dots,0,0,'R');
//Page number
$this->Cell($PageCellSize,$this->FontSize+2,'p. '.$this->outlines[$i]['p'],0,1,'R');
}
else
{
$this->Cell($strsize+2,$this->FontSize+2,$str, 0, 1);
}
}
}
}
}

View File

@ -0,0 +1,239 @@
<?php
/**
* Logiciel : HTML2PDF - classe FPDF_Formulaire
*
* permet la gestion de champs de formulaire dans un PDF
* Inspiré des sources de http://fpdf.org/fr/script/script36.php et http://fpdf.org/fr/script/script40.php
*
* @author Laurent MINGUET <webmaster@html2pdf.fr>
*/
if (!defined('__CLASS_FPDF_FORMULAIRE__'))
{
define('__CLASS_FPDF_FORMULAIRE__', true);
require_once(dirname(__FILE__).'/01_fpdf_bookmark.class.php');
class FPDF_Formulaire extends FPDF_BookMark
{
var $javascript = ''; //javascript code
var $n_js; //numéro de l'objet javascript
var $n_cata; //numéro de l'objet catalogue
var $ur; //
function FPDF_Formulaire($orientation='P',$unit='mm',$format='A4')
{
$this->FPDF_BookMark($orientation,$unit,$format);
$this->PDFVersion='1.6';
$this->ur = false;
}
function _putuserrights()
{
if (!$this->ur) return;
$this->_out('/Perms<<');
$this->_out('/UR3<<');
$this->_out('/Reference[<<');
$this->_out('/Type /SigRef');
$this->_out('/TransformMethod /UR3');
$this->_out('/TransformParams<<');
$this->_out('/Type /TransformParams');
$this->_out('/Annots[ /Create /Delete /Modify /Copy /Import /Export ]');
$this->_out('/Document [ /FullSave ]');
$this->_out('/Form[ /Add /FillIn /Delete /SubmitStandalone ]');
$this->_out('/Signature[ /Modify ]');
$this->_out('/V /2.2');
$this->_out('>>');
$this->_out('>>]');
$this->_out('>>');
$this->_out('>>');
}
function _putresources()
{
parent::_putresources();
$this->_putjavascript();
}
function _putcatalog()
{
$this->n_cata = $this->n;
parent::_putcatalog();
if (!empty($this->javascript)) $this->_out('/Names <</JavaScript '.($this->n_js).' 0 R>>');
$this->_putuserrights();
}
/*
* Create a javascript PDF string.
* @access protected
* @author Johannes Güntert, Nicola Asuni
*/
function _putjavascript()
{
if (empty($this->javascript)) return;
// the following two lines are used to avoid form fields duplication after saving
if ($this->ur)
{
$js1 = "if(!this.getField('pdfoldsaved')) this.addField('pdfoldsaved','text',0, [0, 1, 0, 1]);";
$js2 = "getField('pdfoldsaved').value = 'saved';";
}
else
{
$js1 = '';
$js2 = '';
}
$this->_newobj();
$this->n_js = $this->n;
$this->_out('<<');
$this->_out('/Names [(EmbeddedJS) '.($this->n + 1).' 0 R ]');
$this->_out('>>');
$this->_out('endobj');
$this->_newobj();
$this->_out('<<');
$this->_out('/S /JavaScript');
$this->_out('/JS '.$this->_textstring($js1."\n".$this->javascript."\n".$js2));
$this->_out('>>');
$this->_out('endobj');
}
/*
* Convert color to javascript color.
* @param string $color color name or #RRGGBB
* @access protected
* @author Denis Van Nuffelen, Nicola Asuni
*/
function _JScolor($color)
{
static $aColors = array('transparent', 'black', 'white', 'red', 'green', 'blue', 'cyan', 'magenta', 'yellow', 'dkGray', 'gray', 'ltGray');
if (substr($color,0,1) == '#')
{
return sprintf("['RGB',%.3F,%.3F,%.3F]", hexdec(substr($color,1,2))/255, hexdec(substr($color,3,2))/255, hexdec(substr($color,5,2))/255);
}
if (!in_array($color,$aColors))
{
$this->Error('Invalid color: '.$color);
}
return 'color.'.$color;
}
/*
* Adds a javascript form field.
* @param string $type field type
* @param string $name field name
* @param int $x horizontal position
* @param int $y vertical position
* @param int $w width
* @param int $h height
* @param array $prop array of properties. Possible values are (http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf): <ul><li>rect: Position and size of field on page.</li><li>borderStyle: Rectangle border appearance.</li><li>strokeColor: Color of bounding rectangle.</li><li>lineWidth: Width of the edge of the surrounding rectangle.</li><li>rotation: Rotation of field in 90-degree increments.</li><li>fillColor: Background color of field (gray, transparent, RGB, or CMYK).</li><li>userName: Short description of field that appears on mouse-over.</li><li>readonly: Whether the user may change the field contents.</li><li>doNotScroll: Whether text fields may scroll.</li><li>display: Whether visible or hidden on screen or in print.</li><li>textFont: Text font.</li><li>textColor: Text color.</li><li>textSize: Text size.</li><li>richText: Rich text.</li><li>richValue: Text.</li><li>comb: Text comb format.</li><li>multiline: Text multiline.</li><li>charLimit: Text limit to number of characters.</li><li>fileSelect: Text file selection format.</li><li>password: Text password format.</li><li>alignment: Text layout in text fields.</li><li>buttonAlignX: X alignment of icon on button face.</li><li>buttonAlignY: Y alignment of icon on button face.</li><li>buttonFitBounds: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleHow: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleWhen: Relative scaling of an icon to fit inside a button face.</li><li>highlight: Appearance of a button when pushed.</li><li>style: Glyph style for checkbox and radio buttons.</li><li>numItems: Number of items in a combo box or list box.</li><li>editable: Whether the user can type in a combo box.</li><li>multipleSelection: Whether multiple list box items may be selected.</li></ul>
* @access protected
* @author Denis Van Nuffelen, Nicola Asuni
*/
function _addfield($type, $name, $x, $y, $w, $h, $prop, $js_after = '')
{
if (!isset($prop['textSize'])) $prop['textSize'] = $this->FontSizePt;
if (!isset($prop['strokeColor'])) $prop['strokeColor'] = 'ltGray';
if (isset($prop['value'])) $prop['value'] = str_replace('"', '', $prop['value']);
$name_field = preg_replace('/[^a-zA-Z0-9_]/isU', '_', $name);
$this->SetFillColor(240);
if ($w>0 && $h>0)
{
$d = 1/$this->k;
$r = 0.1;
$this->Rect($x+$d*0.5+$r, $y-$d*0.5+$r, $w-$d-2*$r, $h-$d-2*$r, 'F');
}
// javascript inclus
$this->ur = true;
// the followind avoid fields duplication after saving the document
$this->javascript .= "if(this.getField('pdfoldsaved') && this.getField('pdfoldsaved').value != 'saved') {";
$this->javascript .= sprintf("f".$name_field."=this.addField('%s','%s',%d,[%.2F,%.2F,%.2F,%.2F]);", $name, $type, $this->PageNo()-1, $x*$this->k, ($this->h-$y)*$this->k+1, ($x+$w)*$this->k, ($this->h-$y-$h)*$this->k+1)."\n";
$this->javascript .= 'f'.$name_field.'.textSize='.$this->FontSizePt.";\n";
while (list($key, $val) = each($prop))
{
if (strcmp(substr($key, -5), 'Color') == 0)
$val = $this->_JScolor($val);
else
$val = '"'.$val.'"';
$this->javascript .= 'f'.$name_field.'.'.$key.'='.$val.";\n";
}
$this->javascript .= '}';
$this->javascript.= "\n".$js_after;
}
function IncludeJS($script)
{
$this->javascript .= $script;
}
function form_InputHidden($name, $value)
{
$name_field = preg_replace('/[^a-zA-Z0-9_]/isU', '_', $name);
$prop = array('value' => $value);
$js_after = '';
$this->_addfield('checkbox', $name, 0, 0, 0.1, 0.1, $prop, $js_after);
}
function form_InputCheckBox($name, $x, $y, $w, $checked)
{
$name_field = preg_replace('/[^a-zA-Z0-9_]/isU', '_', $name);
$prop = array();
$prop['value'] = ($checked ? 'Yes' : 'Off');
$js_after = '';
$this->_addfield('checkbox', $name, $x, $y, $w, $w, $prop, $js_after);
}
function form_InputRadio($name, $x, $y, $w)
{
$name_field = preg_replace('/[^a-zA-Z0-9_]/isU', '_', $name);
$prop = array();
$js_after = '';
$this->_addfield('radiobutton', $name, $x, $y, $w, $w, $prop, $js_after);
}
function form_InputText($name, $x, $y, $w, $h, $prop)
{
$name_field = preg_replace('/[^a-zA-Z0-9_]/isU', '_', $name);
$js_after = '';
$this->_addfield('text', $name, $x, $y, $w, $h, $prop, $js_after);
}
function form_InputButton($name, $x, $y, $w, $h, $caption, $action, $prop)
{
$name_field = preg_replace('/[^a-zA-Z0-9_]/isU', '_', $name);
if (!isset($prop['borderStyle'])) $prop['borderStyle'] = 'beveled';
if (!isset($prop['fillColor'])) $prop['fillColor'] = 'ltGray';
if (!isset($prop['strokeColor'])) $prop['strokeColor'] = 'black';
$js_after = 'f'.$name_field.".buttonSetCaption('".addslashes($caption)."');\n";
$js_after.= 'f'.$name_field.".setAction('MouseUp','".addslashes($action)."');\n";
$js_after.= 'f'.$name_field.".highlight='push';\n";
$js_after.= 'f'.$name_field.".print=false;\n";
$this->_addfield('button', $name, $x, $y, $w, $h, $prop, $js_after);
}
function form_Select($name, $x, $y, $w, $h, $values, $multiligne, $prop)
{
$name_field = preg_replace('/[^a-zA-Z0-9_]/isU', '_', $name);
$type = ($multiligne ? 'listbox' : 'combobox');
$s = ''; foreach ($values as $value) { $s .= ($s ? ',' : '')."'".addslashes($value)."'"; }
$js_after = 'f'.$name_field.'.setItems(['.$s."]);\n";
$this->_addfield($type, $name, $x, $y, $w, $h, $prop, $js_after);
}
}
}

View File

@ -0,0 +1,327 @@
<?php
/*************************************************************************
* http://staff.dasdeck.de/valentin/fpdf/fpdf_alpha/
*
* @author Valentin Schmidt
*
* This script allows to use images (PNGs or JPGs) with alpha-channels.
* The alpha-channel can be either supplied as separate 8-bit PNG ("mask"),
* or, for PNGs, also an internal alpha-channel can be used.
* For the latter, the GD 2.x extension is required.
************************************************************************/
if (!defined('__CLASS_FPDF_ALPHA__'))
{
define('__CLASS_FPDF_ALPHA__', true);
require_once(dirname(__FILE__).'/02_fpdf_formulaire.class.php');
class FPDF_Alpha extends FPDF_Formulaire
{
var $tmpFiles = array();
function FPDF_Alpha($orientation='P',$unit='mm',$format='A4')
{
$this->FPDF_Formulaire($orientation,$unit,$format);
}
/* Public methods */
function Image($file,$x,$y,$w=0,$h=0,$type='',$link='', $isMask=false, $maskImg=0)
{
//Put an image on the page
if(!isset($this->images[$file]))
{
//First use of image, get info
if($type=='')
{
/* MODIFICATION HTML2PDF pour le support des images générées */
$type = explode('?', $file);
$type = pathinfo($type[0]);
if (!isset($type['extension']) || !$type['extension'])
$type['extension'] = 'php';
// $this->Error('Image file has no extension and no type was specified: '.$file);
$type = $type['extension'];
/* FIN MODIFICATION */
/*
$pos=strrpos($file,'.');
if(!$pos)
$this->Error('Image file has no extension and no type was specified: '.$file);
$type=substr($file,$pos+1);
*/
}
$type=strtolower($type);
/* MODIFICATION HTML2PDF pour le support des images générées */
if ($type=='php' || $type=='cgi')
{
// identification des infos
$infos=@GetImageSize($file);
if (!$infos) $this->Error('Unsupported image : '.$file);
// identification du type
$type = explode('/', $infos['mime']);
if ($type[0]!='image') $this->Error('Unsupported image : '.$file);
$type = $type[1];
}
/* FIN MODIFICATION */
// $mqr=get_magic_quotes_runtime();
// set_magic_quotes_runtime(0);
if($type=='jpg' || $type=='jpeg')
$info=$this->_parsejpg($file);
elseif($type=='png')
{
$info=$this->_parsepng($file);
if ($info=='alpha')
return $this->ImagePngWithAlpha($file,$x,$y,$w,$h,$link);
}
else
{
//Allow for additional formats
$mtd='_parse'.$type;
if(!method_exists($this,$mtd))
$this->Error('Unsupported image type: '.$type);
$info=$this->$mtd($file);
}
// set_magic_quotes_runtime($mqr);
if ($isMask)
{
$info['cs']="DeviceGray"; // try to force grayscale (instead of indexed)
}
$info['i']=count($this->images)+1;
if ($maskImg>0) $info['masked'] = $maskImg;###
$this->images[$file]=$info;
}
else
$info=$this->images[$file];
//Automatic width and height calculation if needed
if($w==0 && $h==0)
{
//Put image at 72 dpi
$w=$info['w']/$this->k;
$h=$info['h']/$this->k;
}
if($w==0)
$w=$h*$info['w']/$info['h'];
if($h==0)
$h=$w*$info['h']/$info['w'];
if ($isMask) // embed hidden, ouside the canvas
{
$x = ($this->CurOrientation=='P'?$this->CurPageFormat[0]*2:$this->CurPageFormat[1]*2) + 10;
}
else // modification by spipu :) pas besoin de tracer l'image si c'est pour faire un mask !!!!
{
$this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%d Do Q',$w*$this->k,$h*$this->k,$x*$this->k,($this->h-($y+$h))*$this->k,$info['i']));
if($link) $this->Link($x,$y,$w,$h,$link);
}
return $info['i'];
}
// needs GD 2.x extension
// pixel-wise operation, not very fast
function ImagePngWithAlpha($file,$x,$y,$w=0,$h=0,$link='')
{
$tmp_alpha = tempnam(null, 'mska');
$this->tmpFiles[] = $tmp_alpha;
$tmp_plain = tempnam(null, 'mskp');
$this->tmpFiles[] = $tmp_plain;
list($wpx, $hpx) = @getimagesize($file);
$img = imagecreatefrompng($file);
$alpha_img = imagecreate( $wpx, $hpx );
// generate gray scale pallete
for($c=0;$c<256;$c++) ImageColorAllocate($alpha_img, $c, $c, $c);
// extract alpha channel
$xpx=0;
while ($xpx<$wpx)
{
$ypx = 0;
while ($ypx<$hpx)
{
$color_index = imagecolorat($img, $xpx, $ypx);
$col = imagecolorsforindex($img, $color_index);
imagesetpixel($alpha_img, $xpx, $ypx, $this->_gamma( (127-$col['alpha'])*255/127) );
++$ypx;
}
++$xpx;
}
imagepng($alpha_img, $tmp_alpha);
imagedestroy($alpha_img);
// extract image without alpha channel
$plain_img = imagecreatetruecolor ( $wpx, $hpx );
imagecopy ($plain_img, $img, 0, 0, 0, 0, $wpx, $hpx );
imagepng($plain_img, $tmp_plain);
imagedestroy($plain_img);
//first embed mask image (w, h, x, will be ignored)
$maskImg = $this->Image($tmp_alpha, 0,0,0,0, 'PNG', '', true);
//embed image, masked with previously embedded mask
$this->Image($tmp_plain,$x,$y,$w,$h,'PNG',$link, false, $maskImg);
}
function Close()
{
parent::Close();
// clean up tmp files
foreach($this->tmpFiles as $tmp) @unlink($tmp);
}
/* Private methods */
function _putimages()
{
$filter=($this->compress) ? '/Filter /FlateDecode ' : '';
reset($this->images);
while(list($file,$info)=each($this->images))
{
$this->_newobj();
$this->images[$file]['n']=$this->n;
$this->_out('<</Type /XObject');
$this->_out('/Subtype /Image');
$this->_out('/Width '.$info['w']);
$this->_out('/Height '.$info['h']);
if (isset($info["masked"])) $this->_out('/SMask '.($this->n-1).' 0 R'); ###
if($info['cs']=='Indexed')
$this->_out('/ColorSpace [/Indexed /DeviceRGB '.(strlen($info['pal'])/3-1).' '.($this->n+1).' 0 R]');
else
{
$this->_out('/ColorSpace /'.$info['cs']);
if($info['cs']=='DeviceCMYK')
$this->_out('/Decode [1 0 1 0 1 0 1 0]');
}
$this->_out('/BitsPerComponent '.$info['bpc']);
if(isset($info['f']))
$this->_out('/Filter /'.$info['f']);
if(isset($info['parms']))
$this->_out($info['parms']);
if(isset($info['trns']) && is_array($info['trns']))
{
$trns='';
for($i=0;$i<count($info['trns']);$i++)
$trns.=$info['trns'][$i].' '.$info['trns'][$i].' ';
$this->_out('/Mask ['.$trns.']');
}
$this->_out('/Length '.strlen($info['data']).'>>');
$this->_putstream($info['data']);
unset($this->images[$file]['data']);
$this->_out('endobj');
//Palette
if($info['cs']=='Indexed')
{
$this->_newobj();
$pal=($this->compress) ? gzcompress($info['pal']) : $info['pal'];
$this->_out('<<'.$filter.'/Length '.strlen($pal).'>>');
$this->_putstream($pal);
$this->_out('endobj');
}
}
}
// GD seems to use a different gamma, this method is used to correct it again
function _gamma($v)
{
return pow ($v/255, 2.2) * 255;
}
// this method overwriing the original version is only needed to make the Image method support PNGs with alpha channels.
// if you only use the ImagePngWithAlpha method for such PNGs, you can remove it from this script.
function _parsepng($file)
{
//Extract info from a PNG file
$f=fopen($file,'rb');
if(!$f)
$this->Error('Can\'t open image file: '.$file);
//Check signature
if(fread($f,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10))
$this->Error('Not a PNG file: '.$file);
//Read header chunk
fread($f,4);
if(fread($f,4)!='IHDR')
$this->Error('Incorrect PNG file: '.$file);
$w=$this->_readint($f);
$h=$this->_readint($f);
$bpc=ord(fread($f,1));
if($bpc>8)
$this->Error('16-bit depth not supported: '.$file);
$ct=ord(fread($f,1));
if($ct==0)
$colspace='DeviceGray';
elseif($ct==2)
$colspace='DeviceRGB';
elseif($ct==3)
$colspace='Indexed';
else
{
fclose($f); // the only changes are
return 'alpha'; // made in those 2 lines
}
if(ord(fread($f,1))!=0)
$this->Error('Unknown compression method: '.$file);
if(ord(fread($f,1))!=0)
$this->Error('Unknown filter method: '.$file);
if(ord(fread($f,1))!=0)
$this->Error('Interlacing not supported: '.$file);
fread($f,4);
$parms='/DecodeParms <</Predictor 15 /Colors '.($ct==2 ? 3 : 1).' /BitsPerComponent '.$bpc.' /Columns '.$w.'>>';
//Scan chunks looking for palette, transparency and image data
$pal='';
$trns='';
$data='';
do
{
$n=$this->_readint($f);
$type=fread($f,4);
if($type=='PLTE')
{
//Read palette
$pal=fread($f,$n);
fread($f,4);
}
elseif($type=='tRNS')
{
//Read transparency info
$t=fread($f,$n);
if($ct==0)
$trns=array(ord(substr($t,1,1)));
elseif($ct==2)
$trns=array(ord(substr($t,1,1)),ord(substr($t,3,1)),ord(substr($t,5,1)));
else
{
$pos=strpos($t,chr(0));
if($pos!==false)
$trns=array($pos);
}
fread($f,4);
}
elseif($type=='IDAT')
{
//Read image data block
$data.=fread($f,$n);
fread($f,4);
}
elseif($type=='IEND')
break;
else
fread($f,$n+4);
}
while($n);
if($colspace=='Indexed' && empty($pal))
$this->Error('Missing palette in '.$file);
fclose($f);
return array('w'=>$w,'h'=>$h,'cs'=>$colspace,'bpc'=>$bpc,'f'=>'FlateDecode','parms'=>$parms,'pal'=>$pal,'trns'=>$trns,'data'=>$data);
}
}
}

View File

@ -0,0 +1,228 @@
<?php
/*************************************************************************
* http://www.fpdf.org/fr/script/script37.php
*
* @author Klemen Vodopivec
*
* Ce script permet de protéger le PDF, c'est-à-dire empêcher l'utilisateur de copier son contenu, de l'imprimer ou de le modifier.
*
* SetProtection([array permissions [, string user_pass [, string owner_pass]]])
*
* permissions : l'ensemble des permissions. Vide par défaut (seule la lecture est autorisée).
* user_pass : mot de passe utilisateur. Vide par défaut.
* owner_pass : mot de passe propriétaire. Par défaut, une valeur aléatoire est choisie.
*
* Le tableau des permissions est composé de valeurs prises parmi les suivantes :
* * copy : copie du texte et des images dans le presse-papier
* * print : impression du document
* * modify : modification (autre ques les annotations et les formulaires)
* * annot-forms : ajout d'annotations ou de formulaires
*
* Remarque : la protection contre la modification concerne les personnes possédant la version complète d'Acrobat.
*
* Si vous ne spécifiez pas de mot de passe, le document s'ouvrira normalement. Si vous indiquez un mot de passe utilisateur,
* le lecteur de PDF le demandera avant d'afficher le document. Le mot de passe propriétaire, s'il est différent de celui utilisateur,
* permet d'obtenir l'accès complet.
*
* Note : protéger un document nécessite de le crypter, ce qui augmente le temps de traitement de manière importante.
* Cela peut dans certains cas entraîner un time-out au niveau de PHP, en particulier si le document contient des
* images ou des polices.
************************************************************************/
if (!defined('__CLASS_FPDF_PROTECTION__'))
{
define('__CLASS_FPDF_PROTECTION__', true);
require_once(dirname(__FILE__).'/03_fpdf_alpha.class.php');
class FPDF_Protection extends FPDF_Alpha
{
var $encrypted; //whether document is protected
var $Uvalue; //U entry in pdf document
var $Ovalue; //O entry in pdf document
var $Pvalue; //P entry in pdf document
var $enc_obj_id; //encryption object id
var $last_rc4_key; //last RC4 key encrypted (cached for optimisation)
var $last_rc4_key_c; //last RC4 computed key
function FPDF_Protection($orientation='P',$unit='mm',$format='A4')
{
$this->FPDF_Formulaire($orientation,$unit,$format);
$this->encrypted=false;
$this->last_rc4_key='';
$this->padding="\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08".
"\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A";
}
/**
* Function to set permissions as well as user and owner passwords
*
* - permissions is an array with values taken from the following list:
* copy, print, modify, annot-forms
* If a value is present it means that the permission is granted
* - If a user password is set, user will be prompted before document is opened
* - If an owner password is set, document can be opened in privilege mode with no
* restriction if that password is entered
*/
function SetProtection($permissions=array(),$user_pass='',$owner_pass=null)
{
$options = array('print' => 4, 'modify' => 8, 'copy' => 16, 'annot-forms' => 32 );
$protection = 192;
foreach($permissions as $permission){
if (!isset($options[$permission]))
$this->Error('Incorrect permission: '.$permission);
$protection += $options[$permission];
}
if ($owner_pass === null)
$owner_pass = uniqid(rand());
$this->encrypted = true;
$this->_generateencryptionkey($user_pass, $owner_pass, $protection);
}
/****************************************************************************
* *
* Private methods *
* *
****************************************************************************/
function _putstream($s)
{
if ($this->encrypted) {
$s = $this->_RC4($this->_objectkey($this->n), $s);
}
parent::_putstream($s);
}
function _textstring($s)
{
if ($this->encrypted) {
$s = $this->_RC4($this->_objectkey($this->n), $s);
}
return parent::_textstring($s);
}
/**
* Compute key depending on object number where the encrypted data is stored
*/
function _objectkey($n)
{
return substr($this->_md5_16($this->encryption_key.pack('VXxx',$n)),0,10);
}
function _putresources()
{
parent::_putresources();
if ($this->encrypted) {
$this->_newobj();
$this->enc_obj_id = $this->n;
$this->_out('<<');
$this->_putencryption();
$this->_out('>>');
$this->_out('endobj');
}
}
function _putencryption()
{
$this->_out('/Filter /Standard');
$this->_out('/V 1');
$this->_out('/R 2');
$this->_out('/O ('.$this->_escape($this->Ovalue).')');
$this->_out('/U ('.$this->_escape($this->Uvalue).')');
$this->_out('/P '.$this->Pvalue);
}
function _puttrailer()
{
parent::_puttrailer();
if ($this->encrypted) {
$this->_out('/Encrypt '.$this->enc_obj_id.' 0 R');
$this->_out('/ID [()()]');
}
}
/**
* RC4 is the standard encryption algorithm used in PDF format
*/
function _RC4($key, $text)
{
if ($this->last_rc4_key != $key) {
$k = str_repeat($key, 256/strlen($key)+1);
$rc4 = range(0,255);
$j = 0;
for ($i=0; $i<256; $i++){
$t = $rc4[$i];
$j = ($j + $t + ord($k{$i})) % 256;
$rc4[$i] = $rc4[$j];
$rc4[$j] = $t;
}
$this->last_rc4_key = $key;
$this->last_rc4_key_c = $rc4;
} else {
$rc4 = $this->last_rc4_key_c;
}
$len = strlen($text);
$a = 0;
$b = 0;
$out = '';
for ($i=0; $i<$len; $i++){
$a = ($a+1)%256;
$t= $rc4[$a];
$b = ($b+$t)%256;
$rc4[$a] = $rc4[$b];
$rc4[$b] = $t;
$k = $rc4[($rc4[$a]+$rc4[$b])%256];
$out.=chr(ord($text{$i}) ^ $k);
}
return $out;
}
/**
* Get MD5 as binary string
*/
function _md5_16($string)
{
return pack('H*',md5($string));
}
/**
* Compute O value
*/
function _Ovalue($user_pass, $owner_pass)
{
$tmp = $this->_md5_16($owner_pass);
$owner_RC4_key = substr($tmp,0,5);
return $this->_RC4($owner_RC4_key, $user_pass);
}
/**
* Compute U value
*/
function _Uvalue()
{
return $this->_RC4($this->encryption_key, $this->padding);
}
/**
* Compute encryption key
*/
function _generateencryptionkey($user_pass, $owner_pass, $protection)
{
// Pad passwords
$user_pass = substr($user_pass.$this->padding,0,32);
$owner_pass = substr($owner_pass.$this->padding,0,32);
// Compute O value
$this->Ovalue = $this->_Ovalue($user_pass,$owner_pass);
// Compute encyption key
$tmp = $this->_md5_16($user_pass.$this->Ovalue.chr($protection)."\xFF\xFF\xFF");
$this->encryption_key = substr($tmp,0,5);
// Compute U value
$this->Uvalue = $this->_Uvalue();
// Compute P value
$this->Pvalue = -(($protection^255)+1);
}
}
}

View File

@ -0,0 +1,210 @@
<?php
//============================================================+
// File name : htmlcolors.php
// Begin : 2002-04-09
// Last Update : 2010-04-20
// Version : 1.0.004
// License : GNU LGPL (http://www.gnu.org/copyleft/lesser.html)
// ----------------------------------------------------------------------------
// Copyright (C) 2002-2009 Nicola Asuni - Tecnick.com S.r.l.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 2.1 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// See LICENSE.TXT file for more information.
// ----------------------------------------------------------------------------
//
// Description : Array of WEB safe colors
//
// Author: Nicola Asuni
//
// (c) Copyright:
// Nicola Asuni
// Tecnick.com S.r.l.
// Via della Pace, 11
// 09044 Quartucciu (CA)
// ITALY
// www.tecnick.com
// info@tecnick.com
//============================================================+
/**
* Array of WEB safe colors.
* @author Nicola Asuni
* @copyright 2004-2009 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
* @package com.tecnick.tcpdf
* @link http://www.tcpdf.org
* @license http://www.gnu.org/copyleft/lesser.html LGPL
* @since 2.9.000 (2008-03-26)
*/
/**
* Array of WEB safe colors
*/
global $webcolor;
$webcolor = array (
'aliceblue' => 'f0f8ff',
'antiquewhite' => 'faebd7',
'aqua' => '00ffff',
'aquamarine' => '7fffd4',
'azure' => 'f0ffff',
'beige' => 'f5f5dc',
'bisque' => 'ffe4c4',
'black' => '000000',
'blanchedalmond' => 'ffebcd',
'blue' => '0000ff',
'blueviolet' => '8a2be2',
'brown' => 'a52a2a',
'burlywood' => 'deb887',
'cadetblue' => '5f9ea0',
'chartreuse' => '7fff00',
'chocolate' => 'd2691e',
'coral' => 'ff7f50',
'cornflowerblue' => '6495ed',
'cornsilk' => 'fff8dc',
'crimson' => 'dc143c',
'cyan' => '00ffff',
'darkblue' => '00008b',
'darkcyan' => '008b8b',
'darkgoldenrod' => 'b8860b',
'dkgray' => 'a9a9a9',
'darkgray' => 'a9a9a9',
'darkgrey' => 'a9a9a9',
'darkgreen' => '006400',
'darkkhaki' => 'bdb76b',
'darkmagenta' => '8b008b',
'darkolivegreen' => '556b2f',
'darkorange' => 'ff8c00',
'darkorchid' => '9932cc',
'darkred' => '8b0000',
'darksalmon' => 'e9967a',
'darkseagreen' => '8fbc8f',
'darkslateblue' => '483d8b',
'darkslategray' => '2f4f4f',
'darkslategrey' => '2f4f4f',
'darkturquoise' => '00ced1',
'darkviolet' => '9400d3',
'deeppink' => 'ff1493',
'deepskyblue' => '00bfff',
'dimgray' => '696969',
'dimgrey' => '696969',
'dodgerblue' => '1e90ff',
'firebrick' => 'b22222',
'floralwhite' => 'fffaf0',
'forestgreen' => '228b22',
'fuchsia' => 'ff00ff',
'gainsboro' => 'dcdcdc',
'ghostwhite' => 'f8f8ff',
'gold' => 'ffd700',
'goldenrod' => 'daa520',
'gray' => '808080',
'grey' => '808080',
'green' => '008000',
'greenyellow' => 'adff2f',
'honeydew' => 'f0fff0',
'hotpink' => 'ff69b4',
'indianred' => 'cd5c5c',
'indigo' => '4b0082',
'ivory' => 'fffff0',
'khaki' => 'f0e68c',
'lavender' => 'e6e6fa',
'lavenderblush' => 'fff0f5',
'lawngreen' => '7cfc00',
'lemonchiffon' => 'fffacd',
'lightblue' => 'add8e6',
'lightcoral' => 'f08080',
'lightcyan' => 'e0ffff',
'lightgoldenrodyellow' => 'fafad2',
'ltgray' => 'd3d3d3',
'lightgray' => 'd3d3d3',
'lightgrey' => 'd3d3d3',
'lightgreen' => '90ee90',
'lightpink' => 'ffb6c1',
'lightsalmon' => 'ffa07a',
'lightseagreen' => '20b2aa',
'lightskyblue' => '87cefa',
'lightslategray' => '778899',
'lightslategrey' => '778899',
'lightsteelblue' => 'b0c4de',
'lightyellow' => 'ffffe0',
'lime' => '00ff00',
'limegreen' => '32cd32',
'linen' => 'faf0e6',
'magenta' => 'ff00ff',
'maroon' => '800000',
'mediumaquamarine' => '66cdaa',
'mediumblue' => '0000cd',
'mediumorchid' => 'ba55d3',
'mediumpurple' => '9370d8',
'mediumseagreen' => '3cb371',
'mediumslateblue' => '7b68ee',
'mediumspringgreen' => '00fa9a',
'mediumturquoise' => '48d1cc',
'mediumvioletred' => 'c71585',
'midnightblue' => '191970',
'mintcream' => 'f5fffa',
'mistyrose' => 'ffe4e1',
'moccasin' => 'ffe4b5',
'navajowhite' => 'ffdead',
'navy' => '000080',
'oldlace' => 'fdf5e6',
'olive' => '808000',
'olivedrab' => '6b8e23',
'orange' => 'ffa500',
'orangered' => 'ff4500',
'orchid' => 'da70d6',
'palegoldenrod' => 'eee8aa',
'palegreen' => '98fb98',
'paleturquoise' => 'afeeee',
'palevioletred' => 'd87093',
'papayawhip' => 'ffefd5',
'peachpuff' => 'ffdab9',
'peru' => 'cd853f',
'pink' => 'ffc0cb',
'plum' => 'dda0dd',
'powderblue' => 'b0e0e6',
'purple' => '800080',
'red' => 'ff0000',
'rosybrown' => 'bc8f8f',
'royalblue' => '4169e1',
'saddlebrown' => '8b4513',
'salmon' => 'fa8072',
'sandybrown' => 'f4a460',
'seagreen' => '2e8b57',
'seashell' => 'fff5ee',
'sienna' => 'a0522d',
'silver' => 'c0c0c0',
'skyblue' => '87ceeb',
'slateblue' => '6a5acd',
'slategray' => '708090',
'slategrey' => '708090',
'snow' => 'fffafa',
'springgreen' => '00ff7f',
'steelblue' => '4682b4',
'tan' => 'd2b48c',
'teal' => '008080',
'thistle' => 'd8bfd8',
'tomato' => 'ff6347',
'turquoise' => '40e0d0',
'violet' => 'ee82ee',
'wheat' => 'f5deb3',
'white' => 'ffffff',
'whitesmoke' => 'f5f5f5',
'yellow' => 'ffff00',
'yellowgreen' => '9acd32'
);
//============================================================+
// END OF FILE
//============================================================+
?>

View File

@ -0,0 +1,950 @@
<?php
/**
* Logiciel : HTML2PDF - classe MyPDF
*
* Convertisseur HTML => PDF
* Distribué sous la licence LGPL.
*
* @author Laurent MINGUET <webmaster@html2pdf.fr>
* @version 3.31
*/
if (!defined('__CLASS_MYPDF__'))
{
define('__CLASS_MYPDF__', true);
require_once(dirname(__FILE__).'/htmlcolors.php'); // couleurs HTML, contient les memes que le fichier de TCPDF
require_once(dirname(__FILE__).'/99_fpdf_protection.class.php'); // classe fpdf_protection
class MyPDF extends FPDF_Protection
{
var $footer_param = array();
var $transf = array();
var $underline = false;
var $linethrough = false;
var $overline = false;
function MyPDF($sens = 'P', $unit = 'mm', $format = 'A4')
{
$this->underline = false;
$this->overline = false;
$this->linethrough = false;
$this->FPDF_Protection($sens, $unit, $format);
$this->AliasNbPages();
$this->SetMyFooter();
}
function SetMyFooter($page = null, $date = null, $heure = null, $form = null)
{
$page = ($page ? true : false);
$date = ($date ? true : false);
$heure = ($heure ? true : false);
$form = ($form ? true : false);
$this->footer_param = array('page' => $page, 'date' => $date, 'heure' => $heure, 'form' => $form);
}
function Footer()
{
$txt = '';
if ($this->footer_param['form']) $txt = (HTML2PDF::textGET('pdf05'));
if ($this->footer_param['date'] && $this->footer_param['heure']) $txt.= ($txt ? ' - ' : '').(HTML2PDF::textGET('pdf03'));
if ($this->footer_param['date'] && !$this->footer_param['heure']) $txt.= ($txt ? ' - ' : '').(HTML2PDF::textGET('pdf01'));
if (!$this->footer_param['date'] && $this->footer_param['heure']) $txt.= ($txt ? ' - ' : '').(HTML2PDF::textGET('pdf02'));
if ($this->footer_param['page']) $txt.= ($txt ? ' - ' : '').(HTML2PDF::textGET('pdf04'));
if (strlen($txt)>0)
{
$txt = str_replace('[[date_d]]', date('d'), $txt);
$txt = str_replace('[[date_m]]', date('m'), $txt);
$txt = str_replace('[[date_y]]', date('Y'), $txt);
$txt = str_replace('[[date_h]]', date('H'), $txt);
$txt = str_replace('[[date_i]]', date('i'), $txt);
$txt = str_replace('[[date_s]]', date('s'), $txt);
$txt = str_replace('[[current]]', $this->PageNo(), $txt);
$txt = str_replace('[[nb]]', '{nb}', $txt);
parent::SetY(-11);
$this->setOverline(false);
$this->setLinethrough(false);
$this->SetFont('helvetica', 'I', 8);
$this->Cell(0, 10, $txt, 0, 0, 'R');
}
}
// Draw a polygon
// Auteur : Andrew Meier
// Licence : Freeware
function Polygon($points, $style='D')
{
if($style=='F') $op='f';
elseif($style=='FD' or $style=='DF') $op='b';
else $op='s';
$h = $this->h;
$k = $this->k;
$points_string = '';
for($i=0; $i<count($points); $i+=2)
{
$points_string .= sprintf('%.2F %.2F', $points[$i]*$k, ($h-$points[$i+1])*$k);
if($i==0) $points_string .= ' m ';
else $points_string .= ' l ';
}
$this->_out($points_string . $op);
}
function setOverline($value = true)
{
$this->overline = $value;
}
function setLinethrough($value = true)
{
$this->linethrough = $value;
}
// redéfinition de la methode Text de FPDF afin de rajouter la gestion des overline et linethrough
function Text($x, $y, $txt)
{
//Output a string
$s=sprintf('BT %.2F %.2F Td (%s) Tj ET',$x*$this->k,($this->h-$y)*$this->k,$this->_escape($txt));
/* MODIFICATION HTML2PDF pour le support de underline, overline, linethrough */
if ($txt!='')
{
if($this->underline) $s.=' '.$this->_dounderline($x,$y,$txt);
if($this->overline) $s.=' '.$this->_dooverline($x,$y,$txt);
if($this->linethrough) $s.=' '.$this->_dolinethrough($x,$y,$txt);
}
/* FIN MODIFICATION */
if($this->ColorFlag)
$s='q '.$this->TextColor.' '.$s.' Q';
$this->_out($s);
}
// redéfinition de la methode Cell de FPDF afin de rajouter la gestion des overline et linethrough
function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='')
{
//Output a cell
$k=$this->k;
if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak())
{
//Automatic page break
$x=$this->x;
$ws=$this->ws;
if($ws>0) $this->setWordSpacing(0);
$this->AddPage($this->CurOrientation,$this->CurPageFormat);
$this->x=$x;
if($ws>0) $this->setWordSpacing($ws);
}
if($w==0)
$w=$this->w-$this->rMargin-$this->x;
$s='';
if($fill || $border==1)
{
if($fill)
$op=($border==1) ? 'B' : 'f';
else
$op='S';
$s=sprintf('%.2F %.2F %.2F %.2F re %s ',$this->x*$k,($this->h-$this->y)*$k,$w*$k,-$h*$k,$op);
}
if(is_string($border))
{
$x=$this->x;
$y=$this->y;
if(strpos($border,'L')!==false)
$s.=sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,$x*$k,($this->h-($y+$h))*$k);
if(strpos($border,'T')!==false)
$s.=sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-$y)*$k);
if(strpos($border,'R')!==false)
$s.=sprintf('%.2F %.2F m %.2F %.2F l S ',($x+$w)*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-($y+$h))*$k);
if(strpos($border,'B')!==false)
$s.=sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-($y+$h))*$k,($x+$w)*$k,($this->h-($y+$h))*$k);
}
if($txt!=='')
{
if($align=='R')
$dx=$w-$this->cMargin-$this->GetStringWidth($txt);
elseif($align=='C')
$dx=($w-$this->GetStringWidth($txt))/2;
else
$dx=$this->cMargin;
if($this->ColorFlag)
$s.='q '.$this->TextColor.' ';
$txt2=str_replace(')','\\)',str_replace('(','\\(',str_replace('\\','\\\\',$txt)));
$s.=sprintf('BT %.2F %.2F Td (%s) Tj ET',($this->x+$dx)*$k,($this->h-($this->y+.5*$h+.3*$this->FontSize))*$k,$txt2);
/* MODIFICATION HTML2PDF pour le support de underline, overline, linethrough */
if($this->underline) $s.=' '.$this->_dounderline($this->x+$dx,$this->y+.5*$h+.3*$this->FontSize,$txt);
if($this->overline) $s.=' '.$this->_dooverline($this->x+$dx,$this->y+.5*$h+.3*$this->FontSize,$txt);
if($this->linethrough) $s.=' '.$this->_dolinethrough($this->x+$dx,$this->y+.5*$h+.3*$this->FontSize,$txt);
/* FIN MODIFICATION */
if($this->ColorFlag)
$s.=' Q';
if($link)
$this->Link($this->x+$dx,$this->y+.5*$h-.5*$this->FontSize,$this->GetStringWidth($txt),$this->FontSize,$link);
}
if($s)
$this->_out($s);
$this->lasth=$h;
if($ln>0)
{
//Go to next line
$this->y+=$h;
if($ln==1)
$this->x=$this->lMargin;
}
else
$this->x+=$w;
}
function _dounderline($x, $y, $txt)
{
//Underline text
$up=$this->CurrentFont['up'];
$ut=$this->CurrentFont['ut'];
$p_x = $x*$this->k;
$p_y = ($this->h-($y-$up/1000*$this->FontSize))*$this->k;
$p_w = ($this->GetStringWidth($txt)+$this->ws*substr_count($txt,' '))*$this->k;
$p_h = -$ut/1000*$this->FontSizePt;
return sprintf('%.2F %.2F %.2F %.2F re f',$p_x,$p_y,$p_w,$p_h);
}
function _dooverline($x, $y, $txt)
{
//Overline text
$up=$this->CurrentFont['up'];
$ut=$this->CurrentFont['ut'];
$p_x = $x*$this->k;
$p_y = ($this->h-($y-(1000+1.5*$up)/1000*$this->FontSize))*$this->k;
$p_w = ($this->GetStringWidth($txt)+$this->ws*substr_count($txt,' '))*$this->k;
$p_h = -$ut/1000*$this->FontSizePt;
return sprintf('%.2F %.2F %.2F %.2F re f',$p_x,$p_y,$p_w,$p_h);
}
function _dolinethrough($x, $y, $txt)
{
//Linethrough text
$up=$this->CurrentFont['up'];
$ut=$this->CurrentFont['ut'];
$p_x = $x*$this->k;
$p_y = ($this->h-($y-(1000+2.5*$up)/2000*$this->FontSize))*$this->k;
$p_w = ($this->GetStringWidth($txt)+$this->ws*substr_count($txt,' '))*$this->k;
$p_h = -$ut/1000*$this->FontSizePt;
return sprintf('%.2F %.2F %.2F %.2F re f',$p_x,$p_y,$p_w,$p_h);
}
function cloneFontFrom(&$pdf)
{
$this->fonts = &$pdf->getFonts();
$this->FontFiles = &$pdf->getFontFiles();
$this->diffs = &$pdf->getDiffs();
}
function &getFonts() { return $this->fonts; }
function &getFontFiles() { return $this->FontFiles; }
function &getDiffs() { return $this->diffs; }
function isLoadedFont($fontkey)
{
if (isset($this->fonts[$fontkey]))
return true;
if (isset($this->CoreFonts[$fontkey]))
return true;
return false;
}
function setWordSpacing($ws=0.)
{
$this->ws = $ws;
$this->_out(sprintf('%.3F Tw',$ws*$this->k));
}
function clippingPathOpen($x = null, $y = null, $w = null, $h = null, $coin_TL=null, $coin_TR=null, $coin_BL=null, $coin_BR=null)
{
$path = '';
if ($x!==null && $y!==null && $w!==null && $h!==null)
{
$x1 = $x*$this->k;
$y1 = ($this->h-$y)*$this->k;
$x2 = ($x+$w)*$this->k;
$y2 = ($this->h-$y)*$this->k;
$x3 = ($x+$w)*$this->k;
$y3 = ($this->h-$y-$h)*$this->k;
$x4 = $x*$this->k;
$y4 = ($this->h-$y-$h)*$this->k;
if ($coin_TL || $coin_TR || $coin_BL || $coin_BR)
{
if ($coin_TL) { $coin_TL[0] = $coin_TL[0]*$this->k; $coin_TL[1] =-$coin_TL[1]*$this->k; }
if ($coin_TR) { $coin_TR[0] = $coin_TR[0]*$this->k; $coin_TR[1] =-$coin_TR[1]*$this->k; }
if ($coin_BL) { $coin_BL[0] = $coin_BL[0]*$this->k; $coin_BL[1] =-$coin_BL[1]*$this->k; }
if ($coin_BR) { $coin_BR[0] = $coin_BR[0]*$this->k; $coin_BR[1] =-$coin_BR[1]*$this->k; }
$MyArc = 4/3 * (sqrt(2) - 1);
if ($coin_TL)
$path.= sprintf('%.2F %.2F m ', $x1+$coin_TL[0], $y1);
else
$path.= sprintf('%.2F %.2F m ', $x1, $y1);
if ($coin_TR)
{
$xt1 = ($x2-$coin_TR[0])+$coin_TR[0]*$MyArc;
$yt1 = ($y2+$coin_TR[1])-$coin_TR[1];
$xt2 = ($x2-$coin_TR[0])+$coin_TR[0];
$yt2 = ($y2+$coin_TR[1])-$coin_TR[1]*$MyArc;
$path.= sprintf('%.2F %.2F l ', $x2-$coin_TR[0], $y2);
$path.= sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c ', $xt1, $yt1, $xt2, $yt2, $x2, $y2+$coin_TR[1]);
}
else
$path.= sprintf('%.2F %.2F l ', $x2, $y2);
if ($coin_BR)
{
$xt1 = ($x3-$coin_BR[0])+$coin_BR[0];
$yt1 = ($y3-$coin_BR[1])+$coin_BR[1]*$MyArc;
$xt2 = ($x3-$coin_BR[0])+$coin_BR[0]*$MyArc;
$yt2 = ($y3-$coin_BR[1])+$coin_BR[1];
$path.= sprintf('%.2F %.2F l ', $x3, $y3-$coin_BR[1]);
$path.= sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c ', $xt1, $yt1, $xt2, $yt2, $x3-$coin_BR[0], $y3);
}
else
$path.= sprintf('%.2F %.2F l ', $x3, $y3);
if ($coin_BL)
{
$xt1 = ($x4+$coin_BL[0])-$coin_BL[0]*$MyArc;
$yt1 = ($y4-$coin_BL[1])+$coin_BL[1];
$xt2 = ($x4+$coin_BL[0])-$coin_BL[0];
$yt2 = ($y4-$coin_BL[1])+$coin_BL[1]*$MyArc;
$path.= sprintf('%.2F %.2F l ', $x4+$coin_BL[0], $y4);
$path.= sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c ', $xt1, $yt1, $xt2, $yt2, $x4, $y4-$coin_BL[1]);
}
else
$path.= sprintf('%.2F %.2F l ', $x4, $y4);
if ($coin_TL)
{
$xt1 = ($x1+$coin_TL[0])-$coin_TL[0];
$yt1 = ($y1+$coin_TL[1])-$coin_TL[1]*$MyArc;
$xt2 = ($x1+$coin_TL[0])-$coin_TL[0]*$MyArc;
$yt2 = ($y1+$coin_TL[1])-$coin_TL[1];
$path.= sprintf('%.2F %.2F l ', $x1, $y1+$coin_TL[1]);
$path.= sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c ', $xt1, $yt1, $xt2, $yt2, $x1+$coin_TL[0], $y1);
}
}
else
{
$path.= sprintf('%.2F %.2F m ', $x1, $y1);
$path.= sprintf('%.2F %.2F l ', $x2, $y2);
$path.= sprintf('%.2F %.2F l ', $x3, $y3);
$path.= sprintf('%.2F %.2F l ', $x4, $y4);
}
$path.= ' h W n';
}
$this->_out('q '.$path.' ');
}
function clippingPathClose()
{
$this->_out(' Q');
}
function drawCourbe($ext1_x, $ext1_y, $ext2_x, $ext2_y, $int1_x, $int1_y, $int2_x, $int2_y, $cen_x, $cen_y)
{
$MyArc = 4/3 * (sqrt(2) - 1);
$ext1_x = $ext1_x*$this->k; $ext1_y = ($this->h-$ext1_y)*$this->k;
$ext2_x = $ext2_x*$this->k; $ext2_y = ($this->h-$ext2_y)*$this->k;
$int1_x = $int1_x*$this->k; $int1_y = ($this->h-$int1_y)*$this->k;
$int2_x = $int2_x*$this->k; $int2_y = ($this->h-$int2_y)*$this->k;
$cen_x = $cen_x*$this->k; $cen_y = ($this->h-$cen_y) *$this->k;
$path = '';
if ($ext1_x-$cen_x!=0)
{
$xt1 = $cen_x+($ext1_x-$cen_x);
$yt1 = $cen_y+($ext2_y-$cen_y)*$MyArc;
$xt2 = $cen_x+($ext1_x-$cen_x)*$MyArc;
$yt2 = $cen_y+($ext2_y-$cen_y);
}
else
{
$xt1 = $cen_x+($ext2_x-$cen_x)*$MyArc;
$yt1 = $cen_y+($ext1_y-$cen_y);
$xt2 = $cen_x+($ext2_x-$cen_x);
$yt2 = $cen_y+($ext1_y-$cen_y)*$MyArc;
}
$path.= sprintf('%.2F %.2F m ', $ext1_x, $ext1_y);
$path.= sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c ', $xt1, $yt1, $xt2, $yt2, $ext2_x, $ext2_y);
if ($int1_x-$cen_x!=0)
{
$xt1 = $cen_x+($int1_x-$cen_x)*$MyArc;
$yt1 = $cen_y+($int2_y-$cen_y);
$xt2 = $cen_x+($int1_x-$cen_x);
$yt2 = $cen_y+($int2_y-$cen_y)*$MyArc;
}
else
{
$xt1 = $cen_x+($int2_x-$cen_x);
$yt1 = $cen_y+($int1_y-$cen_y)*$MyArc;
$xt2 = $cen_x+($int2_x-$cen_x)*$MyArc;
$yt2 = $cen_y+($int1_y-$cen_y);
}
$path.= sprintf('%.2F %.2F l ', $int2_x, $int2_y);
$path.= sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c ', $xt1, $yt1, $xt2, $yt2, $int1_x, $int1_y);
$this->_out($path . 'f');
}
function drawCoin($ext1_x, $ext1_y, $ext2_x, $ext2_y, $int_x, $int_y, $cen_x, $cen_y)
{
$MyArc = 4/3 * (sqrt(2) - 1);
$ext1_x = $ext1_x*$this->k; $ext1_y = ($this->h-$ext1_y)*$this->k;
$ext2_x = $ext2_x*$this->k; $ext2_y = ($this->h-$ext2_y)*$this->k;
$int_x = $int_x*$this->k; $int_y = ($this->h-$int_y)*$this->k;
$cen_x = $cen_x*$this->k; $cen_y = ($this->h-$cen_y) *$this->k;
$path = '';
if ($ext1_x-$cen_x!=0)
{
$xt1 = $cen_x+($ext1_x-$cen_x);
$yt1 = $cen_y+($ext2_y-$cen_y)*$MyArc;
$xt2 = $cen_x+($ext1_x-$cen_x)*$MyArc;
$yt2 = $cen_y+($ext2_y-$cen_y);
}
else
{
$xt1 = $cen_x+($ext2_x-$cen_x)*$MyArc;
$yt1 = $cen_y+($ext1_y-$cen_y);
$xt2 = $cen_x+($ext2_x-$cen_x);
$yt2 = $cen_y+($ext1_y-$cen_y)*$MyArc;
}
$path.= sprintf('%.2F %.2F m ', $ext1_x, $ext1_y);
$path.= sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c ', $xt1, $yt1, $xt2, $yt2, $ext2_x, $ext2_y);
$path.= sprintf('%.2F %.2F l ', $int_x, $int_y);
$path.= sprintf('%.2F %.2F l ', $ext1_x, $ext1_y);
$this->_out($path . 'f');
}
function startTransform()
{
$this->_out('q');
}
function stopTransform()
{
$this->_out('Q');
}
function setTranslate($t_x, $t_y)
{
// matrice de transformation
$tm[0]=1;
$tm[1]=0;
$tm[2]=0;
$tm[3]=1;
$tm[4]=$t_x*$this->k;
$tm[5]=-$t_y*$this->k;
$this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', $tm[0],$tm[1],$tm[2],$tm[3],$tm[4],$tm[5]));
}
function setRotation($angle, $x='', $y='')
{
if($x === '') $x=$this->x;
if($y === '') $y=$this->y;
$y=($this->h-$y)*$this->k;
$x*=$this->k;
// matrice de transformation
$tm[0]=cos(deg2rad($angle));
$tm[1]=sin(deg2rad($angle));
$tm[2]=-$tm[1];
$tm[3]=$tm[0];
$tm[4]=$x+$tm[1]*$y-$tm[0]*$x;
$tm[5]=$y-$tm[0]*$y-$tm[1]*$x;
$this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', $tm[0],$tm[1],$tm[2],$tm[3],$tm[4],$tm[5]));
}
function SetX($x)
{
$this->x=$x;
}
function SetY($y, $resetx=true)
{
if ($resetx)
$this->x=$this->lMargin;
$this->y=$y;
}
function SetXY($x, $y)
{
$this->x=$x;
$this->y=$y;
}
function getK() { return $this->k; }
function getW() { return $this->w; }
function getH() { return $this->h; }
function getPage() { return $this->page; }
function getlMargin() { return $this->lMargin; }
function getrMargin() { return $this->rMargin; }
function gettMargin() { return $this->tMargin; }
function getbMargin() { return $this->bMargin; }
function setbMargin($v) { $this->bMargin=$v; }
function setcMargin($v) { $this->cMargin=$v; }
function setPage($v) { $this->page=$v; }
function svgSetStyle($styles)
{
$style = '';
if ($styles['fill'])
{
$this->setMyFillColor($styles['fill']);
$style.= 'F';
}
if ($styles['stroke'] && $styles['stroke-width'])
{
$this->SetMyDrawColor($styles['stroke']);
$this->SetLineWidth($styles['stroke-width']);
$style.= 'D';
}
if ($styles['fill-opacity'])
{
// $this->SetAlpha($styles['fill-opacity']);
}
return $style;
}
function svgRect($x, $y, $w, $h, $style)
{
$xa=$x; $xb=$x+$w; $xc=$x+$w; $xd=$x;
$ya=$y; $yb=$y; $yc=$y+$h; $yd=$y+$h;
if($style=='F') $op='f';
elseif($style=='FD' || $style=='DF') $op='B';
else $op='S';
$this->_Point($xa, $ya, true);
$this->_Line($xb, $yb, true);
$this->_Line($xc, $yc, true);
$this->_Line($xd, $yd, true);
$this->_Line($xa, $ya, true);
$this->_out($op);
}
function svgLine($x1, $y1, $x2, $y2)
{
$op='S';
$this->_Point($x1, $y1, true);
$this->_Line($x2, $y2, true);
$this->_out($op);
}
function svgEllipse($x0, $y0, $rx, $ry, $style)
{
if($style=='F') $op='f';
elseif($style=='FD' || $style=='DF') $op='B';
else $op='S';
$this->_Arc($x0, $y0, $rx, $ry, 0, 2*M_PI, true, true, true);
$this->_out($op);
}
function svgPolygone($actions, $style)
{
if($style=='F') $op='f';
elseif($style=='FD' || $style=='DF') $op='B';
else $op='S';
$first = array('', 0, 0);
$last = array(0, 0, 0, 0);
foreach($actions as $action)
{
switch($action[0])
{
case 'M':
case 'm':
$first = $action;
$x = $action[1]; $y = $action[2]; $xc = $x; $yc = $y;
$this->_Point($x, $y, true);
break;
case 'Z':
case 'z':
$x = $first[1]; $y = $first[2]; $xc = $x; $yc = $y;
$this->_Line($x, $y, true);
break;
case 'L':
$x = $action[1]; $y = $action[2]; $xc = $x; $yc = $y;
$this->_Line($x, $y, true);
break;
case 'l':
$x = $last[0]+$action[1]; $y = $last[1]+$action[2]; $xc = $x; $yc = $y;
$this->_Line($x, $y, true);
break;
case 'H':
$x = $action[1]; $y = $last[1]; $xc = $x; $yc = $y;
$this->_Line($x, $y, true);
break;
case 'h':
$x = $last[0]+$action[1]; $y = $last[1]; $xc = $x; $yc = $y;
$this->_Line($x, $y, true);
break;
case 'V':
$x = $last[0]; $y = $action[1]; $xc = $x; $yc = $y;
$this->_Line($x, $y, true);
break;
case 'v':
$x = $last[0]; $y = $last[1]+$action[1]; $xc = $x; $yc = $y;
$this->_Line($x, $y, true);
break;
case 'A':
$rx = $action[1]; // rx
$ry = $action[2]; // ry
$a = $action[3]; // angle de deviation de l'axe X
$l = $action[4]; // large-arc-flag
$s = $action[5]; // sweep-flag
$x1 = $last[0]; // begin x
$y1 = $last[1]; // begin y
$x2 = $action[6]; // final x
$y2 = $action[7]; // final y
$this->_Arc2($x1, $y1, $x2, $y2, $rx, $ry, $a, $l, $s, true);
$x = $x2; $y = $y2; $xc = $x; $yc = $y;
break;
case 'a':
$rx = $action[1]; // rx
$ry = $action[2]; // ry
$a = $action[3]; // angle de deviation de l'axe X
$l = $action[4]; // large-arc-flag
$s = $action[5]; // sweep-flag
$x1 = $last[0]; // begin x
$y1 = $last[1]; // begin y
$x2 = $last[0]+$action[6]; // final x
$y2 = $last[1]+$action[7]; // final y
$this->_Arc2($x1, $y1, $x2, $y2, $rx, $ry, $a, $l, $s, true);
$x = $x2; $y = $y2; $xc = $x; $yc = $y;
break;
case 'C':
$x1 = $action[1];
$y1 = $action[2];
$x2 = $action[3];
$y2 = $action[4];
$xf = $action[5];
$yf = $action[6];
$this->_Curve($x1, $y1, $x2, $y2,$xf, $yf, true);
$x = $xf; $y = $yf; $xc = $x2; $yc = $y2;
break;
case 'c':
$x1 = $last[0]+$action[1];
$y1 = $last[1]+$action[2];
$x2 = $last[0]+$action[3];
$y2 = $last[1]+$action[4];
$xf = $last[0]+$action[5];
$yf = $last[1]+$action[6];
$this->_Curve($x1, $y1, $x2, $y2,$xf, $yf, true);
$x = $xf; $y = $yf; $xc = $x2; $yc = $y2;
break;
default:
echo 'MyPDF Path : <b>'.$action[0].'</b> non reconnu...';
exit;
}
$last = array($x, $y, $xc, $yc);
}
$this->_out($op);
}
function _Point($x, $y, $trans = false)
{
if ($trans) $this->ptTransform($x, $y);
$this->_out(sprintf('%.2F %.2F m', $x, $y));
}
function _Line($x, $y, $trans = false)
{
if ($trans) $this->ptTransform($x, $y);
$this->_out(sprintf('%.2F %.2F l', $x, $y));
}
function _Curve($x1, $y1, $x2, $y2, $x3, $y3, $trans = false)
{
if ($trans)
{
$this->ptTransform($x1, $y1);
$this->ptTransform($x2, $y2);
$this->ptTransform($x3, $y3);
}
$this->_out(sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c', $x1, $y1, $x2, $y2, $x3, $y3));
}
function _Arc($xc, $yc, $rx, $ry, $a_debut, $a_fin, $sens = true, $draw_first = true, $trans=false)
{
$nSeg = 8;
if (!$sens) $a_debut+= M_PI*2.;
$totalAngle = $a_fin - $a_debut;
$dt = $totalAngle/$nSeg;
$dtm = $dt/3;
$x0 = $xc; $y0 = $yc;
$t1 = $a_debut;
$a0 = $x0 + ($rx * cos($t1));
$b0 = $y0 + ($ry * sin($t1));
$c0 = -$rx * sin($t1);
$d0 = $ry * cos($t1);
if ($draw_first) $this->_Point($a0, $b0, $trans);
for ($i = 1; $i <= $nSeg; $i++)
{
// Draw this bit of the total curve
$t1 = ($i * $dt)+$a_debut;
$a1 = $x0 + ($rx * cos($t1));
$b1 = $y0 + ($ry * sin($t1));
$c1 = -$rx * sin($t1);
$d1 = $ry * cos($t1);
$this->_Curve(
$a0 + ($c0 * $dtm), $b0 + ($d0 * $dtm),
$a1 - ($c1 * $dtm), $b1 - ($d1 * $dtm),
$a1, $b1,
$trans
);
$a0 = $a1;
$b0 = $b1;
$c0 = $c1;
$d0 = $d1;
}
}
function _Arc2($x1, $y1, $x2, $y2, $rx, $ry, $a=0, $l=0, $s=0, $trans = false)
{
$v = array();
$v['x1'] = $x1;
$v['y1'] = $y1;
$v['x2'] = $x2;
$v['y2'] = $y2;
$v['rx'] = $rx;
$v['ry'] = $ry;
$v['xr1'] = $v['x1']*cos($a) - $v['y1']*sin($a);
$v['yr1'] = $v['x1']*sin($a) + $v['y1']*cos($a);
$v['xr2'] = $v['x2']*cos($a) - $v['y2']*sin($a);
$v['yr2'] = $v['x2']*sin($a) + $v['y2']*cos($a);
$v['Xr1'] = $v['xr1']/$v['rx'];
$v['Yr1'] = $v['yr1']/$v['ry'];
$v['Xr2'] = $v['xr2']/$v['rx'];
$v['Yr2'] = $v['yr2']/$v['ry'];
$v['dXr'] = $v['Xr2'] - $v['Xr1'];
$v['dYr'] = $v['Yr2'] - $v['Yr1'];
$v['D'] = $v['dXr']*$v['dXr'] + $v['dYr']*$v['dYr'];
if ($v['D']==0 || $v['D']>4)
{
$this->_Line($x2, $y2, $trans);
return false;
}
$v['s1'] = array();
$v['s2'] = array();
$v['s1']['t'] = sqrt((4.-$v['D'])/$v['D']);
$v['s1']['Xr'] = ($v['Xr1']+$v['Xr2'])/2. + $v['s1']['t']*($v['Yr2']-$v['Yr1'])/2.;
$v['s1']['Yr'] = ($v['Yr1']+$v['Yr2'])/2. + $v['s1']['t']*($v['Xr1']-$v['Xr2'])/2.;
$v['s1']['xr'] = $v['s1']['Xr']*$v['rx'];
$v['s1']['yr'] = $v['s1']['Yr']*$v['ry'];
$v['s1']['x'] = $v['s1']['xr']*cos($a)+$v['s1']['yr']*sin($a);
$v['s1']['y'] =-$v['s1']['xr']*sin($a)+$v['s1']['yr']*cos($a);
$v['s1']['a1'] = atan2($v['y1']-$v['s1']['y'], $v['x1']-$v['s1']['x']);
$v['s1']['a2'] = atan2($v['y2']-$v['s1']['y'], $v['x2']-$v['s1']['x']);
if ($v['s1']['a1']>$v['s1']['a2']) $v['s1']['a1']-=2*M_PI;
$v['s2']['t'] = -$v['s1']['t'];
$v['s2']['Xr'] = ($v['Xr1']+$v['Xr2'])/2. + $v['s2']['t']*($v['Yr2']-$v['Yr1'])/2.;
$v['s2']['Yr'] = ($v['Yr1']+$v['Yr2'])/2. + $v['s2']['t']*($v['Xr1']-$v['Xr2'])/2.;
$v['s2']['xr'] = $v['s2']['Xr']*$v['rx'];
$v['s2']['yr'] = $v['s2']['Yr']*$v['ry'];
$v['s2']['x'] = $v['s2']['xr']*cos($a)+$v['s2']['yr']*sin($a);
$v['s2']['y'] =-$v['s2']['xr']*sin($a)+$v['s2']['yr']*cos($a);
$v['s2']['a1'] = atan2($v['y1']-$v['s2']['y'], $v['x1']-$v['s2']['x']);
$v['s2']['a2'] = atan2($v['y2']-$v['s2']['y'], $v['x2']-$v['s2']['x']);
if ($v['s2']['a1']>$v['s2']['a2']) $v['s2']['a1']-=2*M_PI;
if (!$l)
{
if ($s)
{
$xc = $v['s2']['x'];
$yc = $v['s2']['y'];
$a1 = $v['s2']['a1'];
$a2 = $v['s2']['a2'];
$this->_Arc($xc, $yc, $rx, $ry, $a1, $a2, true, false, $trans);
}
else
{
$xc = $v['s1']['x'];
$yc = $v['s1']['y'];
$a1 = $v['s1']['a1'];
$a2 = $v['s1']['a2'];
$this->_Arc($xc, $yc, $rx, $ry, $a1, $a2, false, false, $trans);
}
}
else
{
if ($s)
{
$xc = $v['s1']['x'];
$yc = $v['s1']['y'];
$a1 = $v['s1']['a1'];
$a2 = $v['s1']['a2'];
$this->_Arc($xc, $yc, $rx, $ry, $a1, $a2, true, false, $trans);
}
else
{
$xc = $v['s2']['x'];
$yc = $v['s2']['y'];
$a1 = $v['s2']['a1'];
$a2 = $v['s2']['a2'];
$this->_Arc($xc, $yc, $rx, $ry, $a1, $a2, false, false, $trans);
}
}
}
function ptTransform(&$x, &$y, $trans=true)
{
$nb = count($this->transf);
if ($nb) $m = $this->transf[$nb-1];
else $m = array(1,0,0,1,0,0);
list($x,$y) = array(($x*$m[0]+$y*$m[2]+$m[4]),($x*$m[1]+$y*$m[3]+$m[5]));
if ($trans)
{
$x = $x*$this->k;
$y = ($this->h-$y)*$this->k;
}
return true;
}
function doTransform($n = null)
{
$nb = count($this->transf);
if ($nb) $m = $this->transf[$nb-1];
else $m = array(1,0,0,1,0,0);
if (!$n) $n = array(1,0,0,1,0,0);
$n = array(
$m[0]*$n[0]+$m[2]*$n[1],
$m[1]*$n[0]+$m[3]*$n[1],
$m[0]*$n[2]+$m[2]*$n[3],
$m[1]*$n[2]+$m[3]*$n[3],
$m[0]*$n[4]+$m[2]*$n[5]+$m[4],
$m[1]*$n[4]+$m[3]*$n[5]+$m[5]
);
// echo 'do-'.count($this->transf).' => '.print_r($n, true).'<br>';
$this->transf[] = $n;
}
function undoTransform()
{
array_pop($this->transf);
// echo 'un-'.count($this->transf).'<br>';
}
function setMyDrawColor($c)
{
$c = $this->setMyColor($c, true);
if (!$c) return false;
$this->DrawColor=$c;
if($this->page>0) $this->_out($this->DrawColor);
}
function setMyFillColor($c)
{
$c = $this->setMyColor($c);
if (!$c) return false;
$this->FillColor=$c;
$this->ColorFlag=($this->FillColor!=$this->TextColor);
if($this->page>0) $this->_out($this->FillColor);
}
function setMyTextColor($c)
{
$c = $this->setMyColor($c);
if (!$c) return false;
$this->TextColor=$c;
$this->ColorFlag=($this->FillColor!=$this->TextColor);
}
function setMyColor($c, $mode = false)
{
if (!is_array($c)) return sprintf('%.3F ',$c).($mode ? 'G' : 'g');
elseif (count($c)==3) return sprintf('%.3F %.3F %.3F ',$c[0],$c[1],$c[2]).($mode ? 'RG' : 'rg');
elseif (count($c)==4) return sprintf('%.3F %.3F %.3F %.3F ',$c[0],$c[1],$c[2],$c[3]).($mode ? 'K' : 'k');
return null;
}
}
}

View File

@ -0,0 +1,106 @@
*********************************************************
** This program is distributed under the LGPL License, **
** for more information see file _LGPL.txt or **
** http://www.gnu.org/licenses/lgpl.html **
** **
** Copyright 2000-2010 by Laurent Minguet **
*********************************************************
*******************************
* HTML2PDF v3.31 - 2010-05-21 *
*******************************
How to use :
------------
- You need at least PHP 4.3.10
- Look at the examples provided to see how it works.
- forms work only with ADOBE READER 8 and 9.0
- It is very important to provide valid HTML 4.01 to the converter,
but only what is in the <body>
- for borders: it is advised that they are like "solid 1mm #000000"
- for padding, they are applicable only on tags table, th, td, div, li
- You can chose the encoding. A specific font must be used. The encodings available are:
cp1250, cp1251, cp1252, cp1253, cp1254, cp1255, cp1257, cp1258, cp874,
ISO-8859-1, ISO-8859-2, ISO-8859-4, ISO-8859-5, ISO-8859-7, ISO-8859-9,
ISO-8859-11, ISO-8859-15, ISO-8859-16, KOI8-R, KOI8-U
To use it: $html2pdf->setEncoding('cp1250');
- A default font can be specified, if the requested font does not exist or if no font is specified:
$html2pdf->setDefaultFont('Arial');
- The possibility to protect your PDF is present, CF Example 7.
- Some tests can be enabled (true) or disabled (false) :
* setTestIsImage method: test that images must exist
* setTestTdInOnePage method: test that the contents of TDs fit on one page
* setTestIsDeprecated method: test that old properties of specific tags are not used anymore
- A DEBUG mode to know the resources used is present
It is activated by adding the following command just after the contructor (see Example 0):
$htmlpdf->setModeDebug();
- Some specific tags have been introduced:
* <page></page> (CF Exemple 7) :
determines the orientation, margins left, right, top and bottom, the background image
and the background color of a page, its size and position, the footer.
It is also possible to keep the header and footer of the previous pages,
through the attribut pageset="old" (see Example 3)
* <page_header></page_header> (CF Example 3)
* <page_footer></page_footer> (CF Example 3)
* <nobreak></nobreak> :
used to force the display of a section on the same page.
If this section does not fit into the rest of the page, a page break is done before.
* <barcode></barcode> (CF Examples 0 et 9) :
can insert barcodes in pdfs, CF Examples 0 and 9
The possible types od codebar are: EAN13, UPCA, C39.
* <qrcode></qrcode> (CF Exemple 13) :
permet d'inserer un codebar à 2 dimensions de type QRcode
voici un exemple d'utilisation :
<qrcode value="votre message ici" size="1mm" ec="M" style="color: black; background-color: white"></qrcode>
seul le parametre "value" est obligatoire
les différentes valeurs de type de correction sont L, M, Q, H
(QR Code is registered trademark of DENSO WAVE INCORPORATED | http://www.denso-wave.com/qrcode/)
ATTENTION : l'utilisation des QRCODE nécessite l'utilisation de PHP5
* <bookmark></bookmark> (CF Examples 7 et About) :
can insert bookmark in pdfs, CF Example 7 and About.
It is also possible to automatically create an index at the end of
documentv CF Example About.
* css property "rotate" :
values : 0, 90, 180, 270
works only on div (cf example 8)
change log :
-----------
see on this page : http://html2pdf.fr/en/download
Help & Support :
---------------
For questions and bug reports, thank you to use only the support link below.
I will answer to your questions only on it...
Informations :
-------------
Programmer : Spipu
email : webmaster@html2pdf.fr
web site : http://html2pdf.fr/
wiki : http://html2pdf.fr/en/wiki
support : http://html2pdf.fr/en/forum
Thanks :
-------
* Olivier Plathey: for have made FPDF
* Nicola Asuni: for the changes he has agreed to make to TCPDF
* yAronet: for hosting support forum
* everyone who helped me to develop this library and to bring the texts

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,21 @@
err01 L'etiqueta <b>&lt;[[OTHER]]&gt;</b> encara no existeix.<br><br>Si voleu afegir-la, heu de crear els mètodes <b>o_[[OTHER]]</b> (per l'obertura) i <b>c_[[OTHER]]</b> (pel tancament) seguint el model de les etiquetes existents.<br><br>A més, si creeu nous mètodes, envieu-ho a webmaster@html2pdf.fr per tal d'afegir-los a les següents versions d'HTML2PDF, i que tothom en pugui gaudir.
err02 Frase de 1000 línies => massa llarga<br><b>Frase :</b> [[OTHER_0]]<br><b>Mida casella :</b> [[OTHER_1]]<br><b>Mida text :</b> [[OTHER_2]]<br>
err03 Codi HTML no vàlid, una etiqueta té un tancament de més : <b>&lt;[[OTHER]]&gt;</b>
err04 Codi HTML no vàlid, les etiquetes no estan tancades en l'ordre correcte.<br>Estat : <pre>[[OTHER]]</pre>
err05 Codi HTML no vàlid, totes les etiquetes han de tenir el seu tancament.<br>Estat : <pre>[[OTHER]]</pre>
err06 Impossible carregar la imatge <b>[[OTHER]]</b>
err07 El contingut d'una etiqueta TD no quep en una sola pàgina
err08 <b>&lt;[[OTHER]]&gt;</b> tag not in a &lt;DRAW&gt; tag
err09 The using of the <b>&lt;[[OTHER_0]]&gt;</b>> tag has changed, you can not use [[OTHER_1]] anymore. Read the WIKI
txt01 ERROR n°
txt02 Fitxer :
txt03 Línia :
pdf01 Document generat el [[date_d]]/[[date_m]]/[[date_y]]
pdf02 Document generat a les [[date_h]]:[[date_i]]
pdf03 Document generat el [[date_d]]/[[date_m]]/[[date_y]] a les [[date_h]]:[[date_i]]
pdf04 Pàgina [[current]]/[[nb]]
pdf05 Els formularis requereixen l'ús de l'Adobe Reader 9
vue01 CAPÇALERA
vue02 PEU DE PÀGINA
vue03 PÀGINA
vue04 Visualització

View File

@ -0,0 +1,21 @@
err01 Element <b>&lt;[[OTHER]]&gt;</b> neexistuje.<br><br>Pokud ho chcete přidat, musíte vytvořit metodu <b>o_[[OTHER]]</b> (pro otevření) a <b>c_[[OTHER]]</b> (pro zavření) k začlenění do modelu jako existující element.<br><br>Pokud vytvoříte metodu, nebojte se poslat email na webmaster@html2pdf.fr k zařazení do další verze HTML2PDF.
err02 Sentence of 1000 lines => too long<br><b>Sentence :</b> [[OTHER_0]]<br><b>Width box :</b> [[OTHER_1]]<br><b>Length text :</b> [[OTHER_2]]<br>
err03 Chyba v HTML, element je příliš mnohokrát zavřen: <b>&lt;[[OTHER]]&gt;</b>
err04 Chyba v HTML, element není uzavřen ve správném pořadí.<br>Stav : <pre>[[OTHER]]</pre>
err05 Chyba v HTML, všechny elementy musí být zavřeny.<br>Stav : <pre>[[OTHER]]</pre>
err06 Menohu načíst orbázek <b>[[OTHER]]</b>
err07 Obsah TD elementu se nevejde na jednu stránku
err08 <b>&lt;[[OTHER]]&gt;</b> element není v &lt;DRAW&gt; elementu
err09 The using of the <b>&lt;[[OTHER_0]]&gt;</b>> tag has changed, you can not use [[OTHER_1]] anymore. Read the WIKI
txt01 CHYBA č.
txt02 Soubor :
txt03 Řádek :
pdf01 Dokument vytvořen dne [[date_d]].[[date_m]].[[date_y]]
pdf02 Dokument vytvořen v [[date_h]]:[[date_i]]
pdf03 Dokument vytvořen dne [[date_d]].[[date_m]].[[date_y]] v [[date_h]]:[[date_i]]
pdf04 Stránka [[current]]/[[nb]]
pdf05 Formuláře vyžadují Adobe Reader 9
vue01 HLAVIČKA
vue02 PATIČKA
vue03 STRÁNKA
vue04 POHLED

View File

@ -0,0 +1,21 @@
err01 Tag <b>&lt;[[OTHER]]&gt;</b> endnu ikke eksisterer.<br><br>Hvis du ønsker at tilføje det, skal du oprette de metoder <b>o_[[OTHER]]</b> (for åbning) og <b>c_[[OTHER]]</b> (for lukning) ved at følge den model af eksisterende tags.<br><br>Hvis du opretter disse metoder, så tøv ikke med at send mig en e-mail til webmaster@html2pdf.fr til indsat dem i den næste version af HTML2PDF.
err02 Sætning af 1000 lines => er for lang<br><b>sætning :</b> [[OTHER_0]]<br><b>Bredde boksen :</b> [[OTHER_1]]<br><b>Længde tekst :</b> [[OTHER_2]]<br>
err03 HTML-kode er ugyldig, et tag er lukket for mange gange: <b>&lt;[[OTHER]]&gt;</b>
err04 HTML-kode er ugyldig, tags er ikke afsluttet på en ordentlig måde.<br>Status : <pre>[[OTHER]]</pre>
err05 HTML-kode er ugyldig, alle tags skal lukkes. <br>Status : <pre>[[OTHER]]</pre>
err06 Umuligt at indlæse billedet <b>[[OTHER]]</b>
err07 Indholdet af en TD tag ikke passer på én side
err08 <b>&lt;[[OTHER]]&gt;</b> tag not in a &lt;DRAW&gt; tag
err09 The using of the <b>&lt;[[OTHER_0]]&gt;</b>> tag has changed, you can not use [[OTHER_1]] anymore. Read the WIKI
txt01 FEJL n°
txt02 File :
txt03 Linje :
pdf01 Siden oprettet d. [[date_y]]-[[date_m]]-[[date_d]]
pdf02 Siden oprettet d. [[date_h]]:[[date_i]]
pdf03 Siden oprettet d. [[date_y]]-[[date_m]]-[[date_d]] at [[date_h]]:[[date_i]]
pdf04 Side [[current]]/[[nb]]
pdf05 De formularer kræver brug af Adobe Reader 9
vue01 HEADER
vue02 FOOTER
vue03 PAGE
vue04 View

View File

@ -0,0 +1,21 @@
err01 Das Tag <b>&lt;[[OTHER]]&gt;</b> existiert noch nicht.<br><br>Wenn Sie es hinzufügen möchten, sollen Sie die Methoden<b>o_[[OTHER]]</b> (zu öffnen) und <b>c_[[OTHER]]</b> (zu schließen) nach dem Modell den existierenden Tags.<br><br>Wenn Sie diese Methoden außerdem aufbauen, bitte teilen Sie sie duch eine E-Mail an meine Adresse : webmaster@html2pdf.fr, so daß sie künftig in die nächste Version von HTML2PDF erscheinen.
err02 1000-Linien Satz => zu lang<br><b>Satz :</b> [[OTHER_0]]<br><b>Breite des Eingabefelds :</b> [[OTHER_1]]<br><b>Länge des Texts :</b> [[OTHER_2]]<br>
err03 Falsches HTML Code, überzähliges geschloßene Tag : <b>&lt;[[OTHER]]&gt;</b>
err04 Falsches HTML Code, die Tags sind nicht in richtiger Ordnung geschloßen.<br>Status : <pre>[[OTHER]]</pre>
err05 Falsches HTML Code, alle Tags sollen geschloßen sein.<br>Status : <pre>[[OTHER]]</pre>
err06 Ladung des Bilds unmöglich <b>[[OTHER]]</b>
err07 Er Inhalt eines TD-Tag passt nicht nur auf einer Seite
err08 <b>&lt;[[OTHER]]&gt;</b> tag not in a &lt;DRAW&gt; tag
err09 The using of the <b>&lt;[[OTHER_0]]&gt;</b>> tag has changed, you can not use [[OTHER_1]] anymore. Read the WIKI
txt01 Fehler n°
txt02 Datei :
txt03 Linie :
pdf01 Datei aufgebaut am [[date_d]]/[[date_m]]/[[date_y]]
pdf02 Datei aufgebaut um [[date_h]]:[[date_m]]
pdf03 Datei aufgebaut am [[date_d]]/[[date_m]]/[[date_y]] um [[date_h]]:[[date_i]]
pdf04 Seite [[current]]/[[nb]]
pdf05 Die Formulare benötigen Sie den Adobe Reader 9
vue01 Seite-Header
vue02 Fußzeile
vue03 Seite
vue04 Visualisierung

View File

@ -0,0 +1,21 @@
err01 The tag <b>&lt;[[OTHER]]&gt;</b> does not yet exist.<br><br>If you want to add it, you must create the methods <b>o_[[OTHER]]</b> (for opening) and <b>c_[[OTHER]]</b> (for closure) by following the model of existing tags.<br><br>If you create these methods, do not hesitate to send me an email to webmaster@html2pdf.fr to included them in the next version of HTML2PDF.
err02 Sentence of 1000 lines => too long<br><b>Sentence :</b> [[OTHER_0]]<br><b>Width box :</b> [[OTHER_1]]<br><b>Length text :</b> [[OTHER_2]]<br>
err03 HTML code invalid, a tag is closed too many times: <b>&lt;[[OTHER]]&gt;</b>
err04 HTML code invalid, the tags are not closed in an orderly fashion.<br>Status : <pre>[[OTHER]]</pre>
err05 HTML code invalid, all tags must be closed.<br>Status : <pre>[[OTHER]]</pre>
err06 Impossible to load the image <b>[[OTHER]]</b>
err07 The content of a TD tag does not fit on only one page
err08 <b>&lt;[[OTHER]]&gt;</b> tag not in a &lt;DRAW&gt; tag
err09 The using of the <b>&lt;[[OTHER_0]]&gt;</b>> tag has changed, you can not use [[OTHER_1]] anymore. Read the WIKI
txt01 ERROR n°
txt02 File :
txt03 Line :
pdf01 Document generated on [[date_y]]-[[date_m]]-[[date_d]]
pdf02 Document generated at [[date_h]]:[[date_i]]
pdf03 Document generated on [[date_y]]-[[date_m]]-[[date_d]] at [[date_h]]:[[date_i]]
pdf04 Page [[current]]/[[nb]]
pdf05 The forms require the use of Adobe Reader 9
vue01 HEADER
vue02 FOOTER
vue03 PAGE
vue04 View

View File

@ -0,0 +1,21 @@
err01 La etiqueta <b>&lt;[[OTHER]]&gt;</b> todavía no existe.<br><br>Si quiere añadirla, debe crear los métodos <b>o_[[OTHER]]</b> (para la apertura) y <b>c_[[OTHER]]</b> (para el cierre) siguiendo el modelo de las etiquetas existentes.<br><br>Si crea nuevos métodos, envíelos a webmaster@html2pdf.fr para añadirlos a las siguientes versiones de HTML2PDF, y que todo el mundo se pueda beneficiar.
err02 Frase de 1000 líneas => demasiado larga<br><b>Frase :</b> [[OTHER_0]]<br><b>Tamaño casilla :</b> [[OTHER_1]]<br><b>Tamaño texto :</b> [[OTHER_2]]<br>
err03 Código HTML no válido, una etiqueta tiene un cierre de más : <b>&lt;[[OTHER]]&gt;</b>
err04 Código HTML no válido, las etiquetas no estan cerradas en el orden correcto.<br>Estado : <pre>[[OTHER]]</pre>
err05 Código HTML no válido, todas las etiquetas deben tener su cierre.<br>Estado : <pre>[[OTHER]]</pre>
err06 Imposible cargar la imagen <b>[[OTHER]]</b>
err07 El contenido de una etiqueta TD no encaja en una sola página
err08 <b>&lt;[[OTHER]]&gt;</b> tag not in a &lt;DRAW&gt; tag
err09 The using of the <b>&lt;[[OTHER_0]]&gt;</b>> tag has changed, you can not use [[OTHER_1]] anymore. Read the WIKI
txt01 ERROR n°
txt02 Fichero :
txt03 Línea :
pdf01 Documento generado el [[date_d]]/[[date_m]]/[[date_y]]
pdf02 Documento generado a las [[date_h]]:[[date_i]]
pdf03 Documento generado el [[date_d]]/[[date_m]]/[[date_y]] a las [[date_h]]:[[date_i]]
pdf04 Página [[current]]/[[nb]]
pdf05 Los formularios requieren el uso de Adobe Reader 9
vue01 ENCABEZADO
vue02 PIE DE PÁGINA
vue03 PÁGINA
vue04 Visualización

View File

@ -0,0 +1,21 @@
err01 La balise <b>&lt;[[OTHER]]&gt;</b> n'existe pas encore.<br><br>Si vous voulez la rajouter, vous devez créer les méthodes <b>o_[[OTHER]]</b> (pour l'ouverture) et <b>c_[[OTHER]]</b> (pour la fermeture) en suivant le modèle des balises existantes.<br><br>De plus, si vous créez ces méthodes, n'hésitez pas à en faire profiter tout le monde en m'écrivant sur webmaster@html2pdf.fr afin qu'elles se retrouvent dans la prochaine version d'HTML2PDF.
err02 Phrase de 1000 lignes => trop long<br><b>Phrase :</b> [[OTHER_0]]<br><b>Largeur case :</b> [[OTHER_1]]<br><b>Longueur text :</b> [[OTHER_2]]<br>
err03 Code HTML non valide, une balise est fermée en trop : <b>&lt;[[OTHER]]&gt;</b>
err04 Code HTML non valide, les balises ne sont pas fermées dans le bon ordre.<br>Etat : <pre>[[OTHER]]</pre>
err05 Code HTML non valide, toutes les balises doivent être fermées.<br>Etat : <pre>[[OTHER]]</pre>
err06 Impossible de charger l'image <b>[[OTHER]]</b>
err07 le contenu d'une balise TD ne rentre pas sur une seule page
err08 Balise <b>&lt;[[OTHER]]&gt;</b> non contenu dans une balise &lt;DRAW&gt;
err09 L'utilisation de la balise <b>&lt;[[OTHER_0]]&gt;</b> a changé, vous ne pouvez plus utiliser [[OTHER_1]]. Lisez le WIKI
txt01 ERREUR n°
txt02 Fichier :
txt03 Ligne :
pdf01 Document généré le [[date_d]]/[[date_m]]/[[date_y]]
pdf02 Document généré à [[date_h]]:[[date_i]]
pdf03 Document généré le [[date_d]]/[[date_m]]/[[date_y]] à [[date_h]]:[[date_i]]
pdf04 Page [[current]]/[[nb]]
pdf05 Les formulaires nécessitent l'utilisation de Adobe Reader 9
vue01 HEADER
vue02 FOOTER
vue03 PAGE
vue04 Restitution

View File

@ -0,0 +1,21 @@
err01 Il tag <b>&lt;[[OTHER]]&gt;</b> non esiste ancora.<br><br>Se si desidera aggiungere, è necessario creare metodi <b>o_[[OTHER]]</b> (di apertura) e <b>C_[[OTHER]]</b> (per la chiusura) secondo il modello esistente di tag.<br><br>Inoltre, se si creare questi metodi, non esitate a portare il mondo intero ha scritto su webmaster@html2pdf.fr in modo che alla fine nella prossima versione di HTML2PDF.
err02 Citazione di 1000 linee => troppo lungo<br><b>frase :</b> [[OTHER_0]]<br><b>casella Larghezza :</b> [[OTHER_1]]<br><b>Lunghezza testo :</b> [[OTHER_2]]<br>
err03 HTML non valido, un tag è chiusa troppo <b>&lt;[[OTHER]]&gt;</ b>
err04 HTML non validi, i tag non sono chiusi nel corretto ordine.<br>Stato :<pre>[[OTHER]]</pre>
err05 HTML non valido, tutte le tag deve essere chiuso.<br>Stato :<pre>[[OTHER]]</pre>
err06 Impossibile caricare l'immagine <b>[[OTHER]]</b>
err07 il contenuto di un tag TD non rientra in una sola pagina
err08 <b>&lt;[[OTHER]]&gt;</b> tag not in a &lt;DRAW&gt; tag
err09 The using of the <b>&lt;[[OTHER_0]]&gt;</b>> tag has changed, you can not use [[OTHER_1]] anymore. Read the WIKI
txt01 ERRORE n°
txt02 File :
txt03 Linea :
pdf01 Documento generato il [[date_d]]/[[date_m]]/[[date_y]]
pdf02 Documento generato [[date_h]]:[[date_i]]
pdf03 Documento generato il [[date_d]]/[[date_m]]/[[date_y]] nel [[date_h]]:[[date_i]]
pdf04 Pagina [[current]]/[[nb]]
pdf05 I moduli richiedono l'uso di Adobe Reader 9
vue01 HEADER
vue02 FOOTER
vue03 PAGINA
vue04 Visualization

View File

@ -0,0 +1,21 @@
err01 De tag <b>&lt;[[OTHER]]&gt;</b> bestaat nog niet.<br><br>Om deze toe te voegen, gebruik de methods <b>o_[[OTHER]]</b> (om te openen) en <b>c_[[OTHER]]</b> (om te sluiten) volgens het model van de bestaande tags.<br><br>Als u deze methods maakt, stuur deze dan a.u.b. via e-mail naar webmaster@html2pdf.fr voor opname in de volgende versie van HTML2PDF.
err02 Zin van 1000 regels => te lang<br><b>Zin :</b> [[OTHER_0]]<br><b>Kaderbreedte :</b> [[OTHER_1]]<br><b>Tekstlengte :</b> [[OTHER_2]]<br>
err03 Ongeldige HTML code, overvloedig afgesloten tag : <b>&lt;[[OTHER]]&gt;</b>
err04 Ongeldige HTML code, de tags zijn niet correct afgesloten.<br>Status : <pre>[[OTHER]]</pre>
err05 Ongeldige HTML code, alle tags dienen te zijn gesloten.<br>Status : <pre>[[OTHER]]</pre>
err06 Kan afbeelding niet laden: <b>[[OTHER]]</b>
err07 De inhoud van de cel (<TD>) past niet op een pagina
err08 <b>&lt;[[OTHER]]&gt;</b> tag not in a &lt;DRAW&gt; tag
err09 The using of the <b>&lt;[[OTHER_0]]&gt;</b>> tag has changed, you can not use [[OTHER_1]] anymore. Read the WIKI
txt01 Fout nr
txt02 Bestand :
txt03 Regel :
pdf01 Document gemaakt op [[date_d]]-[[date_m]]-[[date_y]]
pdf02 Document gemaakt om [[date_h]]:[[date_i]]
pdf03 Document gemaakt op [[date_d]]-[[date_m]]-[[date_y]] om [[date_h]]:[[date_i]]
pdf04 Pagina [[current]] van [[nb]]
pdf05 De formulieren vereisen het gebruik van Adobe Reader 9
vue01 Paginakop
vue02 Paginavoet
vue03 Pagina
vue04 Bekijken

Some files were not shown because too many files have changed in this diff Show More