2017-12-20 2 views
2
$ this-> pdf von Funktionen innerhalb Klasse aufrufen

Die Idee ist, wie folgt, eine Erstellung von PDF-Dateien ein wenig sauberer zu machen, soll ich eine Fabrik/Abstract-Klasse erstellen, wird eine Reihe von vordefinierten Funktionen wie soPDFLib-Fabrik. Fehler beim

class AbstractPDF{ 

    protected $pdf; 
    protected $searchpath; 

    public function __construct(){ 

     $this->pdf = PDF_new(); 
     $this->searchpath = "fonts/"; 

     pdf_set_option($this->pdf,"errorpolicy=return"); 

     pdf_set_option($this->pdf,"searchpath={" . $this->searchpath . "}"); 

     pdf_set_option($this->pdf,"stringformat=utf8"); 

    } 

    protected function startAFourPage(){ 

     pdf_begin_page_ext($this->pdf, 0, 0, "width=a4.width height=a4.height"); 
       } 



    /* When setting up any of the PDF content types, one should */ 
    /* remember that in PDFLib, x=>y axis start with 0(zero) at */ 
    /* lower left corner.          */ 
    /* The text line is set up in space by setting up the  */ 
    /* coordinates of the lower left corner and then providing */ 
    /* height and width of the object as separate values  */ 



protected function setupTextLine($xcoordinate, $ycoordinate, $width, $height, 
         $fontName, $fontEncoding, $fontSize, $text, $textPosition = "left"){ 

     //adding text directly through the PDFLib documentation 
     $font = PDF_load_font($this->pdf, $fontName, $fontEncoding, ""); 
     PDF_setfont($this->pdf, $font, $fontSize); 
     //PDF_set_text_pos($this->pdf, 25, 650); 
     //PDF_show($this->pdf, $text); 
     PDF_fit_textline ($this->pdf, $text, 111, 744, "boxsize {".$width." ".$height."} position=left"); 

    } 


    /* When setting up any of the PDF content types, one should */ 
    /* remember that in PDFLib, x=>y axis start with 0(zero) at */ 
    /* lower left corner.          */ 
    /* The text flow is set up by providing the coordinate for */ 
    /* lower left corner and upper right, as a rule.   */ 
    /* But overall PDFLib will placed it by coordinates for  */ 
    /* two corners diagonal to each other.      */ 
    /* For this class we will identify these corners as   */ 
    /* lowLeft and upperRight         */ 


protected function setupMultilineTextflow($lowLeftX, $lowLeftY, $upperRightX, $upperRightY, 
         $fontName, $fontEncoding, $fontSize, $text){ 

     $orderDetails = 'Datum: 
     Auftrags-NR: 
     Auftragsname: 
     Kunden-Nr:'; 

     $textFlow = PDF_create_textflow($this->pdf, $text, 
        "fontname=".$fontName." 
        fontsize=".$fontSize." 
        encoding=".$fontEncoding); 
     PDF_fit_textflow($this->pdf, $textFlow3, $lowLeftX, $lowLeftY, $upperRightX, $upperRightY,""); 

    } 

    protected function setupTable($headers=array('test'=>''), array $field){   
       } 

} 
?> 

Diese Klasse wird von einem folgenden

class PDF extends AbstractPDF{ 

    public function __construct(){ 

     parent::__construct(); 

     parent::startAFourPage(); 

    } 

    public function generateContent(){ 

     return ""; 

    } 


} 
genannt

ich entschuldige mich so viel Code für zu haben, aber ich wollte ein vollständiges Bild zeichnen.

Das Problem ist, dass wenn ich versuche, diese Klassen ich folgende Fehlermeldung erhalten zu nennen:

2017/12/19 18:47:58 [error] 465#465: *252 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught PDFlibException: Function must not be called in 'object' scope in/var/www/dev-vm-stretch.de/htdocs/AbstractPDF.php:30

Stack trace:

#0 /var/www/dev-vm-stretch.de/htdocs/AbstractPDF.php(30): pdf_begin_page_ext(Resource id #1, 0, 0, 'width=a4.width ...')

#1 /var/www/dev-vm-stretch.de/htdocs/PDF.php(10): AbstractPDF->startAFourPage()

#2 /var/www/dev-vm-stretch.de/htdocs/index.php(18): PDF->__construct()

#3 {main}

thrown in /var/www/dev-vm-stretch.de/htdocs/AbstractPDF.php on line 30" while reading response header from upstream, client: 192.168.34.51, server: dev-vm-stretch.de, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.0-fpm.sock:", host: "dev-vm-stretch.de"

Ich denke, das liegt daran, dass ich die PDFLib bezogenen Code in Funktionen getrennt, aber ich bin nicht 100% sicher, wie meine PDFLib Erfahrung beschränkt sich auf etwas mehr als 5 Tage und ich habe keine PDFLib Tutorials gefunden, die mit dieser Art von Fragen :-(

irgendwelche Ideen auf, wie dieser Fehler behoben umgehen würde begrüßt werden konnten.

Antwort

0

Das Problem ist einfach, Sie können nur erstellen e eine Seite, wenn Sie ein Ausgabedokument haben. Sie erstellen ein neues Ausgabedokument, mit begin_document($file, $options); Sie in diesem könnte genauso gut zu __construct.

Sie könnten überprüfen PDFlib 9.1.1 API Referenz, Kapitel 1.2 "Funktionsbereiche". Auch alle PDFlib PHP-Beispiele (einschließlich im PDFlib-PHP-Paket) demonstrieren die korrekte Verwendung.

+0

Ich hatte tatsächlich diese Zeile in den Testdateien, die ich für Tests verwende und als Beispiele, um zu verschiedenen Stücken zu ziehen ... Und ich habe es absolut verpasst :-( Danke –