Anleitung HowTo: Rechnung - Logo oben mittig (Selfhosting)

Thema wurde von DKG - Die Kleine Geschenkidee (Peter), 10. August 2023 erstellt.

  1. Hi,

    wer in seinen Rechnungen das Logo oben mittig haben möchte,
    kann die nachfolgende Anpassung verwenden.

    So sieht das Ergebnis aus:
    [​IMG]

    Datei die angepasst werden muss:
    admin/includes/gm/classes/gmOrderPDF.php

    Updatesicher:
    nein, muss nach Update wieder manuell angepasst werden

    Gambio Version:
    v4.8.0.2

    Hinweis:
    In früheren gambio Versionen lag die Datei in einem anderen Ordner

    Suche in der Datei:
    PHP:
        /*
         *     -> get Logo
         */
        
    function getLogo()
        {
            
    $logo_size = getimagesize($this->pdf_logo_path);

            
    $mm_x = $logo_size[0] / $this->k;
            
    $mm_y = $logo_size[1] / $this->k;

            if(
    $mm_x > parent::getInnerWidth() / 2)
            {
                
    $size_factor = (parent::getInnerWidth() / 2 - 1) / $mm_x;
                
    $mm_x = parent::getInnerWidth() / 2 - 1;
                
    $mm_y *= $size_factor;
            }

            
    $pos_x = parent::getLeftMargin() + parent::getInnerWidth() - $mm_x;

            
    parent::Image($this->pdf_logo_path, $pos_x, parent::getTopMargin(), $mm_x, $mm_y, substr(strrchr($logo_size['mime'], '/'), 1), $this->pdf_link);

            
    parent::SetY(parent::getTopMargin() + $mm_y);
        }
    ...und ersetze es hiermit:
    PHP:
    /*
         *     -> get Logo
         */
        
    function getLogo()
        {
            
    $logo_size = getimagesize($this->pdf_logo_path);

            
    $mm_x = $logo_size[0] / $this->k;
            
    $mm_y = $logo_size[1] / $this->k;

            
    $max_width = parent::getInnerWidth() / 2 - 1;
            if (
    $mm_x > $max_width) {
                
    $size_factor = $max_width / $mm_x;
                
    $mm_x = $max_width;
                
    $mm_y *= $size_factor;
            }

            
    $pos_x = parent::getLeftMargin() + (parent::getInnerWidth() - $mm_x) / 2; // Logo mittig ausrichten

            
    parent::Image($this->pdf_logo_path, $pos_x, parent::getTopMargin(), $mm_x, $mm_y, substr(strrchr($logo_size['mime'], '/'), 1), $this->pdf_link);

            
    parent::SetY(parent::getTopMargin() + $mm_y);
        }

    Viel Spaß damit.
    Und wie immer: Verwendung auf eigene Gefahr, ich übernehme keine Haftung.

    Gruß
    Peter
     
  2. Anonymous

    Anonymous Aktives Mitglied

    Kann man das auch über die gesamte Blattbreite strecken?
     
  3. Anonymous

    Anonymous Erfahrener Benutzer

    ja, musst nur das Logo in der entsprechenden Größe einfügen, ich hab 1022 x 188
     

    Anhänge:

  4. Anonymous

    Anonymous Aktives Mitglied

    Danke, aber bei mir sieht das immer so aus (egal welche Größe ich nehme):

    GambioRechnung.png
     
  5. Ja,
    hier der Code dafür
    PHP:
    function getLogo()
    {
        
    $logo_size = getimagesize($this->pdf_logo_path);

        
    $mm_x = $logo_size[0] / $this->k;
        
    $mm_y = $logo_size[1] / $this->k;

        
    $max_width = parent::getInnerWidth() - 2; // Ändere die maximale Breite auf das volle Innere der PDF
        
    $size_factor = $max_width / $mm_x;

        
    $mm_x = $max_width;
        
    $mm_y *= $size_factor;

        
    $pos_x = parent::getLeftMargin(); // Keine Verschiebung nach links nötig, da das Logo nun die volle Breite einnimmt

        
    parent::Image($this->pdf_logo_path, $pos_x, parent::getTopMargin(), $mm_x, $mm_y, substr(strrchr($logo_size['mime'], '/'), 1), $this->pdf_link);

        
    parent::SetY(parent::getTopMargin() + $mm_y);
    }
    Bitte sag bescheid ob es geklappt hat. ich hatte es bei mir getestet - da hat es funktioniert.

    da hast Du leider unrecht.
    Die Größe wird programmatisch festgelegt, wieviel Platz es im PDF Dokument einnehmen soll.

    LG
    Peter
     
  6. Anonymous

    Anonymous Aktives Mitglied

    Hallo Peter,

    erstmal herzlichen Dank für Deine Nachricht. Da ich (leider) absolut NULL-Plan von HTML, PHP & Co. habe - muss ich leider nachfragen: da wo Du "Ändere die maximale Breite auf das volle Innere der PDF" - muss ich da irgendwo noch was eintragen? Also den Code genauso übernehmen funktioniert nicht, kommt ein Fehler im Bezug auf "parent".
    Sorry wenn ich blöd frage, kenne mich leider wirklich nicht aus, versuche aber gerade hier viel zu lesen und suche nach einer Möglichkeit, mir etwas Wissen um HTML und PHP anzueignen.
     
  7. Anonymous

    Anonymous Aktives Mitglied

    Zusatzfrage: Ist es möglich, statt der vorgegebenen 4 Spalten im Fußteil der Rechnung ebenfalls ein Bild zu verwenden?
    Also ich habe da eine png Datei in der meine Adresse, Steuernummer, Bankverbindung, Kontaktdaten, etc. (also alles was drin sein sollte) mit einigen Logos zusammen. Wäre das möglich?
     
  8. Hi Martin,

    eintragen musst Du nichts mehr, der Code ist fertig so.
    2 Fragen meinerseits:
    a) welche Shopversion verwendest Du?
    b) wie genau lautet die Fehlermeldung? wenn man das ergründen und beheben will, braucht man genaue Angaben.

    Grundsätzlich ja, allerdings hab ich mich damit bisher nicht auseinandergesetzt und scheue auch den Aufwand, da es im Gegensatz zum Logo viel zeitaufwendiger ist. daher sry wenn ich Dir da nun keine Lösung anbieten will und kann.

    LG
    Peter
     
  9. Anonymous

    Anonymous Aktives Mitglied

    Da ich das hier schon öfter gelesen habe, hatte ich das in die Signatur (ich hoffe man sieht das?!) mit aufgenommen: v4.8.0.2 mit Honeygrid Theme. Bin ja ganz "frisch".

    Werde ich später wenn ich auf Arbeit bin, noch einmal reproduzieren und senden.

    Das geht für mich völlig in Ordnung, die Frage war ja auch erst einmal, ob das grundsätzlich geht, hab noch andere Baustellen vorab und das Logo oben ist erst einmal wichtiger. :)

    Melde mich später - und vielen Dank.
     
  10. Anhänge:

  11. Anonymous

    Anonymous Aktives Mitglied

    Wow....!

    funktioniert. :) Vielen vielen vielen Dank!!!
    Weiß grad gar nicht was ich sagen soll ... :)
     
  12. Nix zu danken, muss auch fairerweise dazusagen das ich mir so Scripte gerne mal von ChatGPT anpassen lasse, weil ich schreibfaul bin :) - so auch in deinem Fall.
    Unterm Strich zählt ja das Ergebnis - schön das es funzt ^^