﻿================================================================================
Librairie :  FPDF                       Version : 1.8.1
Librairie : tFPDF                       Version : 1.25
================================================================================

FPDF est une classe PHP qui permet de produire des fichiers PDF.
Pour infos & documentations : http://www.fpdf.org/


tFPDF est une solution pour une version modifiée de FPDF qui ajoute le support de l’UTF-8.
Indispensable pour permettre l’impression de caractères spéciaux tels le nombre pi (π).
http://www.fpdf.org/fr/script/script92.php

Par compte, attention, tFPDF était basé sur la version 1.7 de FPDF.
Du coup, j’ai bidouillé la classe afin de tenir compte des évolutions des versions 1.8 et 1.8.1 de FPDF...

De plus, tFPDF créé des fichiers dans le dossier /font/unifont/
Et 2 de ces fichiers PHP comportent des chemins spécifiques à la machine...
Du coup ces fichiers ont été générés dans le dépôt et une modification a été apportée ligne 532 de tfpdf.php pour utiliser FPDF_FONTPATH

Par ailleurs, il faut ajouter les 2 lignes suivantes à VertCell car tFPDF n’embarque que les caractères utilisés.
    foreach($this->UTF8StringToArray($txt) as $uni)
      $this->CurrentFont['subset'][$uni] = $uni;
Enfin, il y a un bug dans la fonction GetStringWidth() à la ligne suivante :
   if (isset($cw[$char])) { $w += (ord($cw[2*$char])<<8) + ord($cw[2*$char+1]); }
Pour certains caractères très particuliers, le calcul retourne 65535 (2^16 - 1) !
Contre moins de 1000 pour les caractères habituels...
Et cette valeur énorme provoque une compression anormale du texte (avec CellFit() par exemple).
On peut voir un exemple de caractère sur le site http://hapax.qc.ca/conversion.fr.html.
Dans la boite "Unités de code UTF-8", en tapant "C3 A9" (cliquer ensuite ailleurs sur la page) on a le "é" classique.
En y saisissant "65 CC 81" on a un caractère en apparence identique mais en réalité différent : c'est "é", un e couplé à un accent aigu diacritique.
Et ce caractère provoque le bug.
Après signalement Olivier <oliver@fpdf.org> explique que c’est parce que tFPDF de gère pas "les caractères décomposés".
Il faut donc préalablement les recomposer : avec l'extension "intl" il suffit d'appeler Normalizer::normalize() sur les chaînes.

Et comme utf8_encode() devient déprécié
		$value = utf8_encode($value);
a été remplacé par
		$value = mb_convert_encoding($value,'UTF-8','ISO-8859-1');

PDF_Label est une extension de classe de FPDF pour générer un fichier d’étiquettes.
http://www.fpdf.org/fr/script/script29.php
Ligne n°87 "$this->SetFont(...);" commentée.


D’autres extensions de FPDF sont aussi utilisées par SACoche (parfois modifiées, parfois partiellement) :
http://www.fpdf.org/fr/script/script18.php  Pour optimiser la gestion de la mémoire.
http://www.fpdf.org/fr/script/script31.php  Pour écrire un texte tourné.
http://www.fpdf.org/fr/script/script62.php  Pour ajuster un texte à la taille d’une cellule.
http://www.fpdf.org/fr/script/script49.php  Pour savoir le nombre de lignes requises pour écrire un texte.
http://www.fpdf.org/fr/script/script45.php  Pour afficher des images chargées en mémoire sans avoir besoin de passer par un fichier temporaire.

D’autres extensions de FPDF intéressantes mais non utilisées :
http://www.fpdf.org/fr/script/script6.php   Pour tracer un cercle (ou une ellipse).
http://www.fpdf.org/en/script/script37.php  Pour protéger le PDF en écriture -> fonctionne si on crée un PDF de toutes pièces, mais pas si on ajoute du contenu sur un PDF existant.


========================================
Modifications apportées
========================================


Attention : à partir de FPDF 1.7 il faut remplacer 4x dans le script18 "DefPageFormat" par "DefPageSize" !
http://www.fpdf.org/phorum/read.php?f=1&i=56024&t=56024

Attention : la fonction get_defined_vars() pouvant être désactivée, la fonction _loadfont() a été modifiée.
http://www.fpdf.org/?go=forum&i=56830&t=56830

Attention : remplacer dans FPDF 1.8
  $n = $this->PageInfo[1]['n'];
par
  $n = isset($this->PageInfo[1]['n']) ? $this->PageInfo[1]['n'] : 3 ;
sinon erreur de variable indéfinie rencontrée :
http://www.fpdf.org/phorum/read.php?f=1&i=66808&t=66808

Suite à une erreur sur un serveur dans PDF_Label.php
$this->_put('/ViewerPreferences <</PrintScaling /None>>');
a été remplacé par
parent::_put('/ViewerPreferences <</PrintScaling /None>>');
mais sans savoir si cela corrigeait qq chose,
puis tout simplement commenté vu son peu d’importance.

get_magic_quotes_runtime() est dépréciée.
Dans tfpdf.php (get_magic_quotes_runtime()) a été remplacé par ( version_compare(PHP_VERSION,5.4,'<') && get_magic_quotes_runtime() )

--------------------------------------------------

Pour éviter https://stitcher.io/blog/deprecated-dynamic-properties-in-php-82 :

1) Dans

_lib/FPDF/tfpdf.php

ajout de

var $cMargin_memo;       // cell margin memo for FitOn() and FitOff()

2) Dans

_lib/FPDF/font/unifont/ttfonts.php

ajout de

var $maxUniChar;
var $codeToGlyph;
var $glyphdata;
var $sFamilyClass;
var $sFamilySubClass;
