CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
06.01.2013, 09:52:00
|
Anfänger
|
|
Registriert seit: Feb 2003
Ort: Emsdetten
Alter: 48
Beiträge: 38
|
|
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.5, 74, 140.5);
$y = array(15.3, 44.9, 74.5, 104.1, 133.7, 163.3, 192.9, 222.5, 252.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
|
08.01.2013, 19:19:06
|
Anfänger
|
|
Registriert seit: Jul 2011
Alter: 71
Beiträge: 30
|
|
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.5, 74, 140.5);
$y = array(15.3, 44.9, 74.5, 104.1, 133.7, 163.3, 192.9, 222.5, 252.1);
//--Berechnung der Anfangsspalte und -reihe des ersten zu drucken Etikettes
$rest = $etstart % 3;
//--korrektur, wenn rest=0
$spalte = $rest==0 ? $rest+2 : $rest-1;
$reihe = ($etstart - $rest) / 3;
//--korrektur bei rest = 0
$reihe -= $rest ? 0 : 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);
...
Geändert von raiguen (08.01.2013 um 19:29:53 Uhr)
|
09.01.2013, 15:14:24
|
Anfänger
|
|
Registriert seit: Jul 2011
Alter: 71
Beiträge: 30
|
|
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.5, 74, 140.5); //--breite bzw abstand=66.5
$y = array(15.3, 44.9, 74.5, 104.1, 133.7, 163.3, 192.9, 222.5, 252.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(65, 28, "Ettiket-Nr. $etnr \nReihe: $reihe Spalte: $spalte \n Counter: $counter", 1, 0, '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(65, 28, "Ettiket-Nr. $etnr \nReihe: $reihe Spalte: $spalte \n Counter: $counter", 1, 0, 'L' );
}
//Reihenwechsel
$spalte ++;
if ($spalte==3)
{
$spalte = 0;
$reihe ++;
}
$counter++;
if ($counter > $etproseite)
{
//--seitenwechsel
$pdf->AddPage();
$reihe = 0;
$spalte = 0;
$counter = 1;
}
}//endfor durchlauf
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 14:49:12 Uhr.
|