Bonjour,
Je recherche de l'aide pour mettre des liens internes dans le sommaire d'un pdf qui redirigent vers la page concernée.
J'ai fais quelques recherches sur l'utilisation de addLink() et setLink() liés à fpdf mais je n'arrive pas à appliquer le concept à mon code qui diffère un peu des exemples que j'ai trouvé.
Mon code génère des pages à l'aide de fonctions dans lesquelles j'appelle les fonctions de fpdf. Ces fonctions sont définies dans la classe, alors que l'exemple que j'ai qui vient du tutoriel de fpdf.org ne procède pas de la même façon est c'est ce qui me dérange.
Le tuto de fpdf.org :
Dans ce tuto on définit tpout ce dont on a besoin dans la classe et au moment de générer le pdf on appelle les fonctions via une variable en dehors de la classe qui hérite de fpdf.
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 <?php require('fpdf.php'); class PDF extends FPDF { protected $B = 0; protected $I = 0; protected $U = 0; protected $HREF = ''; function WriteHTML($html) { // Parseur HTML $html = str_replace("\n", ' ', $html); $a = preg_split('/<(.*)>/U', $html, -1, PREG_SPLIT_DELIM_CAPTURE); foreach ($a as $i => $e) { if ($i % 2 == 0) { // Texte if ($this->HREF) $this->PutLink($this->HREF, $e); else $this->Write(5, $e); } else { // Balise if ($e[0] == '/') $this->CloseTag(strtoupper(substr($e, 1))); else { // Extraction des attributs $a2 = explode(' ', $e); $tag = strtoupper(array_shift($a2)); $attr = array(); foreach ($a2 as $v) { if (preg_match('/([^=]*)=["\']?([^"\']*)/', $v, $a3)) $attr[strtoupper($a3[1])] = $a3[2]; } $this->OpenTag($tag, $attr); } } } } function OpenTag($tag, $attr) { // Balise ouvrante if ($tag == 'B' || $tag == 'I' || $tag == 'U') $this->SetStyle($tag, true); if ($tag == 'A') $this->HREF = $attr['HREF']; if ($tag == 'BR') $this->Ln(5); } function CloseTag($tag) { // Balise fermante if ($tag == 'B' || $tag == 'I' || $tag == 'U') $this->SetStyle($tag, false); if ($tag == 'A') $this->HREF = ''; } function SetStyle($tag, $enable) { // Modifie le style et sélectionne la police correspondante $this->$tag += ($enable ? 1 : -1); $style = ''; foreach (array('B', 'I', 'U') as $s) { if ($this->$s > 0) $style .= $s; } $this->SetFont('', $style); } function PutLink($URL, $txt) { // Place un hyperlien $this->SetTextColor(0, 0, 255); $this->SetStyle('U', true); $this->Write(5, $txt, $URL); $this->SetStyle('U', false); $this->SetTextColor(0); } } $html = 'Vous pouvez maintenant imprimer facilement du texte mélangeant différents styles : <b>gras</b>, <i>italique</i>, <u>souligné</u>, ou <b><i><u>tous à la fois</u></i></b> !<br><br>Vous pouvez aussi insérer des liens sous forme textuelle, comme <a href="http://www.fpdf.org">www.fpdf.org</a>, ou bien sous forme d\'image : cliquez sur le logo.'; $pdf = new PDF(); // Première page $pdf->AddPage(); $pdf->SetFont('Arial', '', 20); $pdf->Write(5, 'Pour découvrir les nouveautés de ce tutoriel, cliquez '); $pdf->SetFont('', 'U'); $link = $pdf->AddLink(); $pdf->Write(5, 'ici', $link); $pdf->SetFont(''); // Seconde page $pdf->AddPage(); $pdf->SetLink($link); $pdf->Image('logo.png', 10, 12, 30, 0, '', 'http://www.fpdf.org'); $pdf->SetLeftMargin(45); $pdf->SetFontSize(14); $pdf->WriteHTML($html); $pdf->Output();
Voil à un bout de mon code qui permet de voir comment il est construit:
Pouvez vous m'aider à mettre des liens internes dans mon code ?
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 class PDFRapportV2 extends Pdf { const FONT_FAMILY = 'Arial'; public function __construct(Config $config, QualiteAir $qualiteAir) { parent::__construct('P', 'mm', 'A4'); $this->AddFont('Calibri'); $this->AddFont('Calibri', 'B'); $this->AddFont('Calibri', 'I'); $this->config = $config; $this->qualiteAir = $qualiteAir; $this->page1(); $this->pageSommaire(); $this->page2(); $this->page3(); $this->page4(); } public function page1() { $this->AddPage(); $batiment = $this->qualiteAir->getBatiment(); $equipement = $batiment->getEquipement(); $ville = $equipement->getVille(); $createur = $this->qualiteAir->getCreateur(); $visiteurOuvrant = $this->qualiteAir->getVisiteurOuvrant(); $visiteurVentilation = $this->qualiteAir->getVisiteurVentilation(); $this->jump(15); $this->bigtitlecentered("Surveillance de la qualité")->jump(); $this->bigsubtitlecentered("Rapport d'évaluation des moyens")->jump(); } public function pageSommaire() { $this->AddPage(); $this->title("Sommaire")->eol()->jump(); $this->indent(10)->lines("Titre 1")->jump(); $this->indent(20)->lines("Titre 2"); $this->jump(); $this->indent(20)->lines("Titre 2"); $this->jump(); $this->indent(20)->lines("Titre 2")->jump(); $this->indent(20)->lines("Titre 2")->jump(); $this->indent(10)->lines("Titre1")->jump(); $this->indent(20)->lines("Titre 2")->jump(); } }
Partager