Obligement - L'Amiga au maximum

Lundi 20 novembre 2017 - 02:43  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

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

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


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


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


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


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 freeware 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 freeware 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]