> Bayes > CopixEventResponse > Actions > CopixZone > CopixCSV > Anti_Spam > CopixForms > PDFGenerator
fr

Introduction à pdfgenerator

Le module pdfgenerator (pour le moment dans devel/tools/pdfgenerator) permet la création de fichier PDF sans utiliser d'extension PHP. Ce module utilise les classes FPDF et HTML2PDF.

Cela dit, la CopixTeam a étendu et surchargé ces deux classes afin d'y apporter des corrections non négligeables.

Ce module permet de créer des PDF soit en spécifiant des appels de méthode de placement d'éléments dans une page, soit en utilisant le système de transformation de HTML vers PDF. Attention, n'espérez pas pouvoir générer un PDF qui est la réplique exacte d'une page web, ce système est en fait une simplification de création de fichier PDF en passant par une syntaxe HTML.

La plupart des balises sont supporté, et certains attributs CSS peuvent fonctionner, notamment:

Les liens fonctionnent aussi et les images sont correctement supportées.

Créer un document

La procédure est assez simple:


$pdf = _ioClass('pdfgenerator|pdfgenerator');

//on ajoute une page, la première page donc...
$pdf->newPage();

//on y insère du HTML:
$pdf->setHtml('<strong>Hello</strong> the World');

//on retourne le document:
return _arContent($pdf->getBuffer(),array(
    "content-type"=>CopixMIMETypes::getFromExtension("pdf"),
    "filename"=>'Mon super test.pdf'
));       

 

Le pdf généré et envoyé au navigateur contient une page avec une phrase: "Hello the world".

Modifier les entêtes et pieds de page

Il est possible de générer une entête et/ou un pied de page automatique. Dans ce cas, il faut dériver la classe pour définir les méthode Header et Footer.

Attention, cette fonctionnalité est expérimentale et risque de ne pas fonctionner


CopixClassesFactory::fileInclude('pdfgenerator|pdfgenerator');
class MyPDF extends PDFGenerator {
    public function Header(){
        //Arial bold 16
        $this->SetFont('Arial','B',16);
        //On va à droite
        $this->Cell(80);
        //On écrit le titre en souligné
        $this->SetStyle('U',true);
        $this->Cell(30,10,$this->title,0,0,'C');
        $this->SetStyle('U',false);
        //Nouvelle ligne sur 20 pixels
        $this->Ln(20);
        //Et on revient à la police normale
        $this->SetFont('Arial','',11);
    }
   
    public function Footer() {
        //Position at 1.0 cm from bottom
        $this->SetY(-10);       
        //Arial italic 9
        $this->SetFont('Arial','I',9);
        //Numéro de page, utilise le template tag {nb} de FPDF
        $this->Cell(0,10,$this->PageNo().'/{nb}',0,0,'C');
        //Revenir à la police normal
        $this->SetFont('Arial','',11)
    }   
   
}
 

De ce fait, en utilisant MyPDF de la même manière que pdfgenerator, un entête va être imprimé dans la page.