Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: MODUL: Rechnung, Lieferschein, Bestellung und Produktansicht als PDF

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Im modified Shop werden einem an mehreren Stellen Druckansichten zur Verfügung gestellt, nun ist es aber mittlerweile ja so, dass das Ausdrucken von Webinhalten nicht mehr so oft genutzt wird, sei es weil man immer öfter gar keinen Zugriff auf einen Drucker hat oder sei es das man mit Ressourcen sparsam umgehen will. Vor diesem Hintergrund habe ich nach einer einfachen Möglichkeit gesucht anstatt HTML-Seiten PDF-Dateien zum Download anzubieten, diese kann man einfach speichern und lassen sich wenn nötig auch ausdrucken. Da das modified Shopsystem ja bereits HTML-Dokumente erzeugt war es für mich natürlich naheliegend ein Konverterprogramm welches aus HTML-Seiten PDF-Dateien erzeugen kann zu suche, gefunden habe ich dabei das PHP-Programm Dompdf welches auf Github hier -> https://github.com/dompdf/dompdf gehostet, gepflegt und aktualisiert wird. Mit ein paar Skripten und Dompdf 0.8.2 habe ich etwas zusammengestellt, was nun die Möglichkeit eröffnet mit dem modified Shopsystem PDF-Dateien welche aus HTML-Dokomenten erzeugt werden zum Download anzubieten. Die Installation ist updatesicher und wie ich denke einfach. Wer es also testen möchte, nur zu. Feedback erwünscht.

    Installationsanleitung:
    Die Anleitung ist für modified Shopsystem 2 und das Template tpl_modified gedacht.
    Die an diesen Beitrag angehängte zip Datei (RechnungLieferscheinBestellungProduktansicht_als_PDF.zip) herunterladen und entpacken, dann den Ordner

    /includes/external/dompdf

    und die Dateien

    /templates/tpl_modified/smarty/function.load_outputfilter_html2pdf.php
    /templates/tpl_modified/smarty/function.qrcode.php
    /templates/tpl_modified/smarty/outputfilter.html2pdf.php

    an die entsprechenden Orte in seinen Shop hochladen.

    Danach in folgenden Dateien

    /templates/tpl_modified/admin/print_order.html
    /templates/tpl_modified/admin/print_packingslip.html
    /templates/tpl_modified/module/print_order.html
    /templates/tpl_modified/module/print_product_info.html

    jeweils vor

    Code: XML  [Auswählen]
    </head>

    diesen Code einfügen

    Code: XML  [Auswählen]
      {load_outputfilter_html2pdf}
      <style>
        body {
          font-family: DejaVu Sans !important;
        }
      </style>

    und wer möchte kann noch in der Datei /templates/tpl_modified/module/print_product_info.html nach folgender Codesequenz

    Code: XML  [Auswählen]
      {foreach item=more_images_data from=$more_images}
      <div class="moimages cf">
        <img src="{$more_images_data.PRODUCTS_IMAGE}" alt="{$PRODUCTS_NAME|onlytext}" border="0" />
      </div>
      {/foreach}

    diese Codesequenz einfügen,

    Code: XML  [Auswählen]
      <div class="clearer"></div>
      <br />  
      <div>  
        {qrcode CODE_CONTENTS=$smarty.const.FILENAME_PRODUCT_INFO|xtc_href_link:"products_id=`$PRODUCTS_ID`" ECLEVEL='1' SIZE='2' MARGIN='1'}
        <br>
        {$smarty.const.FILENAME_PRODUCT_INFO|xtc_href_link:"products_id=`$PRODUCTS_ID`"}
      </div>

    dadurch wird der erzeugten PDF-Datei noch ein QR-Code welcher die Webadresse des Produkts enthält und die Webadresse als Link hinzugefügt.

    UPDATE für Template tpl_modified_responsive:

    Hallo Community

    Habe jetzt mal das Modul in das Template "tpl_modified_responsive" und zwar jeweils in die modified Versionen 2.0.5.0 und 2.0.5.1 eingebaut, dabei habe ich festgestellt, dass die generierten PDF's nicht gerade schön aussehen. Der Grund dafür ist das im CSS des Templates "tpl_modified_responsive" die Regel "font-weight: 300;" vorkommt, welche das Dompdf nicht versteht, deshalb hier folgender Tipp. Wenn man das Template "tpl_modified_responsive" einsetzt sollte man in den Dateien

    /templates/tpl_modified_responsive/admin/print_order.html
    /templates/tpl_modified_responsive/admin/print_packingslip.html
    /templates/tpl_modified_responsive/module/print_order.html
    /templates/tpl_modified_responsive/module/print_product_info.html

    jeweils vor
    Code: XML  [Auswählen]
    </head>

    anstatt diesen Code

    Code: XML  [Auswählen]
      {load_outputfilter_html2pdf}
      <style>
        body {
          font-family: DejaVu Sans !important;
        }
      </style>

    folgenden Code einfügen.

    Code: XML  [Auswählen]
      {load_outputfilter_html2pdf}
      <style>
        {literal}
        body {
          font-family: DejaVu Sans !important;
          font-weight: normal !important;
          line-height:17px !important;  
        }
        {/literal}
      </style>

    Ausserdem habe ich das Modul mit der aktuellen Dompdf Version 0.8.6 neu zusammengestellt.
    [...]

    So sieht es dann aus.

    [ Für Gäste sind keine Dateianhänge sichtbar ] [ Für Gäste sind keine Dateianhänge sichtbar ] [ Für Gäste sind keine Dateianhänge sichtbar ] [ Für Gäste sind keine Dateianhänge sichtbar ]

    Gruss
    Hanspeter

    [EDIT Tomcraft 14.01.2022: Modul aktualisiert.]

    Linkback: https://www.modified-shop.org/forum/index.php?topic=39715.0

    Bonner

    • Fördermitglied
    • Beiträge: 848
    • Geschlecht:
    :thx:

    Das werde ich in meiner Shopversion mal einbauen und dann Feedback geben!

    Bonner

    Shorty

    • Foren-Troll
    • Viel Schreiber
    • Beiträge: 909
    • Geschlecht:
    Vielen dank habe es mal eingebaut und es scheint alles zu Funktionieren,ich habe am ende der Bestellung mir mal die Drucker ansicht zeigen lassen da war auch alles als PDF nur der QR-Code war nicht zu sehen?

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Hallo  Shorty,

    für die Bestellung ist in meiner Anleitung kein QR-Code mit Webadresse und kein Link zum Shop vorgesehen. Wenn du das aber haben willst, kannst du es mit folgender Anleitung einbauen.

    Anleitung: Einbau des QR-Code's mit Webadresse und Link zum Shop für die Druckansicht einer Bestellung.
    In der Datei templates/tpl_modified/module/print_order.html nach folgender Codesequenz

    Code: XML  [Auswählen]
        {if count($PAYMENT_INFO) > 0}
        <br /><br />
        <div class="highlightbox">
          {foreach name=aussen item=data from=$PAYMENT_INFO}
            <strong>{$data.title|stripslashes}</strong>
            <table class="paymentinfotable {$data.class}">
              {foreach name=aussen item=info from=$data.fields}
                <tr>
                  {if $info.title != ''}<td>{$info.title|stripslashes}</td>{/if}
                  <td>{if $info.field}{$info.field|stripslashes}{else}&nbsp;{/if}</td>
                </tr>
              {/foreach}
            </table>
          {/foreach}
        </div>
        <br class="clearfix" />
        {/if}
        <br />

    diese Codesequenz einfügen.

    Code: XML  [Auswählen]
        <div>  
          {qrcode CODE_CONTENTS=$smarty.const.FILENAME_DEFAULT|xtc_href_link ECLEVEL='1' SIZE='2' MARGIN='1'}
          <br>
          {$smarty.const.FILENAME_PRODUCT_DEFAULT|xtc_href_link}
        </div>

    Gruss
    Hanspeter

    Shorty

    • Foren-Troll
    • Viel Schreiber
    • Beiträge: 909
    • Geschlecht:
    Hallo Hanspeter,
    vielen dank erst einmal für die Anleitung,war mit mein Fehler ich weiss nicht genau wo ich überall Prüfen kann um zu sehen das alles Funktioniert,aber bis jetzt habe ich keinen Fehler endecken können.

    *EDIT*
    Ist es normal das der QR-Code nicht in jedem Produkt angezeigt wird?

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Hallo Shorty,

    nein das ist nicht normal, eigentlich sollt der QR-Code in der Produktansicht bei allen Produkten angezeigt werden.

    Gruss
    Hanspeter

    Shorty

    • Foren-Troll
    • Viel Schreiber
    • Beiträge: 909
    • Geschlecht:
    Hallo Hanspeter,
    das ist bei mir nicht der Fall,was könnte die Ursache sein?

    karsta.de

    • Experte
    • Beiträge: 3.082
    Hallo Hanspeter,

    ich habe es jetzt nach deinen Anweisungen eingebaut.
    Alles funktioniert, doch leider werden bei mir keine Bilder dargestellt, nur der Alternativtext wird angezeigt.
    Habe gedacht es läge an der dompdf-Version 0.8.5 und habe es dann mit deiner älteren Version 0.8.2 versucht, aber auch damit selbes Ergebnis. (Logo ist ein transparentes gif, Artikelbilder jpg.)
    Hast du vielleicht eine Idee, woran es liegen könnte?

    [EDIT]
    Ich habe jetzt mal eine test.php ins root gelegt und so versucht dem Problem auf die Spur zu kommen.
    Doch auch so bekomme ich für die Bilder "Image not found or type unknown" und den ALT-Text angezeigt.

    Hier der Inhalt der Testdatei:
    Code: PHP  [Auswählen]
    <?php
    // include autoloader
    require_once 'includes/external/dompdf/autoload.inc.php';
    // reference the Dompdf namespace
    use Dompdf\Dompdf;
    $html = '<!DOCTYPE html><html><head><meta charset="utf-8" /><title>test</title></head>
    <body>
    <div><img src="http://www.domain.com/templates/tpl_modified_responsive/img/fsk18.png" alt="FSK-png" border="0" /></div>
    <div><img src="http://www.domain.com/templates/tpl_modified_responsive/img/logo.gif" alt="LOGO-gif" border="0" /></div>
    <div><img src="http://www.domain.com/templates/tpl_modified_responsive/img/adminbar_feed.png" alt="feed-png" border="0" /></div>
    <div><img src="http://www.domain..com/templates/tpl_modified_responsive/img/img_download.jpg" alt="download-jpg" border="0" /></div>
    </body></html>'
    ;
    $dompdf = new Dompdf();
    $dompdf->loadHtml($html);
    $dompdf->setPaper('A4', 'landscape');
    $dompdf->render();
    $dompdf->stream();
     

    BG Karsta

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Hallo Karsta,

    füge im geposteten Code nach

    Code: PHP  [Auswählen]
    $dompdf = new Dompdf();

    folgende Zeile ein.

    Code: PHP  [Auswählen]
    $dompdf->set_option('isRemoteEnabled', true);

    Gruss
    Hanspeter

    karsta.de

    • Experte
    • Beiträge: 3.082
    Leider keine Änderung.
    Scheint vielleicht damit zu tun zu haben, dass der Shop in einem Unterverzeichnis ist. Heißt www.domain.com/shop.

    Habe mal nach
    Code: PHP  [Auswählen]
    $dompdf = new Dompdf();
    folgendes eingegeben
    Code: PHP  [Auswählen]
    $dompdf->setBasePath($_SERVER['DOCUMENT_ROOT']);

    und "www.domain.com/" weggelassen, dann werden die Bilder angezeigt.

    Das müsste man jetzt natürlich irgendwie auf die outputfilter.html2pdf.php übertragen. Einfach nur mit hinzufügen reicht leider nicht.

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    [...]
    Scheint vielleicht damit zu tun zu haben, dass der Shop in einem Unterverzeichnis ist. Heißt www.domain.com/shop.
    [...]

    Ja aber dann muss im src-Attribut http://www.domain.com/shop/templates/tpl_modified_responsive/img/fsk18.png stehen und das Bild muss im Browser mit http://www.domain.com/shop/templates/tpl_modified_responsive/img/fsk18.png auch gefunden und angezeigt werden.

    Gruss
    Hanspeter

    karsta.de

    • Experte
    • Beiträge: 3.082
    Ja das hatte ich getestet, hat aber nicht funktioniert. Keine Ahnung warum er dann die Bilder nicht findet.

    Die Bilder werden in der test.php nur angezeigt, wenn ich es so hochlade:
    Code: PHP  [Auswählen]
    <?php
    require_once 'includes/external/dompdf/autoload.inc.php';
    use Dompdf\Dompdf;
    $html = '<!DOCTYPE html><html><head><meta charset="utf-8" /><title>test</title></head>
    <body>
    <div><img src="shop/templates/tpl_modified_responsive/img/fsk18.png" alt="FSK-png" border="0" /></div>
    <div><img src="shop/templates/tpl_modified_responsive/img/logo.gif" alt="LOGO-gif" border="0" /></div>
    <div><img src="shop/templates/tpl_modified_responsive/img/adminbar_feed.png" alt="feed-png" border="0" /></div>
    <div><img src="shop/templates/tpl_modified_responsive/img/img_download.jpg" alt="download-jpg" border="0" /></div>
    hallo
    </body></html>'
    ;
    $dompdf = new Dompdf();
    $dompdf->setBasePath($_SERVER['DOCUMENT_ROOT']);
    $dompdf->loadHtml($html);
    $dompdf->setPaper('A4', 'landscape');
    $dompdf->render();
    $dompdf->stream();
     

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Also bei mir funktioniert es mit diesem Code.

    Code: PHP  [Auswählen]
    <?php
    // include autoloader
    require_once 'modified2022/includes/external/dompdf/autoload.inc.php';
    // reference the Dompdf namespace
    use Dompdf\Dompdf;
    $html = '<!DOCTYPE html><html><head><meta charset="utf-8" /><title>test</title></head>
    <body>
    <div><img src="https://hpzeller.com/modified2022/templates/tpl_modified/img/fsk18.png" alt="FSK-png" border="0" /></div>
    <div><img src="https://hpzeller.com/modified2022/templates/tpl_modified/img/logo.gif" alt="LOGO-gif" border="0" /></div>
    <div><img src="https://hpzeller.com/modified2022/templates/tpl_modified/img/adminbar_feed.png" alt="feed-png" border="0" /></div>
    <div><img src="https://hpzeller.com/modified2022/templates/tpl_modified/img/img_download.jpg" alt="download-jpg" border="0" /></div>
    </body></html>'
    ;
    $dompdf = new Dompdf();
    $dompdf->set_option('isRemoteEnabled', true);
    $dompdf->loadHtml($html);
    $dompdf->setPaper('A4', 'landscape');
    $dompdf->render();
    $dompdf->stream();

    Siehe hier ->  https://hpzeller.com/dompdf_test.php

    Und hier -> https://hpzeller.com/modified2022/ habe ich das Feature im November 2018 in einen Testshop eingebaut und jetzt auf die dompdf-Version 0.8.5 geupdatet.

    PS:
    Domain läuft auf PHP-Version 7.1.33

    Gruss
    Hanspeter

    karsta.de

    • Experte
    • Beiträge: 3.082
    Bei mir funktioniert es so nicht. Außerdem wenn ich den von dir mitgelieferten dompdf-Ordner verwende, bekomme ich für die Test.php eine Menge Fehlermeldungen auf dem Screen, bei der neuen Version nicht.

    Ich verwende PHP Version: 7.3.11 und dompdf-Version 0.8.5.
    [EDIT]
    Habe mir gerade noch mal dein eben gepostetes Script angesehen, da ist mir aufgefallen, dass du
    Code: PHP  [Auswählen]
    require_once 'modified2022/includes/external/dompdf/autoload.inc.php';
    den Ordner "modified2022" mit rangehängt hast. Das habe ich gerade auch noch mal getestet und so funktionierts auch bei mir.

    Nun muss das irgendwie nur noch im Shop richtig angezeigt werden, denn da fehlen die Bilder leider immernoch.

    BG Karsta

    Timm

    • Fördermitglied
    • Beiträge: 6.343
    @hpzeller
    Was mir aufgefallen ist, dass wenn man https://hpzeller.com/dompdf_test.php auf dem Mac in Safari aufruft eine pdf Datei heruntergeladen wird. Wenn ich das allerdings auf einem iPhone mache, dann bekomme ich eine normale Browserseite angezeigt. Wenn ich dann auf den teilen Button klicke, dort bei der Datei dompdf_test auf Optionen klicke und statt "Senden als" mit Wert "automatisch" den Wert "pdf" auswähle, dann wird die Datei auch als pdf gespeichert.

    Gleiches gilt für den angegeben Testshop für die Druckenfunktion der Produktbeschreibung.

    Vielleicht kann man das ja ändern, dass man auch auf mobilen Geräten direkt eine pdf speichern kann. Wie es auf Android ist weiß ich nicht.

    Gruß Timm

    P.S. Ich hab den Beitrag gemeldet und er ist nun unter Module ab 2.x zu finden. Warum machst du das nicht selbst, wenn du etwas hier einstellst, damit möglichst viele deine Erweiterungen nutzen können? Wir wissen doch, dass die Suchfunktion nicht immer perfekt funktioniert. Wäre doch schade, wenn Sachen untergehen. Diese Liste werden neue Nutzer sicher auch eher durchgehen.
    Trade Republic - Provisionsfrei Aktien handeln
    2140 Antworten
    726838 Aufrufe
    05. April 2024, 19:50:05 von trunky
    3 Antworten
    4663 Aufrufe
    09. Oktober 2013, 15:33:09 von kaisa
    4 Antworten
    5624 Aufrufe
    22. Oktober 2012, 15:00:37 von peterpan19
    1 Antworten
    3145 Aufrufe
    04. Dezember 2012, 08:31:31 von syn242
               
    anything