Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > PDF
PDF Forum d'entraide sur la gestion dynamique de documents PDF avec PHP. Exemples : PDFLib, eZPdf, PhpToPdf... Avant de poster -> FAQ PDF et Cours PDF
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/05/2011, 12h10   #1
Membre du Club
 
Avatar de tavarlindar
 
Inscription : janvier 2007
Messages : 238
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 238
Points : 57
Points : 57
Par défaut Tableau dynamique et UTF8 ?

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 :
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();
 
?>
__________________
Mieux vaut penser avant d'agir que d'agir en rêvant.
tavarlindar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h16.


 
 
 
 
Partenaires

Hébergement Web