Obligement - L'Amiga au maximum

Jeudi 25 avril 2024 - 10:44  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Programmation : Introduction à FPDF
(Article écrit par Arnaud Danassié - août 2003)


FPDF Pourquoi utiliser FPDF ?

Si vous vous êtes un jour ou l'autre intéressé au PHP, vous n'avez pu manquer de voir qu'il disposait de plusieurs jeux d'instructions permettant de générer du PDF (format Acrobat) via deux bibliothèques appelées PDFlib et ClibPDF.

Le format Acrobat d'Adobe (ou PDF) a en effet su s'imposer depuis quelques années comme l'un des formats quasi universel : il devient donc de plus en plus intéressant de pouvoir générer du PDF depuis un site internet (en PHP dans notre exemple).

PDFlib et ClibPDF fonctionnent très bien mais si vous lisez attentivement les petites lignes de leurs licences respectives, vous vous apercevrez vite qu'il faut payer une licence de 450 dollars US minimum pour PDFLib voire 1000 à 25000 dollars US pour ClibPDF dès lors que vous les utilisez de manière plus ou moins commerciale (dans une application, sur un site Web, un serveur intranet, etc.) ! Autant prendre de bonnes habitudes dès a présent, même pour votre page perso. ;-)

Plusieurs alternatives gratuites existent donc dont l'excellent gratuiciel FPDF dont nous parlerons dans tout le reste de cet article. Bien évidemment, il vous faut savoir programmer un minimum en PHP sinon vous allez passer un peu plus longtemps que les habitués du PHP à comprendre comment utiliser FPDF (prévoyez quelques heures de pratique avant de pouvoir générer des documents PDF complexes comme des devis, tableaux, factures sur plusieurs pages, etc.).

Un petit copier/coller de la page d'accueil du site de FPDF vous donneras une idée de ses points forts :

Le F de FPDF signifie Free : vous êtes libre de l'utiliser et de la modifier comme vous le souhaitez.

FPDF a d'autres avantages : des fonctions de plus haut niveau. Voici une liste de ses principales fonctionnalités :
  • Choix des unités, du format des pages et des marges
  • Gestion des en-têtes et pieds de page
  • Saut de page automatique
  • Saut de ligne automatique et justification
  • Images (JPEG et PNG)
  • Couleurs
  • Liens
  • Gestion des polices TrueType et Type1
  • Compression des pages
FPDF ne nécessite aucune extension (à part Zlib pour activer la compression) et fonctionne avec PHP 4 (les versions avant la 1.4 sont également compatibles avec PHP 3).

Autre avantage non négligeable, Olivier Plathey, l'auteur de FPDF est un Français ! FPDF est gratuiciel mais rien ne vous interdit de lui verser une petite (ou moyenne) contribution si vous utilisez régulièrement FPDF.

Le site internet de FPDF est également très pratique avec un forum français/anglais assez complet ou vous pourrez poser vos questions, une rubrique scripts bien achalandée, des documentations en italien, anglais, portugais, allemand, etc. Je vous recommande vivement de lire la FAQ si vous rencontrez un problème quelconque avec FPDF (genre une erreur type "FPDF error: Could not include font metric file" si vous avez oubliez de définir la constante FPDF_FONTPATH avec une ligne du genre define('FPDF_FONTPATH','../font/'); dans vos scripts PHP ou, comme moi, directement dans fpdf.php ou encore si vous avez des soucis avec certaines versions d'IE).

Voilà ce que donne le script minimal pour générer un PDF de moins d'1 ko avec le fameux "Hello World !" :

<?php
require('fpdf.php');

$pdf=new FPDF();
$pdf->Open();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World !');
$pdf->Output();
?>

Installation

Comme FPDF est une classe PHP, il vous suffit d'un serveur Web gérant le PHP4.x pour pouvoir générer du PDF en ligne : bref cela peut être aussi bien une page perso chez Free, Tiscali et cie (ou sur votre serveur Web professionnel) qu'un serveur Apache qui tourne en local ou sur votre intranet...

L'installation est simplissime, il suffit de copier fpdf.php et les quelques fichiers de métriques contenus dans un sous répertoire appelé fonts/. Les polices utilisées par Fpdf par défaut sont les suivantes :
  • Courier (caractères de largeur fixe)
  • Helvetica ou Arial (synonymes; sans serif)
  • Times (avec serif)
  • Symbol (symboles)
  • ZapfDingbats (symboles)
Vous pourrez bien sûr ajouter les polices dont vous avez besoin. C'est expliqué en détail dans le tutoriel n°7.

Les pros du PHP pourront donc facilement jeter un oeil sur fpdf.php et l'améliorer pour le bénéfice de tou(te)s... Toute la procédure d'installation est très bien expliquée dans l'archive de FPDF 1.51 disponible sur le site en rubrique Downloads (disponible en .zip ou .tgz).

Un cas concret : la présentation d'AmigaOS 4 à l'AmiWest

Comme rien ne vaut un peu de pratique, nous allons voir une mini étude de cas. Je lisais récemment les nouvelles sur Amigaimpact quand je suis tombé le 29 juillet dernier sur quelques lignes parlant du salon AmiWest et notamment de la présentation d'AmigaOS 4 effectuée par Ben Hermans.

Cette dernière était notamment disponible en version PDF de 1,93 Mo mais celle-ci était commentée "Non lisible par les versions AmigaOS d'APDF". ;-(

Effectivement, après quelques essais il s'avérait que ce PDF était illisible sous Apdf 2.2 (dernière version 68k) ou Adobe Acrobat 5 Mac OS X mais passait très bien sur PC (Acrobat 5 sous Windows) ou APDF 3.1 sous MorphOS qui est un vrai petit bijou (vitesse, compatibilité, etc.).

Ayant lu qu'on pouvait télécharger aussi une archive zip de 3 Mo avec toutes les images de la présentation, je me suis empressé de le faire... Après 5 mn de réflexion, je me suis dit qu'il y avait moyen de bricoler un PDF à partir de ces images (83 Jpg en 720x540x24 bits nommées Diapositive1.jpg, Diapositive2.jpg, etc. Diapositive83.jpg).

Aussitôt dit, aussitôt fait : voici donc le petit source PHP que j'ai pondu en quatrième vitesse :

<?php

require('../fpdf.php');

// mode paysage, a4, etc.

$pdf=new FPDF('L','mm','A4');
$pdf->Open();

// champs facultatifs

$pdf->SetAuthor('Hyperion - Ben Hermans');
$pdf->SetCreator('CygnusEd 4.21 & Fpdf');
$pdf->SetTitle('AmiWest AmigaOS 4 Presentation');
$pdf->SetSubject('Remix by bIgdAn');

// on charge les 83 gfx...

$pdf->SetMargins(0,0);
for ($i=1; $i<84; $i++) {
$pdf->AddPage();
$pdf->Image('Diapositive'.$i.'.JPG',0,0,297,210,'JPEG');
}

// Et on affiche le pdf généré... (ou on le sauvegarde en local)
// $pdf->Output(); pour afficher sur votre navigateur

$pdf->Output('amiwestpres_remix.pdf');

?>

Quelques explications

Ce script enregistré sous le nom amiwest.php, je l'ai posé sur mon serveur Apache (sous-répertoire /AmiWest JPegs/) avec les 83 Jpg obtenues via l'archive zip précédente.

require('../fpdf.php');

La première ligne intègre fpdf.php (situé dans la racine du site dans notre exemple).

$pdf=new FPDF('L','mm','A4');
$pdf->Open();

Ensuite, le constructeur FPDF indique que l'on crée un nouveau document PDF. Les paramètres (optionnels) servent à préciser l'orientation, l'unité de mesure et le format du document crée : dans notre exemple un document A4 en paysage (L pour Landscape, P pour Portrait) avec le mm en unité de mesure (pt : point, mm: millimètre, cm: centimètre, in : pouce). Par défaut, FPDF travail en A4 portrait et en mm.

Open() sert à indiquer que l'on va créer un fichier PDF (sans aucune page a ce moment, on verra un peu plus loin qu'il y a une fonction Addpage() appelée pour ajouter une page au document !).

$pdf->SetAuthor('Hyperion - Ben Hermans');
$pdf->SetCreator('CygnusEd 4.21 & Fpdf');
$pdf->SetTitle('AmiWest AmigaOS 4 Presentation');
$pdf->SetSubject('Remix by bIgdAn');

Vous l'avez compris ces lignes servent à fixer l'auteur, le titre, etc. du document PDF tels qu'ils apparaîtront dans ses propriétés. Ces 4 lignes sont donc facultatives. ;-)

$pdf->SetMargins(0,0);
for ($i=1; $i<84; $i++) {
$pdf->AddPage();
$pdf->Image('Diapositive'.$i.'.JPG',0,0,297,210,'JPEG');
}

La fonction SetMargins(0,0) fixe donc les marges du document à zéro. Ensuite, on effectue 83 fois la boucle suivante (compteur $i de 1 à 83) : ajouter une page au document PDF, intégrer ensuite l'image nommée Diapositive + $i + ".JPG" ('Diapositive1.JPG' quand $i est à 1, etc.) sur la page nouvellement crée en la redimensionnant en 297 x 210 mm (format A4) puis recommencer avec la page suivante.

$pdf->Output('amiwestpres_remix.pdf');

Comme le document est terminé, nous enregistrons (sur le serveur Web donc) le résultat dans le fichier "amiwestpres_remix.pdf" via la fonction Output(). Si nous avions remplacé cette ligne par $pdf->Ouput(); le PDF généré aurait directement été envoyé au navigateur utilisé pour visionner la page amiwest.php !

Par exemple sous AWeb 3.4, j'ai configuré le type Mime "APPLICATION/pdf" pour utiliser directement (l'application externe) Apdf avec le paramètre %f lorsqu'on rencontre un fichier de type PDF. La même opération est à réaliser (à moins que le réglage ne soit déjà effectué) si vous utilisez IBrowse ou Voyager.

Le fichier généré pèse 3,32 Mo (aucune compression utilisée) mais sera parfaitement lisible sous Apdf 68k. A noter que la qualité moyenne des images est à imputer directement au redimensionnement "sauvage" des Jpg 720x540 en 29,7 x 21 cm. Si nous avions disposé des images et du texte d'origine, nous aurions pu facilement générer un PDF lisible sur un maximum d'afficheurs de PDF et beaucoup plus léger (quelques dizaines de ko pour ce genre de documents) !

Aller plus loin avec FPDF

Ce petit article n'avait pour but que de vous présenter succinctement quelques-unes des nombreuses possibilités de FPDF. Avec un peu de pratique (il y a 7 tutoriels très progressifs et bien commentés livrés avec FPDF), vous maîtriserez rapidement les quelques dizaines de commandes FPDF qui vous permettront de gérer des tas de PDF en ligne (par exemple la liste des adhérents d'une association via une requête sur une base de données MySql, des planches d'étiquettes, des graphiques, tableaux, etc.). Si notre petit exemple vous a intéressé, vous pourrez retrouver prochainement un article plus complet (avec d'autres exemples) sur FPDF dans un prochain aMiGa=PoWeR si tout va bien et si j'ai quelques échos positifs sur cet article. ;-)


[Retour en haut] / [Retour aux articles]