Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. [How To] HTML (offline) zu PDF konvertieren und versenden

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [How To] HTML (offline) zu PDF konvertieren und versenden

    This topic has been deleted. Only users with topic management privileges can see it.
    • David G.
      David G. last edited by David G.

      Hallo,

      ich habe mich die letzten Tage daran versucht, meine HTML-Tabellen (und anderes) als PDF zu versenden.

      Nachdem ich einige Varianten und Programme getestet habe, möchte ich euch meinen eingeschlagenen Weg vorstellen.

      Die PDFs erstelle ich mittels weasyprint.
      Hier sehen die PDFs am besten aus und die meisten Befehle werden richtig interpretiert.

      Unter folgendem Link werden die entsprechenden Befehle für die Installation auf verschiedenen Betriebssysteme aufgelistet :
      https://doc.courtbouillon.org/weasyprint/stable/first_steps.html

      Was macht das Skript?

      Als erstes wird ein Ordner angelegt, in dem die Daten abgelegt werden. So ist es auch was übersichtlicher falls man noch Bilder einbindet. Ich habe es über das Skript gelöst, damit man den Ordner nach einem restore nicht neu anlegen muss.

      Im nächsten Schritt wird mittels echo die HTML-Datei auf die Festplatte geschrieben. Leider kann man den Code nicht direkt im Skript übergeben.

      Nun wird das PDF generiert.
      Das -p wird benötigt, damit alle Formatierungen übernommen werden.
      Ansonsten wird nur die Quelle der HTML angegeben und was das generierte PDF genannt werden soll.

      Nachdem das PDF generiert wurde, wird es per Mail (entsprechender Adapter vorausgesetzt) per Mail versendet.

      Ob alle Pausen nötig sind..... Keine Ahnung.....
      Mir war es so sicherer.

      In den Einstellungen vom Javascript Adapter muss exec aktiviert sein.

      Screenshot_20220322-174742_Chrome.jpg

      <block xmlns="https://developers.google.com/blockly/xml" type="on" id="6_j6bY%4L3Rf*{@FVDAh" x="4413" y="-713">
       <field name="OID">Object ID</field>
       <field name="CONDITION">ne</field>
       <field name="ACK_CONDITION"></field>
       <statement name="STATEMENT">
         <block type="exec" id="YC`6Ms`wt8f.NTWAFtM6">
           <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
           <field name="WITH_STATEMENT">FALSE</field>
           <field name="LOG"></field>
           <value name="COMMAND">
             <shadow type="text" id="8%eI6;^$M?Dd0Jp[Q|`o">
               <field name="TEXT">mkdir html</field>
             </shadow>
           </value>
           <next>
             <block type="timeouts_wait" id="]F3+g(/*6f]@#8(6E{`t">
               <field name="DELAY">1000</field>
               <field name="UNIT">ms</field>
               <next>
                 <block type="exec" id="Bq(?2}Y%3Sp#+zQ7{C9z">
                   <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
                   <field name="WITH_STATEMENT">FALSE</field>
                   <field name="LOG"></field>
                   <value name="COMMAND">
                     <shadow type="text" id="H=|[W-4U57/E+0?v~Eqz">
                       <field name="TEXT">text</field>
                     </shadow>
                     <block type="text_join" id=";[k0,!^aTqVo)oS469+y">
                       <mutation items="3"></mutation>
                       <value name="ADD0">
                         <block type="text" id="iq$r_pe`x6{HgaYa;!hr">
                           <field name="TEXT">cd html &amp;&amp; echo '</field>
                         </block>
                       </value>
                       <value name="ADD1">
                         <block type="text" id="*Je^f*ZDH1#0|qWv5MuO">
                           <field name="TEXT">html code</field>
                         </block>
                       </value>
                       <value name="ADD2">
                         <block type="text" id="0C;g0F,nU*m$,tleRw$`">
                           <field name="TEXT">' &gt; html.html</field>
                         </block>
                       </value>
                     </block>
                   </value>
                   <next>
                     <block type="timeouts_wait" id="9X05/.Uyb!?DjUlehPd?">
                       <field name="DELAY">1000</field>
                       <field name="UNIT">ms</field>
                       <next>
                         <block type="exec" id="@=4/;AF+nb(*$iaJ,;N?">
                           <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
                           <field name="WITH_STATEMENT">FALSE</field>
                           <field name="LOG"></field>
                           <value name="COMMAND">
                             <shadow type="text" id="F~~!v3gQb|S:2P}a]lF{">
                               <field name="TEXT">cd html &amp;&amp; weasyprint -p html.html pdf.pdf</field>
                             </shadow>
                           </value>
                           <next>
                             <block type="timeouts_wait" id="FO?4WKIQp!JCf{]f]-te">
                               <field name="DELAY">10</field>
                               <field name="UNIT">sec</field>
                               <next>
                                 <block type="email" id="#D_6$dWu,nf|4Vo}sB;$">
                                   <field name="INSTANCE">.0</field>
                                   <field name="IS_HTML">FALSE</field>
                                   <field name="LOG"></field>
                                   <value name="TO">
                                     <shadow type="text" id="^.)#(k8H4cy*-4;rs)$E">
                                       <field name="TEXT"></field>
                                     </shadow>
                                   </value>
                                   <value name="TEXT">
                                     <shadow type="text" id="%BTTE#`.NmSJ3.::OB,c">
                                       <field name="TEXT"></field>
                                     </shadow>
                                   </value>
                                   <value name="SUBJECT">
                                     <shadow type="text" id="K:,Ex;$I3_/4vIF!,BLO">
                                       <field name="TEXT"></field>
                                     </shadow>
                                   </value>
                                   <value name="FILE_1">
                                     <block type="text" id="yy|LcnIsi!g`q==@gp|6">
                                       <field name="TEXT">/opt/iobroker/node_modules/iobroker.javascript/html/pdf.pdf</field>
                                     </block>
                                   </value>
                                 </block>
                               </next>
                             </block>
                           </next>
                         </block>
                       </next>
                     </block>
                   </next>
                 </block>
               </next>
             </block>
           </next>
         </block>
       </statement>
      </block>
      

      Beispiel von einem meiner PDFs (nicht schön formatiert, erfüllt aber seinen Zweck 🤣
      Screenshot_20220322-191453_Acrobat for Samsung.jpg

      P 1 Reply Last reply Reply Quote 1
      • P
        PatrickFro @David G. last edited by PatrickFro

        @david-g said in [How To] HTML (offline) zu PDF konvertieren und versenden:

        So ist es auch was übersichtlicher falls man noch Bilder einbindet. Ich habe es über das Skript gelöst, damit man den Ordner nach einem restore nicht neu anlegen muss.
        Im nächsten Schritt wird mittels echo die HTML-Datei auf die Festplatte geschrieben. Leider kann man den Code nicht direkt im Skript übergeben.

        Moin,
        da ich leider mit phantomjs immer wieder Probleme habe, wollte ich mir mal diese Lösung anschauen.

        Leider komme ich mir dem Blockly noch nicht ganz zurecht. Es wird keine korrekte bzw. lesbare pdf erstellt. Es wird in dem angegebenen Ordner eine PDF erstellt und mir auch zugeschickt.

        d074b96a-b435-45b0-b954-368337b5805e-image.png

        Kannst du erkennen, was ich falsch gemacht habe?

        David G. 1 Reply Last reply Reply Quote 0
        • David G.
          David G. @PatrickFro last edited by David G.

          @patrickfro

          Hast du es mal mit einer ganz einfachen html getestet?

          Weasyprint ist, glaube ich, sehr simpel aufgebaut.
          Es liest wirklich das html und generiert ein PDF.

          Nutze selber vis nicht. Glaube aber es kommt erst ein kurzer ladescreen oder?
          In dem Moment liegt ja dann kein HTML der Seite vor.

          Evtl lohnt es dann, sich per Skript die Seite in HTML nachzubauen.
          Jenachdem wie komplex sie ist.
          Musste ich auch leider machen. Nutze als Visualisierung lovelace. Hatte da alle meine Tabellen angelegt und mit bindings befüllt.
          Da müsste ich auch einmal in den sauren Apfel beißen.
          Das meiste bekommt man ja ganz gut mit Tabellen hin.
          Da nutze ich als Vorlage oft Generatoren im Internet ^^.

          P 1 Reply Last reply Reply Quote 0
          • P
            PatrickFro @David G. last edited by PatrickFro

            @david-g :


            <xml xmlns="https://developers.google.com/blockly/xml">
            <block type="exec" id="YC6Mswt8f.NTWAFtM6" x="4463" y="-563">
            <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
            <field name="WITH_STATEMENT">FALSE</field>
            <field name="LOG"></field>
            <value name="COMMAND">
            <shadow type="text" id="8%eI6;^$M?Dd0Jp[Q|o"> <field name="TEXT">mkdir pdferstellung</field> </shadow> </value> <next> <block type="timeouts_wait" id="]F3+g(/*6f]@#8(6E{t">
            <field name="DELAY">10</field>
            <field name="UNIT">sec</field>
            <next>
            <block type="exec" id="Bq(?2}Y%3Sp#+zQ7{C9z">
            <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
            <field name="WITH_STATEMENT">FALSE</field>
            <field name="LOG"></field>
            <value name="COMMAND">
            <shadow type="text" id="H=|[W-4U57/E+0?v~Eqz">
            <field name="TEXT">text</field>
            </shadow>
            <block type="text_join" id=";[k0,!^aTqVo)oS469+y">
            <mutation items="3"></mutation>
            <value name="ADD0">
            <block type="text" id="iq$r_pex6{HgaYa;!hr"> <field name="TEXT">cd pdferstellung &amp;&amp; echo '</field> </block> </value> <value name="ADD1"> <block type="text" id="*Je^f*ZDH1#0|qWv5MuO"> <field name="TEXT">https://wiki.selfhtml.org</field> </block> </value> <value name="ADD2"> <block type="text" id="0C;g0F,nU*m$,tleRw$">
            <field name="TEXT">' > Kopfschmerzen.pdf</field>
            </block>
            </value>
            </block>
            </value>
            <next>
            <block type="timeouts_wait" id="9X05/.Uyb!?DjUlehPd?">
            <field name="DELAY">5</field>
            <field name="UNIT">sec</field>
            <next>
            <block type="exec" id="@=4/;AF+nb(*$iaJ,;N?">
            <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
            <field name="WITH_STATEMENT">FALSE</field>
            <field name="LOG"></field>
            <value name="COMMAND">
            <shadow type="text" id="F~~!v3gQb|S:2P}a]lF{">
            <field name="TEXT">cd pdferstellung && weasyprint -p https://wiki.selfhtml.org/ Kopfschmerzen.pdf</field>
            </shadow>
            </value>
            <next>
            <block type="timeouts_wait" id="FO?4WKIQp!JCf{]f]-te">
            <field name="DELAY">10</field>
            <field name="UNIT">sec</field>
            <next>
            <block type="telegram" id="I4S]l%ZlI+#Y3NDB=tX"> <field name="INSTANCE">.0</field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <field name="DISABLE_WEB_PAGE_PREVIEW">FALSE</field> <value name="MESSAGE"> <shadow type="text" id="G!e-B{d2(*[fNj|B^F(j"> <field name="TEXT">text</field> </shadow> <block type="text" id="yy|LcnIsi!gq==@gp|6">
            <field name="TEXT">/opt/iobroker/node_modules/iobroker.javascript/pdferstellung/Kopfschmerzen.pdf</field>
            </block>
            </value>
            <value name="USERNAME">
            <block type="text" id="@0)WXz$go_{zI!6=s/4">
            <field name="TEXT">Patrick</field>
            </block>
            </value>
            </block>
            </next>
            </block>
            </next>
            </block>
            </next>
            </block>
            </next>
            </block>
            </next>
            </block>
            </next>
            </block>
            <block type="text_join" id="8S(byCc.UeofkEIkow4r" disabled="true" x="5088" y="-238">
            <mutation items="3"></mutation>
            <value name="ADD0">
            <block type="text" id=":QWy+9_9InQ[[KNno6,j">
            <field name="TEXT">cd pdferstellung && echo '</field>
            </block>
            </value>
            <value name="ADD1">
            <block type="text" id="#|nqq.hzC:1BvdpE;1{"> <field name="TEXT">http://192.168.76.43:8081/vis/index.html?Hauptview#hell_Kopfschmerzen_Druckversion</field> </block> </value> <value name="ADD2"> <block type="text" id=";(i)ypvHoJKlaCuV.iTg"> <field name="TEXT">' &gt; Kopfschmerzen.pdf</field> </block> </value> </block> <block type="exec" id="d?HfbEZ=cdqO3Nq@b58" disabled="true" x="5188" y="-137">
            <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
            <field name="WITH_STATEMENT">FALSE</field>
            <field name="LOG"></field>
            <value name="COMMAND">
            <shadow type="text" id="B?AzBMEq7Zge]2Q|JZ">
            <field name="TEXT">cd pdferstellung && weasyprint -p http://192.168.76.43:8081/vis/index.html?Hauptview#hell_Kopfschmerzen_Druckversion pdf.pdf</field>
            </shadow>
            </value>
            </block>
            <block type="email" id="#D_6$dWu,nf|4Vo}sB;$" disabled="true" x="4463" y="187">
            <field name="INSTANCE">.0</field>
            <field name="IS_HTML">FALSE</field>
            <field name="LOG"></field>
            <value name="TO">
            <shadow type="text" id="^.)#(k8H4cy
            -4;rs)$E">
            <field name="TEXT"></field>
            </shadow>
            </value>
            <value name="TEXT">
            <shadow type="text" id="%BTTE#`.NmSJ3.::OB,c">
            <field name="TEXT"></field>
            </shadow>
            </value>
            <value name="SUBJECT">
            <shadow type="text" id="K:,Ex;$I3_/4vIF!,BLO">
            <field name="TEXT"></field>
            </shadow>
            </value>
            </block>
            </xml>

            Ich habe es gerade mit google.de und selfhtml.org versucht, beides geht nicht bei mir. Die eigentlich gewünschte Seite in VIS ist schon tabellenförmig aufgebaut. VIS braucht halt meist nur sehr lange bis es geladen ist, daher die Pause von 10 Sekunden..

            Verstehe ich es richtig, dass nur Seiten, die reine html-Seiten sind, angezeigt werden? Also eine php oder ähnliches schon nicht mehr?

            David G. 1 Reply Last reply Reply Quote 0
            • David G.
              David G. @PatrickFro last edited by David G.

              @patrickfro

              Ich glaube, es wird NUR das html geladen was beim ersten Lesen der Seite gesendet wird.

              Das ist bei vis ja nicht der Fall. Die Sachen kommen ja nach dem Laden erst.

              Normale Websites sind heutzutage nicht mehr in normalen HTML programmiert.
              Glaube weasyprint unterstützt nur HTML und nicht den ganzen anderen Kram.

              Auf der Startseite von weasyprint stehen auch einige Codebeispiele. PDF und Source.

              1 Reply Last reply Reply Quote 1
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              878
              Online

              31.8k
              Users

              80.0k
              Topics

              1.3m
              Posts

              2
              5
              379
              Loading More Posts
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes
              Reply
              • Reply as topic
              Log in to reply
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              The ioBroker Community 2014-2023
              logo