PDF Rechnung modifizieren

  • Hallo zusammen,


    ich habe erfolgreich die Rechnungserstellung im Backend (durch klicken auf das Icon der Bestellung) per Code angepasst. Header und Footer im Backend und den Rest per Code in der invoice_order.php und der invoice_items.php. Nun möchte ich diese Rechnung automatisch mitversenden aber hier wird eine ganz andere PDF Rechnung erzeugt. In welchen Dateien liegt denn das Layout der PDF-Rechnung, die automatisiert mitversandet werden kann? In /templates/yoo_master2/html/com_virtuemart/invoice/ liegen die invoice_order.php und die invoice_items.php, die ich angepasst habe.


    Ich hoffe Ihr könnt mir das den richtigen Fingerzeig geben. :!::?:


    Lieben Dank und Grüße ins Forum,


    Andreas

  • Hallo Andreas,


    in genau den gleichen Dateien liegen auch die Layouts für die PDF-Rechnung.

    Die Vorschau, der erste Button ist auch" Rechnungslayout", aber für die HTML-Vorschau und drucken der HTML-Vorschau, nicht PDF.

    Irgendwo im Quelltext findet sich da ein


    if ($this->print) oder so ähnlich, das gilt nur für den Button mit dem Drucker.


    Ansonsten gibt es auch noch Abfragen wie


    <?php if ($this->doctype == 'invoice') { ?>, wenn es z. Bsp. nicht für den Lieferschein gelten soll.


    In den Originaldateien gibt es da einige Konstrukte, die Dich auf den richtigen Weg bringen können.

    Zusammengefasst gibt es unterschiedliche:

    Rechnungslayout -> HTML-Vorschau (Print)

    Rechnungslayout -> PDF

    Lieferscheinlayout -> PDF


    Das Problem ist, dass die Erzeugung von HTML-Druck-Zu-PDF und PHP-Layout-Zu-PDF zwar mit gleichem HTML-Layout erzeugt werden, der PDF-Drucker des Browsers oder eigenen Computers aber andere Ergebnisse liefert als das in VirtueMart integrierte TCPDF. TCPDF kann zudem nur begrenztes XHTML und CSS.


    Die HTML-Vorschau wird auch gerne für andere Funktionen verwendet, zum Beispiel habe ich damit das Drucklayout für den 80mm-Thermodrucker einer Pizzeria erstellt. Oder eine Packliste für die Versandabteilung. Es kommen da immer wieder Kunden mit den interessantesten Ideen. ;-)



    Grüße

    Stefan

  • Hallo Stefan und lieben Dank für deine Antwort.


    So wie es ausschaut habe ich also ausschließlich das Rechnungslayout -> HTML-Vorschau (Print) soweit fertiggestellt.


    Der Verein für den ich das nebenbei mache möchte genau diese Rechnung direkt nach der Bestellung versenden. Ich finde in den Dateien den Punkt nicht, wo ich den Code einfügen kann.


    Ich habe mal eingefügt wie die Printvariante aussieht und die normale Variante. Ich finde einfach den Ansatzpunkt im Code nicht, wo ich das ändern soll.


    Anbei mal der Code meiner invoice_order.php



    Sehe ich hier etwa den Wald vor lauter Bäumen nicht mehr?

  • Hallo Andreas


    So wie es ausschaut habe ich also ausschließlich das Rechnungslayout -> HTML-Vorschau (Print) soweit fertiggestellt.

    Nein, vom Code her hast Du das Rechnungslayout für die PDF-Rechnung erstellt, die an die Mail gehängt wird.
    HTML-Vorschau und PDF sind vom Code her bei Dir aktuell identisch.


    Genau so soll das auch (im Normalfall) sein. Das PDF sieht einfach nur anders aus, weil TCPDF das so erzeugt.
    !!! Die HTML-Vorschau muss also so angepasst werden, dass nachher das PDF passt. !!!

    Es bleibt also nur, die bereits bearbeiteten Dateien so anzupassen, dass das PDF später stimmt, keine komplizierten Unterscheidungen für Print im Code.


    Grüße

    Stefan


    PS:

    Die folgenden Ausführungen sind für Dich vollkommen unerheblich, ich hatte sie nur schon niedergeschrieben und dann noch einmal von vorne/oben neu angefangen, nachdem ich das Problem verstanden hatte. :-)

    Spezielle Änderungen für die HTML-Vorschau (Print) werden wie in Zeile 49 der invoice.php angegeben. VM 3.8.9.xxxxx

    PHP
    1. if ($this->print) {
    2. ?>
    3. <body onload="javascript:print();">
    4. <?php }


    Diese Unterscheidung braucht man aber nur, wenn man die HTML-Vorschau für andere Funktionen verwenden möchte.

  • Hallo Stefan,


    wenn ich Dich nun richtig verstehe, habe ich keine Chance die TCPDF erzeugte Version in die gleiche Optik zu bringen wie meine mühevoll gebastelte HTML/Print-Variante?

  • Das wäre in der Tat zu kompliziert.

    Einfacher ist es, die schöne HTML-Variante so umzubauen, dass es nachher eine schöne PDF-Rechnung ist.

    Man kann natürlich diese aktuelle HTML-Version beibehalten und in eine if-Schleife setzen:


    if ($this->print) { ?>

    HTML-Print-Layout (Alles was bisher in den Dateien ist.)

    <?php } else { ?>

    PDF-Rechnung (Kopie von HTML-Print-Layout mit Veränderungen)

    <?php } ?>


    Das müsste man im Grunde für alle veränderten Dateien machen. Dann sieht man die Änderungen für die PDF-Datei allerdings nicht mehr in der Vorschau, sondern muss immer über das PDF schauen.


    Noch ein Tipp: Wenn man den PDF-Rechnungslink in der Bestellliste über Rechtsklicken kopiert und in den Browser einfügt, gibt es in der langen URL irgendwo ein "pdf", das kann man zu "html" ändern, dann wird das HTML-Layout der PDF-Rechnung angezeigt, nicht Print.


    Ich hab nicht umsonst mehrere hundert Stunden an meinen Rechnungslayouts gesessen, das Thema PDF-Rechnung macht Rauch im Kopf. ;-)


    Grüße

    Stean

  • Nicht ohne ein paar Anpassungen, wenn es gleich bleiben soll.


    - Logo ist normal links, bzw. volle Breite, sonst muss man in den Code.

    - Die grauen Streifen in der Produktliste brauchen eine Code-Änderung, da TCPDF das inline möchte.


    Wenn das Logo nach links darf und die grauen Streifen wegfallen dürfen, könnte es in der Grundversion soweit passen.

    Header und Footer müssen als HTML in der VirtueMart-Konfiguration für den Shopper eingegeben werden. Das ist nicht allzu schwer.

    Vorlagen dazu hab ich in der Dokumentation: https://www.jooglies.com/dokumentation/27-vm-rechnung-pro

    PS. Die Doku dürfte auch aktuell helfen, Header und Footer in die PDF-Rechnung oben zu bekommen.

  • Lieben Dank Stefan,


    ich werde das mal an den Vorstand bzw. das zuständige Vereinsmitglied herantragen und wir schauen mal was passiert :-) Wäre natürlich eine tolle Sache, wenn wir das so hinbekommen, mit deiner Erweiterung.


    Das mit dem Header und Footer versuche ich mal hinzubiegen :-)


    Viele Grüße aus Selm,


    Andreas

  • Hallo Stefan,


    meine Name ist Joaquín, hier hast Du geschrieben, dass Du so was gemacht hast "Drucklayout für den 80mm-Thermodrucker" und das ist genau was ich suche, kannst Du mir weiter helfen? das wäre super.


    danke und viele Grüße


    Joaquín

  • Hallo Joaquín,


    leider kann ich diesen Monat keine neuen Aufträge mehr annehmen.

    Ich würde empfehlen, die Overrides im invoice-Ordner genauer anzuschauen und dann mit den oben genannten if-Abfragen nur die benötigten Felder auszudrucken. Oft reicht dort die Anzahl der Produkte, die Artikelnummer und der Brutto-Preis, damit es auf die 80 mm passt. Man kann die vorhandene Tabelle um die Spalten kürzen, die man nicht braucht.

    if ($this->print) { ?>

    Wenn es noch etwas Zeit hat, kann ich gerne Anfang September einen Blick darauf werfen. Dazu einfach eine Mail an die Adresse schreiben, die bei jooglies.com im Impressum steht.


    Grüße

    Stefan