Boucle PHP/MySQL avec librairie FDPF

Bonjour à tous,
Je tente vainement de faire une boucle dans une requête mySQL du style while ($i < mysql_num_fields($result1)) { etc }.
Je suis parti du célèbre exemple de devis/facture de Xavier Nicolay basé sur la librairie FDPF et mon objectif est d'imprimer plusieurs factures à la suite. Merci de votre aide..

Voici le code en question :

<?php
// (c) Xavier Nicolay
// Exemple de génération de devis/facture PDF

define('FPDF_FONTPATH','font/');
require('invoice.php');

$pdf = new INVOICE( 'P', 'mm', 'A4' );
$pdf->Open();

// ajout perso //

$link = mysql_connect("localhost", "root", "")
or die("Impossible de se connecter");
mysql_select_db("tartampion") or die("Could not select database");

$query1 = "SELECT * FROM invoice";
$result1 = mysql_query($query1) or die("Query failed");

$i = 0;
while ($i < mysql_num_fields($result1)) {

// fin d'ajout perso //

$pdf->AddPage();

// ajout perso //

while ($line = mysql_fetch_assoc($result1)) {

$date = $line['date'] ;
$codecli = $line['code_client'] ;
$numfact = $line['num_facture'] ;
$adrfact = $line['adr_fact'] ;
$modreglt = $line['mod_reglt'] ;
$ech = $line['echeance'] ;
$TVA = $line['TVA'] ;
$enref = $line['enref'] ;
$coderef = $line['code_ref'] ;

// fin d'ajout perso //

$pdf->addSociete( "Tartampion SA",
"avenue de la paix\n" .
"75000 Paris\n".
"\n";
$pdf->fact_dev( "FACTURE ", $numfact );
$pdf->temporaire( "" );
$pdf->addDate($date);
$pdf->addClient($codecli);
$pdf->addPageNumber("1");
$pdf->addClientAdresse($adrfact);
$pdf->addReglement($modreglt);
$pdf->addEcheance($ech);
$pdf->addNumTVA($TVA);
$pdf->addReference($enref);
$cols=array( "REFERENCE" => 23,
"DESIGNATION" => 78,
"QUANTITE" => 22,
"P.U. HT" => 26,
"MONTANT H.T." => 30,
"TVA" => 11 );
$pdf->addCols( $cols);
$cols=array( "REFERENCE" => "L",
"DESIGNATION" => "L",
"QUANTITE" => "C",
"P.U. HT" => "R",
"MONTANT H.T." => "R",
"TVA" => "C" );
$pdf->addLineFormat( $cols);
$pdf->addLineFormat($cols);

$y = 109;
$line = array( "REFERENCE" => $coderef ,
"DESIGNATION" => "Commissions\n" .
"\n" .
"- fre 1001707\n" .
"- fre 1001689\n" .
"- fre 1001681\n" ,
"QUANTITE" => "1",
"P.U. HT" => "335.99",
"MONTANT H.T." => "335.99",
"TVA" => "0" );
$size = $pdf->addLine( $y, $line );
$y += $size + 2;

$pdf->addCadreTVAs();

// invoice = array( "px_unit" => value,
// "qte" => qte,
// "tva" => code_tva );
// tab_tva = array( "1" => 19.6,
// "2" => 5.5, ... );
// params = array( "RemiseGlobale" => [0|1],
// "remise_tva" => [1|2...], // {la remise s'applique sur ce code

TVA}
// "remise" => value, // {montant de la remise}
// "remise_percent" => percent, // {pourcentage de remise sur ce

montant de TVA}
// "FraisPort" => [0|1],
// "portTTC" => value, // montant des frais de ports TTC
// // par defaut la TVA = 19.6 %
// "portHT" => value, // montant des frais de ports HT
// "portTVA" => tva_value, // valeur de la TVA a appliquer sur

le montant HT
// "AccompteExige" => [0|1],
// "accompte" => value // montant de l'acompte (TTC)
// "accompte_percent" => percent // pourcentage d'acompte (TTC)
// "Remarque" => "texte" // texte
$tot_prods = array( array ( "px_unit" => 335.99, "qte" => 1, "tva" => 0 ),
array ( "px_unit" => 0, "qte" => 1, "tva" => 1 ));
$tab_tva = array( "1" => 19.6,
"2" => 5.5);
$params = array( "RemiseGlobale" => 0,
"remise_tva" => 0, // {la remise s'applique sur ce code TVA}
"remise" => 0, // {montant de la remise}
"remise_percent" => 10, // {pourcentage de remise sur ce montant

de TVA}
"FraisPort" => 1,
"portTTC" => 0, // montant des frais de ports TTC
// par defaut la TVA = 19.6 %
"portHT" => 0, // montant des frais de ports HT
"portTVA" => 19.6, // valeur de la TVA a appliquer sur le

montant HT
"AccompteExige" => 0,
"accompte" => 0, // montant de l'acompte (TTC)
"accompte_percent" => 15, // pourcentage d'acompte (TTC)
"Remarque" => "exonération de TVA : art. 259 A-6° du CGI" );

$pdf->addTVAs( $params, $tab_tva, $tot_prods);
$pdf->addCadreEurosFrancs();
$pdf->Output();

}

$i++ ;
}

?>
Configuration: Windows XP
Internet Explorer 6.0

7 réponses

  1. J'avais le même problème pour faire un publipostage à partir d'un fichier. J'avais un code php qui permettait d'obtenir 1 pdf pour 1 fiche. J'ai fais une boucle pour faire un publipostage et 1 seul fiche sortait.
    J'ai remarque que dès qu'il y a une erreur le pdf est impossible (ex : mauvais index ...).
    J'ai augmenté le buffer memoire.

    ini_set("memory_limit",'64M');

    et j'ai ajouté le code suivant

    class PDF extends FPDF
    {
    }

    Maintenant, je peux faire un pdf de 200 pages a partir d'un fichier.
    Je tiens mon code à dispo.
    @+
    1. Ca m'intéresse toujours. Si tu peux m'envoyer ton fichier, merci d'avance !!!
    2. Moi aussi ca m'interesse, si qqun a ce script, merci.
  2. Non , j'ai l'impression que cette librairie n'est pas étudiée pour permettre ce genre de chose. Mais si vous trouvez de votre côté, merci de laisser un message ici

    Bon courage
    1. Bonjour,

      Par hasard, auriez-vous trouvé une solution pour imprimer plusieurs factures dans le même pdf avec fpdf?
      Merci d'avance.

      Ju
      1. Un print mysql_num_fields($result1); donne 10, ensuite FPDF plante... Je pense que ce qui complique l'affaire, c'est cette librairie FPDF qui gère la sortie en PDF avec le $pdf->Output(); Une fois que la ligne output est passée, il y a certainement un problème pour boucler. Mais une boucle avant le output génère une erreur.
        1. et si tu fai un
          print mysql_num_fields($result1);
          il te dis quoi ?

          sinon après il y a la solution de mettre un count dans ta requete.
          1. Je n'arrive qu'à produire une seule facture à la fois... Le premier while : while ($i < mysql_num_fields($result1)) est inopérant et pourrait aussi bien disparaître, ça ne change rien.

            Si je change la place du $pdf->Output(); pour l'intercaler entre les } en bas de la page de code, ce n'est pas bon du tout.

            J'ai essayé avec autre chose que mysql_num_fields, mais rien ne marche ???