Avatar billede tvbrandt Nybegynder
22. april 2004 - 16:53 Der er 13 kommentarer og
2 løsninger

udskrift til labels

Jeg har en DB med en række personoplysninger. Ved hjælp af FPDF får jeg navn og adresse ud på labels. Men jeg kan kun få den til at udskrive én persons oplysninger. Jeg har pt lagt 3 personers oplysninger i DB'en. Jeg har sat en count() på som kommer ud med tallet 3. Så er det jo meningen at den skal udskrive de tre personers oplysninger på hver sin label. Men den skriver den sidst tilføjede person ud 3 gange.

Her er koden:
/*---------------
<?php
define('FPDF_FONTPATH','font/');
require_once('PDF_Label.php');

/*-------------------------------------------------
To create the object, 2 possibilities:
either pass a custom format via an array
or use a built-in AVERY name
-------------------------------------------------*/

// Etabler forbindelse til database
include('connect/dbconnect.php');

$sql = mysql_query("SELECT kolonne1, kolonne2 FROM tabelnavn WHERE ch=1 ORDER BY kolonne1 ASC") or die(mysql_error());
while($row = mysql_fetch_array($sql)){

$res= mysql_query("SELECT COUNT(*) FROM tabelnavn WHERE ch=1");
$antal = mysql_result($res,0);

$pdf = new PDF_Label('LJJR', 'mm', 1, 2);
$pdf->Open();
$pdf->AddPage();
//Print labels
for($i=0;$i<$antal;$i++)
    $pdf->Add_PDF_Label(sprintf("%s %s\n%s %s\n%s\n%s\n%s %s\n%s", "$row[kolonne1]", "$row[kolonne2]"));
}
$pdf->Output();
?>
---------------*/
Avatar billede tvbrandt Nybegynder
22. april 2004 - 16:55 #1
Rettelse i denne linie:
$pdf->Add_PDF_Label(sprintf("%s %s", "$row[kolonne1]", "$row[kolonne2]"));
Avatar billede taskmgr Nybegynder
22. april 2004 - 17:02 #2
Du laver en while(), som løber rækkerne i tabellen igennem (altså de tre stk.)

Funktionerne i din while() bliver altså udført for hver række du har. Prøv at sætte dit statement i for-løkken udenfor.
Avatar billede tvbrandt Nybegynder
22. april 2004 - 17:05 #3
kan du uddybe det ldt nærmere?
Avatar billede tvbrandt Nybegynder
22. april 2004 - 17:09 #4
Mener du noget i denne stil:

//Print labels
for($i=0;$i<$antal;$i++)
while($i<=$antal) {
    $pdf->Add_PDF_Label(sprintf("%s %s\n%s %s\n%s\n%s\n%s %s\n%s", "$row[kolonne1]", "$row[kolonne2]"));
$i++;
}
}
$pdf->Output();
?>
Avatar billede taskmgr Nybegynder
22. april 2004 - 17:12 #5
Jeg har aldrig rodet med PDF funktionerne, men prøv det her:

$sql = mysql_query("SELECT kolonne1, kolonne2 FROM tabelnavn WHERE ch=1 ORDER BY kolonne1 ASC") or die(mysql_error());
while($row = mysql_fetch_array($sql)){

$res= mysql_query("SELECT COUNT(*) FROM tabelnavn WHERE ch=1");
$antal = mysql_result($res,0);

$pdf = new PDF_Label('LJJR', 'mm', 1, 2);
$pdf->Open();
$pdf->AddPage();
$pdf->Add_PDF_Label(sprintf("%s %s\n%s %s\n%s\n%s\n%s %s\n%s", $row['kolonne1'], $row['kolonne2']));
$pdf->Output();
Avatar billede taskmgr Nybegynder
22. april 2004 - 17:14 #6
og så kan du se'følig fjerne:

$res= mysql_query("SELECT COUNT(*) FROM tabelnavn WHERE ch=1");
$antal = mysql_result($res,0);
Avatar billede tvbrandt Nybegynder
22. april 2004 - 17:15 #7
så udskriver den kun den sidst tilføjede, men kun én gang
Avatar billede taskmgr Nybegynder
22. april 2004 - 17:20 #8
Prøv at sætte $pdf->Output() efter din while-løkke i stedet.
Du laver tilsyneladende også en ny side pr. record
Avatar billede tvbrandt Nybegynder
22. april 2004 - 17:27 #9
$pdf->Output()
er da sat efter while-løkken
Avatar billede tvbrandt Nybegynder
22. april 2004 - 17:28 #10
Jeg er desværre nød til at slutte for i dag, men håber du vil kigge forbi med lidt flere forsøg i morgen, hvor jeg arbejder videre med dette. Tak for hjælpen til nu.
Avatar billede taskmgr Nybegynder
22. april 2004 - 17:30 #11
Nej, din while løkke ser sådan ud:

while($row = mysql_fetch_array($sql)){
  statement
  statement
  statement
  statement
  ...
} // her slutter din løkke

Må man se PDF_Label.php ? Jeg har lidt svært ved at gennemskue din kode, når jeg ikke kender de specifikke funktioner.
Avatar billede tvbrandt Nybegynder
23. april 2004 - 07:15 #12
<?php
////////////////////////////////////////////////////
// PDF_Label
// Copyright (C) 2003 Laurent PASSEBECQ (LPA)
// Based on code by Steve Dillon : steved@mad.scientist.com
//-------------------------------------------------------------------
/**
* PDF_Label - PDF label editing
* @package PDF_Label
* @author Laurent PASSEBECQ <lpasseb@numericable.fr>
* @copyright 2003 Laurent PASSEBECQ
**/

require_once('fpdf/fpdf.php');

class PDF_Label extends FPDF {

    // Private properties
    var $_Avery_Name    = '';                // Name of format
    var $_Margin_Left    = 0;                // Left margin of labels
    var $_Margin_Top    = 0;                // Top margin of labels
    var $_X_Space        = 0;                // Horizontal space between 2 labels
    var $_Y_Space        = 0;                // Vertical space between 2 labels
    var $_X_Number        = 0;                // Number of labels horizontally
    var $_Y_Number        = 0;                // Number of labels vertically
    var $_Width        = 0;                // Width of label
    var $_Height        = 0;                // Height of label
    var $_Char_Size        = 0;                // Character size
    var $_Line_Height    = 0;                // Default line height
    var $_Metric        = 'mm';                // Type of metric for labels.. Will help to calculate good values
    var $_Metric_Doc    = 'mm';                // Type of metric for the document
    var $_Font_Name        = 'Arial';            // Name of the font

    var $_COUNTX = 1;
    var $_COUNTY = 1;


    // Listing of labels size
    var $_Avery_Labels = array (
        '5160'=>array('name'=>'5160',    'paper-size'=>'letter',    'metric'=>'mm',    'marginLeft'=>1.762,    'marginTop'=>10.7,        'NX'=>3,    'NY'=>10,    'SpaceX'=>3.175,    'SpaceY'=>0,    'width'=>66.675,    'height'=>25.4,        'font-size'=>8),
        '5161'=>array('name'=>'5161',    'paper-size'=>'letter',    'metric'=>'mm',    'marginLeft'=>0.967,    'marginTop'=>10.7,        'NX'=>2,    'NY'=>10,    'SpaceX'=>3.967,    'SpaceY'=>0,    'width'=>101.6,        'height'=>25.4,        'font-size'=>8),
        '5162'=>array('name'=>'5162',    'paper-size'=>'letter',    'metric'=>'mm',    'marginLeft'=>0.97,        'marginTop'=>20.224,    'NX'=>2,    'NY'=>7,    'SpaceX'=>4.762,    'SpaceY'=>0,    'width'=>100.807,    'height'=>35.72,    'font-size'=>8),
        '5163'=>array('name'=>'5163',    'paper-size'=>'letter',    'metric'=>'mm',    'marginLeft'=>1.762,    'marginTop'=>10.7,        'NX'=>2,    'NY'=>5,    'SpaceX'=>3.175,    'SpaceY'=>0,    'width'=>101.6,        'height'=>50.8,        'font-size'=>8),
        '5164'=>array('name'=>'5164',    'paper-size'=>'letter',    'metric'=>'in',    'marginLeft'=>0.148,    'marginTop'=>0.5,        'NX'=>2,    'NY'=>3,    'SpaceX'=>0.2031,    'SpaceY'=>0,    'width'=>4.0,        'height'=>3.33,        'font-size'=>12),
        '8600'=>array('name'=>'8600',    'paper-size'=>'letter',    'metric'=>'mm',    'marginLeft'=>7.1,        'marginTop'=>19,        'NX'=>3,    'NY'=>10,    'SpaceX'=>9.5,        'SpaceY'=>3.1,    'width'=>66.6,        'height'=>25.4,        'font-size'=>8),
        'L7163'=>array('name'=>'L7163',    'paper-size'=>'A4',        'metric'=>'mm',    'marginLeft'=>5,        'marginTop'=>15,        'NX'=>2,    'NY'=>7,    'SpaceX'=>25,        'SpaceY'=>0,    'width'=>99.1,        'height'=>38.1,        'font-size'=>9),
        'LJJR'=>array('name'=>'LJJR',    'paper-size'=>'A4',        'metric'=>'mm',    'marginLeft'=>5,        'marginTop'=>5,        'NX'=>3,    'NY'=>8,    'SpaceX'=>0,        'SpaceY'=>0,    'width'=>70,        'height'=>38.2,        'font-size'=>9)
    );

    // convert units (in to mm, mm to in)
    // $src and $dest must be 'in' or 'mm'
    function _Convert_Metric ($value, $src, $dest) {
        if ($src != $dest) {
            $tab['in'] = 39.37008;
            $tab['mm'] = 1000;
            return $value * $tab[$dest] / $tab[$src];
        } else {
            return $value;
        }
    }

    // Give the height for a char size given.
    function _Get_Height_Chars($pt) {
        // Array matching character sizes and line heights
        $_Table_Hauteur_Chars = array(6=>2, 7=>2.5, 8=>3, 9=>4, 10=>5, 11=>6, 12=>7, 13=>8, 14=>9, 15=>10);
        if (in_array($pt, array_keys($_Table_Hauteur_Chars))) {
            return $_Table_Hauteur_Chars[$pt];
        } else {
            return 100; // There is a prob..
        }
    }

    function _Set_Format($format) {
        $this->_Metric        = $format['metric'];
        $this->_Avery_Name    = $format['name'];
        $this->_Margin_Left    = $this->_Convert_Metric ($format['marginLeft'], $this->_Metric, $this->_Metric_Doc);
        $this->_Margin_Top    = $this->_Convert_Metric ($format['marginTop'], $this->_Metric, $this->_Metric_Doc);
        $this->_X_Space    = $this->_Convert_Metric ($format['SpaceX'], $this->_Metric, $this->_Metric_Doc);
        $this->_Y_Space    = $this->_Convert_Metric ($format['SpaceY'], $this->_Metric, $this->_Metric_Doc);
        $this->_X_Number    = $format['NX'];
        $this->_Y_Number    = $format['NY'];
        $this->_Width        = $this->_Convert_Metric ($format['width'], $this->_Metric, $this->_Metric_Doc);
        $this->_Height        = $this->_Convert_Metric ($format['height'], $this->_Metric, $this->_Metric_Doc);
        $this->Set_Font_Size($format['font-size']);
    }

    // Constructor
    function PDF_Label ($format, $unit='mm', $posX=1, $posY=1) {
        if (is_array($format)) {
            // Custom format
            $Tformat = $format;
        } else {
            // Avery format
            $Tformat = $this->_Avery_Labels[$format];
        }

        parent::FPDF('P', $Tformat['metric'], $Tformat['paper-size']);
        $this->_Set_Format($Tformat);
        $this->Set_Font_Name('Arial');
        $this->SetMargins(0,0);
        $this->SetAutoPageBreak(false);

        $this->_Metric_Doc = $unit;
        // Start at the given label position
        if ($posX > 1) $posX--; else $posX=0;
        if ($posY > 1) $posY--; else $posY=0;
        if ($posX >=  $this->_X_Number) $posX =  $this->_X_Number-1;
        if ($posY >=  $this->_Y_Number) $posY =  $this->_Y_Number-1;
        $this->_COUNTX = $posX;
        $this->_COUNTY = $posY;
    }

    // Sets the character size
    // This changes the line height too
    function Set_Font_Size($pt) {
        if ($pt > 3) {
            $this->_Char_Size = $pt;
            $this->_Line_Height = $this->_Get_Height_Chars($pt);
            $this->SetFontSize($this->_Char_Size);
        }
    }

    // Method to change font name
    function Set_Font_Name($fontname) {
        if ($fontname != '') {
            $this->_Font_Name = $fontname;
            $this->SetFont($this->_Font_Name);
        }
    }

    // Print a label
    function Add_PDF_Label($texte) {
        // We are in a new page, then we must add a page
        if (($this->_COUNTX ==0) and ($this->_COUNTY==0)) {
            $this->AddPage();
        }

        $_PosX = $this->_Margin_Left+($this->_COUNTX*($this->_Width+$this->_X_Space));
        $_PosY = $this->_Margin_Top+($this->_COUNTY*($this->_Height+$this->_Y_Space));
        $this->SetXY($_PosX+3, $_PosY+3);
        $this->MultiCell($this->_Width, $this->_Line_Height, $texte);
        $this->_COUNTY++;

        if ($this->_COUNTY == $this->_Y_Number) {
            // End of column reached, we start a new one
            $this->_COUNTX++;
            $this->_COUNTY=0;
        }

        if ($this->_COUNTX == $this->_X_Number) {
            // Page full, we start a new one
            $this->_COUNTX=0;
            $this->_COUNTY=0;
        }
    }

}
?>
Avatar billede tvbrandt Nybegynder
23. april 2004 - 07:19 #13
Ved ikke lige om du kan få noget ud af ovenstående kode.
Mht "$pdf->Output()". Er det mig der har totalt misforstået hvor while-løkken slutter? Her er det som jeg ser det:

while($row = mysql_fetch_array($sql)){ //her starter løkken
statement
statement
} //her slutter løkken
$pdf->Output();
?>
---------------*/

Kommer igen en gang efter frokost
Avatar billede s_friis Nybegynder
26. april 2004 - 22:14 #14
$sql = mysql_query("SELECT kolonne1, kolonne2 FROM tabelnavn WHERE ch=1 ORDER BY kolonne1 ASC") or die(mysql_error());

$pdf = new PDF_Label('LJJR', 'mm', 1, 2);
$pdf->Open();
$pdf->AddPage();

//Print labels
while($row = mysql_fetch_array($sql)){
    $pdf->Add_PDF_Label(sprintf("%s %s", "$row[kolonne1]", "$row[kolonne2]"));
}
$pdf->Output();
Avatar billede tvbrandt Nybegynder
27. april 2004 - 07:08 #15
Kanon - det virker. Tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester