- La solution semble t'elle viable?
Oui et non. LaTeX n'est pas forcément fait pour ça, et les tableaux sont souvent peu agréables à gérer. Notamment, si la longueur de ton tableau dépasse l'espace disponible sur une page, le résultat peut être assez douteux; il faudrait donc pouvoir garantir que le texte passe bien comme tu t'y attends, ce qui n'est pas forcément très facile à faire. De plus, il faut faire attention aux diverses injections de codes, ce n'est pas une moindre affaire, et je ne suis pas sûr que je le risquerais.
De plus, formater du LaTeX de façon à ce que le rendu soit relativement esthétique n'est pas une partie de plaisir, surtout si tu n'as aucune expérience avec.
La solution que je te proposerais (et que j'adopte dans des projets où j'ai besoin de générer des rapports sur des données), c'est d'écrire à la main l'outil de génération du PDF en te basant sur tes besoins précis, en utilisant par exemple le "module" PHP dédié. Cela va te demander un peu de réflexion quant à la conception, mais tu arriveras probablement à un résultat plus plaisant à la fin, et moins sujet aux bugs.
- Il y a t'il d'autres manières de faire?
Cf. au dessus
- Avez vous des pistes pour générer un PDF depuis du LaTeX? J'ai trouvé deux trois trucs sur le net, mais je suppose que c'est utilisé sur ZDS et peut être pourrais t'on me présenter une solution différente.
LaTeX est conçu pour générer des PDF (enfin. presque), la solution naïve serait d'avoir quelque chose comme
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 | <?php
class LaTeXGenerator {
private $datas;
protected function process($datas);
protected function clean();
public function __construct($datas) {
$this->process($datas);
$this->clean();
}
public function generateTemplate() {
$rtr = <<<EOL
\documentclass[report]
\title{${datas['title']}}
........
EOL;
foreach(....) { ... }
return $rtr;
}
}
class PDFCompile {
private $tmpfile;
private $tmpfname;
private $template;
protected function getLaTeXFname() {
return $this->tmpfname + ".tex";
}
protected function getPDFFname() {
return $this->tmpfname + ".pdf";
}
public function __construct($template) {
$this->tmpfname = tempnam(sys_get_temp_dir(), "latex_");
$this->tmpfile = fopen(getLaTeXFname(), "w");
$this->process();
public function __destruct() {
@fclose($this->tmpfile);
}
public function getPDF() {
return file_get_contents($this->getPDFFname());
}
public function process() {
fwrite($this->tmpfile, $this->template);
fclose($this->tmpfile);
exec("pdflatex " + $fname, $rtr, $rcode); // dangereux !
return $rcode;
}
}
$gen = new LaTeXGenerator($_POST);
$template = $gen->generateTemplate();
$pdf = new PDFGenerator($template);
if ($pdf->process() === 0) {
header('Content-type: application/pdf');
$pdf->getPDF();
} else {
echo "erreur";
}
|
Note que ce PHP est particulièrement hideux et dangereux (et je ne sais même pas s'il fonctionne). Je t'en supplie, n'utilise pas cela dans la vraie vie. Mais tu as l'idée: on génère un fichier temporaire contentant notre fichier LaTeX, puis l'on exécute un compilateur LaTeX sur celui-ci, de source à ce que l'on obtienne un PDF contenant la sortie que l'on espère.
Mais à nouveau, et je me répète, je te déconseille vivement de procéder ainsi dans un environnement que tu ne contrôles pas parfaitement. Le compilateur LaTeX peut, si les paramètres ne sont pas bien gérés, exécuter des commandes sur le serveur, ce qui peut avoir des conséquences catastrophiques (je pense par exemple à \write18
). De la même façon, certaines syntaxes sont potentiellement dangereuses si elles ne sont pas contrôlées de façon très stricte, ce qui n'est en tout cas pas une tâche facile à réaliser.