Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > PHP > PHP-Programmierung > FPDF 3 Klassen für 3 Dokumente-Arten
Antwort
 
Themen-Optionen
Alt 20.02.2006, 18:14   Nach oben    #1
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 274
Standard FPDF 3 Klassen für 3 Dokumente-Arten

Nun ja wie im letzten Thread geschrieben benutz ich nun FPDF.

Ich möchte eine Art Dokument Stapel machen mit verschiedenen Dokumenten diese werden. Jedes Dokument-Art hat einen anderen Header, Footer. Mein Ansatz wäre nun gewesen ein ein pdf Objekt zu machen also quasi der Stapel, dann reicht man diesen Stapel an jede Dokument art durch wo auf den Stapel dann die verschiedenen Methoden angewandt werden...nun ja hier ist mal ein bisschen Code. Mein Code ist recht planlos.

PHP-Code:
  class my_pdf extends FPDF {
        public function 
__construct() {
            
parent :: __construct();
            
$this->AddFont('''''font.php');
        }
    }

    class 
white_page extends FPDF {
        public function 
__construct($folder) {
            
parent :: __construct();
            
$folder->Cell(05'Hallo'01);
        }
    }
}
    
define('FPDF_FONTPATH''fpdf/');
    
$invoicefolder = new my_pdf();
    
$invoicefolder = new white_page($invoicefolder);
    
    
$invoicefolder->Output(); 
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.02.2006, 23:12   Nach oben    #2
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 588
Standard

Zitat:
Mein Code ist recht planlos
Hmm, irgendwie kann ich den Sinn nicht ganz erkennen, was du damit erreichen willst.

Zitat:
eine Art Dokument Stapel
Habe ein sau langen Tag hinter mir, aber wie ist das nun gemeint ?
Mehrere PDF-Dokumente, oder nur ein PDF-Dokument aber mit unterschiedlichen Header und Footer ?
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.02.2006, 09:04   Nach oben    #3
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 274
Standard

oh da ist der der sich auskennt das ist gut.

Ein PDF Dokument was aus mehreren Seiten besteht aber jede Seite kann völlig anders sein. Davon gibt es 3 Varianten.

Mir ist noch gekommen vielleicht eine Klasse zu machen mit 3 Methoden welche je nach Aufrauf ein dementsprechendes Blatt erzeugt in dieser Funktion wären auch Header und Footer.

Nebenbei noch erwähnt, hast du einen Schnipsel oder ähnliches parat wie ich einen Strich für den Locher machen mit Line() ?

Geändert von ex³ (21.02.2006 um 09:15 Uhr).
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.02.2006, 10:05   Nach oben    #4
Erfahrener Benutzer
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Hast du vieleicht danach gesucht
http://www.professionelle-softwareen...decorator.html

PHP-Code:
<?php
abstract class PDF_CommonStyle
{
    private 
$fpdf;

    public function 
__construct(FPDF $fpdf)
    {
        
$this->fpdf $fpdf;
        
$this->setStyles();
    }

    abstract protected function 
Header();
    abstract protected function 
Footer();
    abstract public function 
setStyles();

    public function 
setPdf(FPDF $fpdf)
    {
        
$this->fpdf $fpdf;
    }
    
    public function 
getPdf()
    {
        return 
$this->fpdf;
    }

    public function 
SetY($y)
    {
        
$this->fpdf->SetY($y);
    }

    public function 
SetX($x)
    {
        
$this->fpdf->SetX($x);
    }
    
    public function 
SetFont($family$style ''$size=0)
    {
        
$this->fpdf->SetFont($family$style$size); 
    }
    
    public function 
Image($file$x$y$w 0$h 0$type ''$link '')
    {
        
$this->fpdf->Image($file$x$y$w$h$type$link);
    }
    
    
//u.s.w. ...
}

class 
PDF_FistStyle extends PDF_CommonStyle
{

    public function 
setStyles()
    {
        
$this->SetFont('Arial'''16);
    }

    protected function 
Heder()
    {
        
$this->Image('logo_pb.png',10,8,33);
        
$this->SetFont('Arial','B',15);
        
$this->Cell(80);
        
$this->Cell(30,10,'Title',1,0,'C');
        
$this->Ln(20);
    }

    protected function 
Footer()
    {
        
$this->SetY(-15);
        
$this->SetFont('Arial','I',8);
        
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
    }    
}


class 
PDF_SecondStyle extends PDF_CommonStyle
{
    
//..
}

$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->AddPage();

$firstPdfStyle = new PDF_FistStyle($pdf);
$secondPdfStyle = new PDF_SecondStyle($pdf);

$firstPdfStyle->setStyles();
$firstPdfStyle->Cell(05'Hallo'01);

$pdf->AddPage();

$secondPdfStyle->setStyles();
$secondPdfStyle->Cell(05'Hallo'01);
?>
__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)
dejan_spasic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.02.2006, 11:44   Nach oben    #5
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 588
Standard

Wozu neue Klassen bauen, wenn vieles schon Bestandteil bei FPDF ist ?

Zitat:
public function SetX($x)
{
$this->fpdf->SetX($x);
}
Wozu das hier ?
Was soll das bringen ?

Zitat:
Ein PDF Dokument was aus mehreren Seiten besteht aber jede Seite kann völlig anders sein.
Dazu muss man nichts neues Erfinden

Beispiel:

Nehmen wir an, wir wollen unterschiedliche Footer:
http://www.cix88.de/cix_pdf/pdf_fpdf/cix_tut_033.php

Und mit diesem Prinzip, können auch unterschiedliche Header und/oder Inhalte erzeugt werden.

Geändert von CIX88 (21.02.2006 um 11:48 Uhr).
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.02.2006, 11:46   Nach oben    #6
Erfahrener Benutzer
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Zitat:
Problem
Objekte sollen dynamisch um Funktionalität erweitert werden können, ohne die zugehörige Klasse durch Unterklassenbildung statisch erweitern zu müssen.
Motivation
Oft kommt es vor, dass man die Funktionalität eines Objektes dynamisch und transparent erweitern oder verändern möchte. Dem statischen Ansatz der Erweiterung der Klassenhierarchie um entsprechende Unterklassen ist meist eine objektbasierte Lösung vorzuziehen. Hierbei kann die Funktionalität verschiedener Objekte durch lose Kopplung zur Laufzeit "zusammengesteckt" werden.
Lösung
Die erweiterte oder veränderte Funktionalität wird in einem so genannten Dekorierer-Objekt modelliert, das dieselbe Schnittstelle wie das zu dekorierende Objekt anbietet. Dies erlaubt die transparente Benutzung des Dekorierer-Objekts durch Verwender des ursprünglichen Objektes. Das Dekorierer-Objekt leitet Methodenaufrufe zur Ausführung an das aggregierte, zu dekorierende Objekt weiter und kann seine zusätzliche Funktionalität vor oder nach diesem Methodenaufruf ausführen.
Quelle: http://www.professionelle-softwareen...decorator.html

[EDIT]
Zitat:
Dazu muss man nichts neues Erfinden
Ich habe nichts neues erfunden. Ich habe was erweitert

Was würde passieren, wenn sich später mal raustellet, dass der Font vom Footer/Header sowie die Schriftgrösse des Inahlts, für jedes "Blatt", geändert werden muss. Da müsste man, in deinen Beispiel, an meheren Stellen Ändernungen durchführen, was anfällliger für Fehler ist. Ausserdem verstößt es gegen das DRY (Dont Reapet Yourself) Primzip.

Man könnte die __call() Methode verwenden. Aber ich bin nicht der Fan von.
__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)

Geändert von dejan_spasic (21.02.2006 um 12:12 Uhr).
dejan_spasic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.02.2006, 13:17   Nach oben    #7
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 588
Standard

Zitat:
Was würde passieren, wenn sich später mal raustellet, dass der Font vom Footer/Header sowie die Schriftgrösse des Inahlts, für jedes "Blatt", geändert werden muss
Muss es doch garnicht.
Da man dies schon in der Funktion von Header und Footer macht.
Es sei denn man will absichtlich unterschiedliche Fonts oder Schriten benutzen.

Zitat:
Da müsste man, in deinen Beispiel, an meheren Stellen Ändernungen durchführen
Hmmm, ich muss das nicht
Schau dir doch mal alle PDF-Beispiele an.

Sehe kein Grund die bisherige Klasse von FPDF noch mehr aufzublähen.
Wenn sich vorher im klaren ist, was man genau machen will, geht das auch.

Die bisherige und eigentliche Klasse ist schon gut, da muss man nicht z.B. für SetX() noch eine Funktion schreiben, wenn diese schon vorhanden ist

Und bestimmte Dinge müssen ab und zu für jede Seite neu erstellt werden.
Da wird dir deine Methode nicht wirklich helfen.

Aber ich will dir da nicht reinreden, mach wie denkst.
Wenns irgenwann nicht läuft, melde dich einfach
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.02.2006, 14:46   Nach oben    #8
Erfahrener Benutzer
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Zitat:
Zitat von CIX88
Wenns irgenwann nicht läuft, melde dich einfach
Yo mach ich
__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)
dejan_spasic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.02.2006, 18:43   Nach oben    #9
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 274
Standard

Zitat:
Ein PDF Dokument was aus mehreren Seiten besteht aber jede Seite kann völlig anders sein.
Gesetz den Fall ich habe in einer Tabelle eine Art Dokumentstapel. Jeder Datensatz hat eine DocID was es für eine Dokument art ist und ein Feld mit einem Wert der möglicherweise als Parameter benutzt wird um das Dokument zu erstellen (Jahreszahl, Betrag oder nichts)

Hat ein ein Datensatz eine 0 dann ist es ein leeres Blatt. Hat der Datensatz eine 1 ist es eine Rechnung mit einer Rechnungsnummer.

Demensprechend wird aus jedem Datensatz in diesem Stapel ein Blatt gemacht was dann per AddPage() an das PDF gehängt wird. Problem war beispielsweise das mit dem Header() o. Footer() da der auch auf der leeren Seite angezeigt wird.

Habs jetzt so und es funktioniert recht gut und ich hab alles auf einen Blick. Nach dem erzeugen des Dokuments wird per foreach der Dokumentstapel durchlaufen. doc_header(); ist mein Header() ersatz, weil wenn ich den setze hab ich auf den leeren Seiten ja den Header drauf...und das is papierverschwendung. Ist eher für die Orientierung.


PHP-Code:
    public function add_white_page() {
        
$this->AddPage();
    }

    public function 
add_doc_a($number) {
        
$this->AddPage();
        
$this->doc_header();
        
$this->doc_footer();
    }

    public function 
add_doc_b($year) {
        
$this->AddPage();
        
$this->doc_header();
        
$this->doc_footer();
    } 
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.02.2006, 19:15   Nach oben    #10
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 588
Standard

Zitat:
Hat ein ein Datensatz eine 0 dann ist es ein leeres Blatt. Hat der Datensatz eine 1 ist es eine Rechnung mit einer Rechnungsnummer.
Ja sowas ähnliches benutze ich auch, nur etwas edler als in den Beispielen bei mir zu sehen.
Auch Header und Footer sind unterschiedlich, allerdings ist es auch für PHP4 verwendbar

Ok, wenn alles geht ist ja der Fall abgeschlossen
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

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.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
alle Klassen eines Packages ermitteln ehli75 Allgemeine Java-Programmierung 3 16.12.2005 13:30
PropertyChangeEvent etc. auch für Klassen, die keine Beans sind? NewYork Allgemeine Java-Programmierung 2 23.11.2005 00:07
klassen dokumentation automatisieren beny_mcde Tools, Server, Betriebssysteme 4 19.10.2005 20:03
Performanceeinbusen beim Laden von Klassen? Gottzilla Allgemeine Java-Programmierung 4 15.08.2005 02:08
MVC Programmierung nur mit Klassen mit UI Endung? Java17 Desktop-Applikationen und Grafik 5 14.03.2005 17:12


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

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44