PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Etiketten mit fpdf (http://www.selfphp.de/forum/showthread.php?t=24820)

Glare 06.01.2013 09:52:00

Etiketten mit fpdf
 
Hallo, ich habe vor ca. 1 Jahr ein kleines Script zum erzeugen von Etiketten mit fpdf geschrieben.
Nun möchte ich es optimieren und hoffe auf eure Hilfe.

Ich übergebe vorher per Formular die Anzahl der Etiketten und nun NEU die Nummer des ersten Etiketts (falls schon welche gedruckt wurden).
Die Anzahl der Etiketten auf einem Blatt ist immer gleich (3*9=27).

PHP-Code:

<?
require('fpdf.php');

$start=5;
$anzahl=62;
$etproseite=27;
$spalten=3;
$letztes=$start+$anzahl;

Erste Etikett soll nun Etikett 5 auf dem ersten Blatt sein. 62 Etiketten werden benötigt.

PHP-Code:

$seitenanzahl floor($letztes/$etproseite);
$etikettenrest $letztes $etproseite;

$endreihe floor($etikettenrest $spalten);     //Endreihe $y
$endspalte $etikettenrest $spalten;        //Endspalte $x
$startreihe floor($start $spalten);
$startspalte $start $spalten;

//Etikettenkoordinaten
$x = array(7.574140.5);
$y = array(15.344.974.5104.1133.7163.3192.9222.5252.1); 

Die jeweilige Startpunkte der Etiketten, Etikett 1 ist z.B. x=7.5 y=15.3 da das Etikettenpapier Ränder hat.

PHP-Code:

//PDF Grundeinstellungen
$pdf=new FPDF('P','mm','A4');
$pdf->SetMargins(0,0,0);
$pdf->SetAutoPageBreak('false',0);
$pdf->AddFont('Cooper');

$counter 0;

//Seiten erzeugen
for ($p 0;$p<=$seitenanzahl;$p++) {
$reihe 0;
$spalte=0;

//komplette Seite oder nur ein Teil?
if ($seitenanzahl $p){
$j 26;
}else{
$j $etikettenrest-1;
}

$pdf->AddPage();

//Etiketten generieren und mit Inhalt füllen
        
for ($i 0;$i<=$j;$i++) {
            
        
$pdf->SetXY($x[$spalte],$y[$reihe]);
        
$pdf->Write(10"Der Inhalt");

//Reihenwechsel
            
if($spalte !='2') {
            
$spalte++;
            }else{
            
$spalte=0;
            
$reihe++;
            }
            
        
$counter++;
        }
        


Ich versuche nun verzweifelt das mit Etikett 5 angefangen wird und nicht mit dem ersten, bekomme es aber einfach nicht hin.
Bin für jeden Tip dankbar!

Sascha

raiguen 08.01.2013 19:19:06

AW: Etiketten mit fpdf
 
Probier das mal so aus:
PHP-Code:

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

//-- einige Variablen
$etproseite 27;
$etanzahldruck 62;
$etstart 5;

//Etikettenkoordinaten
$x = array(7.574140.5); 
$y = array(15.344.974.5104.1133.7163.3192.9222.5252.1);   


//--Berechnung der Anfangsspalte und -reihe des ersten zu drucken Etikettes
      
$rest $etstart 3;
      
//--korrektur, wenn rest=0 
      
$spalte $rest==$rest+$rest-1;
      
$reihe = ($etstart $rest) / 3;
      
//--korrektur bei rest = 0
      
$reihe -= $rest 1;



//----------------------------------- PDF erstellen


$pdf=new FPDF('P','mm','A4');
$pdf->SetMargins(0,0,0);
$pdf->SetAutoPageBreak('false',0);
$pdf->SetFont('Arial');

$pdf->AddPage();

$counter $etstart;  //--Zaehler fuer zu druckende Etiketten pro seite
for ($et=0$et<$etanzahldruck;$et++)
{
//--drucken an angebener position
        
$pdf->SetXY($x[$spalte],$y[$reihe]);
        
$pdf->Write(10"Der Inhalt ".$et);

//Reihenwechsel
        
$spalte ++;
        if (
$spalte==3)
        {
          
$spalte 0;
          
$reihe ++;
        }

        
$counter++;
//--wenn max. Etikettenanzahl erreicht, dann Seitenwechsel
        
if ($counter == $etproseite)
        {
          
//--seitenwechsel
          
$pdf->AddPage();
          
$reihe 0;
          
$spalte 0;
          
$counter 0;
        }
}

$pdf->Output();
?>

Ansatz: Schleife über die Anzahl der zudruckenden Etiketten; Seiten werden neu generiert, wenn die max. Anzahl der auf eine Seite passenden Etiketten gedruckt wurde.
Vor Beginn des Druckes muss die Spalte und Reihe des ersten zu bedruckenden Etikettes berechnet werden; ebenso der Startwert für den Druckzähler ($counter).

Man kann übrigens auch auf die Koordinatenarrays verzichten:

PHP-Code:

...
//--feste Werte für die Ettiketten
      
$abstandlinks 7.5;
      
$abstandoben 15.3;
      
$breite 66.5;
      
$hoehe 29.6;
...

//--Berechnung der Anfangsspalte und -reihe wie im ersten Beispiel!

//-- In der Schleife dann
      
$x_start $abstandlinks $breite*($spalte);
      
$y_start $abstandoben $hoehe*($reihe);

       
$pdf->SetXY($x_start,$y_start);
... 


raiguen 09.01.2013 15:14:24

AW: Etiketten mit fpdf
 
Moin :)
hab mir nochmal ein paar Gedanken gemacht: statt der anfänglichen umständlichen Berechnung der Startreihe / -spalte des ersten zu druckenden Etikettes kann der Drucklauf über die Gesamtzahl der zu druckenden Etiketten+Anzahl der 'Leer'etiketten erfolgen:

'feste' Werte bzw zum Testen einige Variablenwerte
PHP-Code:

$etproseite 27;
$etanzahldruck 22;
$etstart 7;

//Etikettenkoordinaten
$x = array(7.574140.5);  //--breite bzw abstand=66.5
$y = array(15.344.974.5104.1133.7163.3192.9222.5252.1);   //--höhe bzw abstand= 29.6

//---Seitenrand links und rechts
$abstandlinks 7.5;
$abstandoben 15.3;
//--Breite/Hoehe des Etiketts
$breite 66.5;
$hoehe 29.6

Schleifendruchlauf mit Druckpositionsbestimmung anhand der Koordinaten-Arrays:
PHP-Code:

$spalte $reihe 0;
$counter 1//--ettikettenzähler pro seite
//--durchlauf ist Summe aus zu drucken Etiketten plus 'Leer'-lauf bis zur ersten zu druckenden Etikette auf der Seite
$durchlauf $etanzahldruck+$etstart;

for (
$et=1$et<$durchlauf;$et++)
{

        
///--nur ab Startettikett drucken!
        
if ($et >= $etstart)
        {
            
$pdf->SetXY($x($spalte),$y($reihe));
            
$etnr$et-$etstart;
            
$pdf->Cell(6528"Ettiket-Nr. $etnr \nReihe: $reihe  Spalte: $spalte \n Counter: $counter"10'L' );
        }
        
//Reihenwechsel
        
$spalte ++;
        if (
$spalte==3)
        {
          
$spalte 0;
          
$reihe ++;
        }

        
$counter++;
        if (
$counter $etproseite)
        {
          
//--seitenwechsel
          
$pdf->AddPage();
          
$reihe 0;
          
$spalte 0;
          
$counter 1;
        }
}
//endfor durchlauf 

Durchlauf mit Positionsberechnung 'on the fly'
PHP-Code:

$spalte $reihe 0;
$counter 1//--ettikettenzähler pro seite
//--durchlauf ist Summe aus zu drucken Etiketten plus 'Leer'-lauf bis zur ersten zu druckenden Etikette auf der Seite
$durchlauf $etanzahldruck+$etstart;

for (
$et=1$et<$durchlauf;$et++)
{

        
///--nur ab Startettikett drucken!
        
if ($et >= $etstart)
        {
            
//--Position berechnen
            
$x_start $abstandlinks $breite*($spalte);
            
$y_start $abstandoben $hoehe*($reihe);

            
$pdf->SetXY($x_start,$y_start);
            
$etnr$et-$etstart;
            
$pdf->Cell(6528"Ettiket-Nr. $etnr \nReihe: $reihe  Spalte: $spalte \n Counter: $counter"10'L' );
        }
        
//Reihenwechsel
        
$spalte ++;
        if (
$spalte==3)
        {
          
$spalte 0;
          
$reihe ++;
        }

        
$counter++;
        if (
$counter $etproseite)
        {
          
//--seitenwechsel
          
$pdf->AddPage();
          
$reihe 0;
          
$spalte 0;
          
$counter 1;
        }
}
//endfor durchlauf 



Alle Zeitangaben in WEZ +2. Es ist jetzt 16:14:23 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.