Matthias Apsel: HTML-Attribute in TCPDF

Hallo alle,

eine Minute Handbuch lesen kann Ihnen zwei Stunden umherprobieren ersparen.

Da es nicht selbstverständlich ist, wenn man ein PDF mithilfe von writeHTML() erzeugt:
Alle Attributwerte müssen in doppelte Anführungszeichen eingeschlossen werden. (https://tcpdf.org/docs/srcdoc/TCPDF/class-TCPDF/#_writeHTML)

Bis demnächst
Matthias

--
Pantoffeltierchen haben keine Hobbys.
¯\_(ツ)_/¯
  1. Lieber Matthias,

    Alle Attributwerte müssen in doppelte Anführungszeichen eingeschlossen werden.

    ich habe die (aus meiner Sicht) Unsitte noch nie verstanden, warum man einfache verwenden möchte.

    Liebe Grüße

    Felix Riesterer

    1. Hallo Felix Riesterer,

      ich habe die (aus meiner Sicht) Unsitte noch nie verstanden, warum man einfache verwenden möchte.

      Und weglassen darf man sie auch nicht.

      Ich habe mir einfach keine Gedanken gemacht und die HTML-Wurst zusammengebaut.

      $html = "<p style='background-color:#FEE'>";
      $html = "<p style=background-color:#FEE>";
      $html = '<p style=background-color:#FEE>';
      $html = '<p style="background-color:#FEE">';

      Und bevor die Frage nach inline-styles aufkommt, tcpdf beachtet nur auf diese Weise das CSS, jedenfalls wenn man writeHTML() verwendet.

      Bis demnächst
      Matthias

      --
      Pantoffeltierchen haben keine Hobbys.
      ¯\_(ツ)_/¯
      1. Hallo Matthias,

        Und bevor die Frage nach inline-styles aufkommt, tcpdf beachtet nur auf diese Weise das CSS, jedenfalls wenn man writeHTML() verwendet.

        Nein, man kann auch ein <style>[CSS]</style> vor (evtl. auch nach) den HTML-Code hängt und dass dann gemeinsam an writeHTML() übergibt, ist man nicht auf inline-Styles angewiesen.

        Gruß,
        Tobias

        1. Hallo tk,

          Nein, man kann auch ein <style>[CSS]</style> vor (evtl. auch nach) den HTML-Code hängt und dass dann gemeinsam an writeHTML() übergibt, ist man nicht auf inline-Styles angewiesen.

          Guter Vorschlag. Werde ich ausprobieren. Danke.

          Bis demnächst
          Matthias

          --
          Pantoffeltierchen haben keine Hobbys.
          ¯\_(ツ)_/¯
          1. Hallo Matthias Apsel,

            Nein, man kann auch ein <style>[CSS]</style>

            Guter Vorschlag. Werde ich ausprobieren. Danke.

            Handbuch lesen vs. ausprobieren:

            Supported tags are: a, b, blockquote, br, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, img, li, ol, p, pre, small, span, strong, sub, sup, table, tcpdf, td, th, thead, tr, tt, u, ul

            Nix style.

            Bis demnächst
            Matthias

            --
            Pantoffeltierchen haben keine Hobbys.
            ¯\_(ツ)_/¯
            1. Hallo Matthias,

              Nein, man kann auch ein <style>[CSS]</style>

              Guter Vorschlag. Werde ich ausprobieren. Danke.

              Handbuch lesen vs. ausprobieren:

              Supported tags are: a, b, blockquote, br, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, img, li, ol, p, pre, small, span, strong, sub, sup, table, tcpdf, td, th, thead, tr, tt, u, ul

              Nix style.

              Das ändert aber nichts daran dass es damit trotzdem funktioniert, ich verwende das schließlich bereits seit Jahren. Die hier aufgelisteten Elemente sind wohl nur die die entsprechend formatiert angezeigt werden. Im Code werden aber vor der Filterung der nicht unterstützten Elemente noch style-Elemente rausgefiltert (abhängig vom Inhalt des media-Attributs) - zumindest war das in den 5.9er Versionen so, ob das in der Version auf GitHub auch so ist, weiß ich nicht, da finde ich die writeHTML-Methode nicht.

              Gruß,
              Tobias

              1. Hallo tk,

                Das ändert aber nichts daran dass es damit trotzdem funktioniert, ich verwende das schließlich bereits seit Jahren.

                Gibt es Einschränkungen? Etwa, dass man nur Elementselektoren verwenden kann und keine Klassenselektoren?

                Bis demnächst
                Matthias

                --
                Pantoffeltierchen haben keine Hobbys.
                ¯\_(ツ)_/¯
                1. Hallo Matthias,

                  Das ändert aber nichts daran dass es damit trotzdem funktioniert, ich verwende das schließlich bereits seit Jahren.

                  Gibt es Einschränkungen? Etwa, dass man nur Elementselektoren verwenden kann und keine Klassenselektoren?

                  Die genauen Einschränkungen weiß ich nicht, aber Klassen- und ID-Selektoren gehen auf jeden Fall. Was ich auch noch verwende sind Nachfolgeselektoren und mehrere Selektoren für eine Regel. Laut Code müssten auch Attribut- und die Nachfahren-/Nachbar-/Geschwisterselektoren funktionieren, Pseudoklassen dagegen nicht.

                  Gruß,
                  Tobias

                  1. Hallo tk,

                    Das ändert aber nichts daran dass es damit trotzdem funktioniert, ich verwende das schließlich bereits seit Jahren.

                    Vielen Dank, es funktioniert.

                    Bis demnächst
                    Matthias

                    --
                    Pantoffeltierchen haben keine Hobbys.
                    ¯\_(ツ)_/¯
    2. Tach!

      Alle Attributwerte müssen in doppelte Anführungszeichen eingeschlossen werden.

      ich habe die (aus meiner Sicht) Unsitte noch nie verstanden, warum man einfache verwenden möchte.

      Was syntaktisch völlig in Ordnung ist, sollte man auch problemlos verwenden können, auch wenn meistens eine gleichwertige Alternative genommen wird. (Dass TCPDF sich auf eine kleine Auswahl beschränkt und nicht den kompletten HTML-Zoo behandelt, steht auf einem anderen Blatt.) Dass man einfache Anführungszeichen verwenden möchte, hat zum Beispiel ganz praktische Gründe, vor allem dass man sich das Escapen sparen möchte. Einige Programmiersprachen sind nicht so großzügig, einfache und doppelte Anführungszeichen (mehr oder weniger) gleichwertig als Stringbegrenzer anzubieten. Wenn man dafür nur doppelte hat, dann könnte man argumentieren, doch lieber die einfachen für HTML-Code in String-Literalen zu nehmen, als sich mit Escaping einen abzubrechen.

      dedlfix.

      1. Lieber dedlfix,

        Was syntaktisch völlig in Ordnung ist, sollte man auch problemlos verwenden können, auch wenn meistens eine gleichwertige Alternative genommen wird. (Dass TCPDF sich auf eine kleine Auswahl beschränkt und nicht den kompletten HTML-Zoo behandelt, steht auf einem anderen Blatt.)

        OK, das kann ich einsehen.

        Einige Programmiersprachen sind nicht so großzügig, einfache und doppelte Anführungszeichen (mehr oder weniger) gleichwertig als Stringbegrenzer anzubieten.

        Welche sollten das im Webumfeld denn sein? Und genau für dieses ist TCPDF ja gemacht...

        Liebe Grüße

        Felix Riesterer

        1. Tach!

          Einige Programmiersprachen sind nicht so großzügig, einfache und doppelte Anführungszeichen (mehr oder weniger) gleichwertig als Stringbegrenzer anzubieten.

          Welche sollten das im Webumfeld denn sein? Und genau für dieses ist TCPDF ja gemacht...

          TCPDF ist in PHP geschrieben und deshalb nicht für andere Ökosysteme geeignet. Aber allgemein betrachtet kommt als Beispiel C# und Java infrage. Dort sind die einfachen Anführungszeichen für den Datenytyp Zeichen vorbehalten. Ich laufe in schöner Regelmäßigkeit in die Falle, bei Strings die falschen Anführungszeichen zu nehmen. Für mich ist das nicht weiter tragisch, weil die IDEs gleich darauf aufmerksam machen. Aber ich kann mir gut vorstellen, dass der eine oder andere Pendler zwischen den Welten aus ebendiesem Grunde die doppelten Anführungszeichen zu seinem persönlichen Standard gemacht hat.

          dedlfix.

        2. @@Felix Riesterer

          Einige Programmiersprachen sind nicht so großzügig, einfache und doppelte Anführungszeichen (mehr oder weniger) gleichwertig als Stringbegrenzer anzubieten.

          Welche sollten das im Webumfeld denn sein?

          Nicht gerade Programmiersprache, aber sehr Webumfeld: URLs.

          Weshalb es manchmal sehr von Vorteil ist, in SVG Attributwerte in einfache Anführungszeichen zu setzen. (Taylor Hunt: Optimizing SVGs in data URIs)

          LLAP 🖖

          --
          „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann