Bonjour,

Après une journée de recherche, je craque , je poste ...

Voilà mon besoin : Editer un PDF comprenant des tableaux dans un environnement international.

Pour ce faire, j'utilise tFPDF une extension FPDF pour gérer les polices de caractère unicode. Jusque là pas de problème. Vous pouvez récupérer le code sur http://www.fpdf.org/fr/script/script92.php
Pour générer des tableaux avec des hauteurs de lignes variable en fonction de leur contenu, sur le même site on peut trouver PDF_MC_Table (script Tableau avec MultiCells de "Olivier" en date de 2002).

Naturellement, j'ai voulu marier les deux, mais cela ne fonctionne pas. Je ne sais pas pourquoi.

ci-dessous un code de test : avec la police arial, pas de problème, avec une police unicode comme dejavu ou arialuni : la hauteur des lignes reste inchangé.

Qui a une solution ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
 
<?php
require('../include/tfpdf.php');
 
class PDF_MC_Table extends TFPDF
{
var $widths;
var $aligns;
 
function SetWidths($w)
{
    //Tableau des largeurs de colonnes
    $this->widths=$w;
}
 
function SetAligns($a)
{
    //Tableau des alignements de colonnes
    $this->aligns=$a;
}
 
function Row($data)
{
    //Calcule la hauteur de la ligne
    $nb=0;
    for($i=0;$i<count($data);$i++)
        $nb=max($nb,$this->NbLines($this->widths[$i],$data[$i]));
    $h=5*$nb;
    //Effectue un saut de page si nécessaire
    $this->CheckPageBreak($h);
    //Dessine les cellules
    for($i=0;$i<count($data);$i++)
    {
        $w=$this->widths[$i];
        $a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'L';
        //Sauve la position courante
        $x=$this->GetX();
        $y=$this->GetY();
        //Dessine le cadre
        $this->Rect($x,$y,$w,$h);
        //Imprime le texte
        $this->MultiCell($w,5,$data[$i],0,$a);
        //Repositionne à droite
        $this->SetXY($x+$w,$y);
    }
    //Va à la ligne
    $this->Ln($h);
}
 
function CheckPageBreak($h)
{
    //Si la hauteur h provoque un débordement, saut de page manuel
    if($this->GetY()+$h>$this->PageBreakTrigger)
        $this->AddPage($this->CurOrientation);
}
 
function NbLines($w,$txt)
{
    //Calcule le nombre de lignes qu'occupe un MultiCell de largeur w
    $cw=&$this->CurrentFont['cw'];
    if($w==0)
        $w=$this->w-$this->rMargin-$this->x;
    $wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
    $s=str_replace("\r",'',$txt);
    $nb=strlen($s);
    if($nb>0 and $s[$nb-1]=="\n")
        $nb--;
    $sep=-1;
    $i=0;
    $j=0;
    $l=0;
    $nl=1;
    while($i<$nb)
    {
        $c=$s[$i];
        if($c=="\n")
        {
            $i++;
            $sep=-1;
            $j=$i;
            $l=0;
            $nl++;
            continue;
        }
        if($c==' ')
            $sep=$i;
        $l+=$cw[$c];
        if($l>$wmax)
        {
            if($sep==-1)
            {
                if($i==$j)
                    $i++;
            }
            else
                $i=$sep+1;
            $sep=-1;
            $j=$i;
            $l=0;
            $nl++;
        }
        else
            $i++;
    }
    return $nl;
}
}
 
 
 
$pdf=new PDF_MC_Table();
$pdf->AddPage();
//$pdf->SetFont('Arial','',14);
// Ajoute une police Unicode (utilise UTF-8)
$pdf->AddFont('DejaVu','','DejaVuSansCondensed.ttf',true);
$pdf->SetFont('DejaVu','',14);
 
//Table de 3 lignes et 4 colonnes
$pdf->SetWidths(array(30,50,20,40));
//srand(microtime()*1000000);
 
    $pdf->Row(array('kiki koko kuku','titi toto tata tutu','il fait beau ce jour','on va faire un test'));
	$pdf->Row(array('toto','titi','il fait beau ce jour','André fait la vaisselle'));
	$pdf->Row(array('toto','jean','un jour mon prince viendra et lala lala','azerty'));
$pdf->Output();
 
?>