Stefan: komplette Seite an eine Variable übergeben

Hallo,

Wahrscheinlich ist es einfacher als gedacht!

Ich habe eine fertige PHP Seite, die als Webseite ausgegeben wird inkl. PHP Code, Abfragen zur Datenbank, etc. Diese Datei läuft einbandfrei. Nun möchte ich diese, so wie sie ist als PDF ausgeben. Das würde ich über tcpdf machen.

Ich habe hier die VAR $html, in diese sollte die komplette Seite eingelesen werden. Aber nicht als Code sondern schon fertig ausgeführt, also nur noch als html, oder PHP etc.

Kann ich eine komplette Seite an diese eine Variable übergeben?

Stefan

  1. Tach!

    Kann ich eine komplette Seite an diese eine Variable übergeben?

    Starte einen Ausgabepuffer vor der ersten Ausgabe und nimm seinen Inhalt nach der letzten Ausgabe entgegen.

    dedlfix.

  2. Hallo Stefan,

    Kann ich eine komplette Seite an diese eine Variable übergeben?

    Ja.

    Bis demnächst
    Matthias

    --
    Du kannst das Projekt SELFHTML unterstützen,
    indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
    1. Ja, das habe ich durchgelesen, aber ich finde nichts, wie ich eine Siete z.b. example.org einlesen kann.

      1. Hallo Stefan,

        das verlinkte Beispiel verwendet Strings mit vorgefertigtem HTML.

        Du hast mehrere Alternativen:

        1. Deine PHP Datei modifizieren, so dass sie alles in den Outputbuffer schreibt. Und den übergibst Du dann an TCPDF.

        2. Deine PHP Datei nicht modifizieren, sondern in eine Rahmen-PHP Datei mit Include hereinholen. Vor dem Include aktivierst Du den Outputbuffer, nachher deaktivierst Du ihn.

        Da der Outbutbuffer geschachtelt werden kann, funktioniert das auch dann, wenn deine PHP Datei selbst die ob_... Funktionen verwendet.

        1. Du verwendest file_get_contents und gibst als Dateiname die URL an, über die deine Seite vom Webserver bereitgestellt wird. Dadurch läuft das PHP Script und erzeugt die HTML Ausgabe.

        Sicherlich gibt's auch noch mehr Ideen, wie man den Output einer PHP Datei in einen String bekommt.

        Man muss aber auch nicht alles selber machen. Je nach Vertraulichkeit deiner Seiteninhalte könnte dieser oder ein ähnlicher Dienst eine Alternative sein.

        Je nach Anwendungsfall und -häufigkeit kann man seine Anwender auch auffordern (oder du machst es), die Webseite über die Druckfunktion des Browsers als PDF zu drucken. PDF Druckertreiber gibt's genug.

        Rolf

        --
        sumpsi - posui - clusi
        1. Ich nähere mich dem Ziel...

          Also ich habe mich für deine Version 2 entschieden:

          ob_start();
          include'test.php';
          $html=ob_get_contents();
          ob_end_clean();
          

          von einer leeren Datei aus klappt es, wenn ich es in eine tcpdf einfüge, bekomme ich folgende Fehlermeldung. Normaler html Text, wenn ich ihn rein schreibe geht...

          Die Datei die eingelesen wird, ist eine FORM, TABLE mit INPUT Feldern

          Notice: Undefined index: type in C:\xampp\htdocs\pdf-test\tcpdf.php on line 19190
          TCPDF ERROR: Some data has already been output, can't send PDF file

          1. Hi,

            von einer leeren Datei aus klappt es, wenn ich es in eine tcpdf einfüge, bekomme ich folgende Fehlermeldung. Normaler html Text, wenn ich ihn rein schreibe geht...

            **Notice: Undefined index: type in C:\xampp\htdocs\pdf-test\tcpdf.php on line 19190 TCPDF ERROR: Some data has already been output, can't send PDF file **

            versuchst Du etwa, auf einen Request sowohl mit dem HTML als auch mit dem PDF zu antworten?

            cu,
            Andreas a/k/a MudGuard

          2. Der Fehler muss hier drin stecken

            $pdf->writeHTML(

            Notice: Undefined index: type in C:\xampp\htdocs\pdf-test\tcpdf.php on line 19190 TCPDF ERROR: Some data has already been output, can't send PDF file

            <table class="table table-responsive-sm">
            <tr class="titel">
            <td class="titel" colspan=3>Titel</td>
            </tr>
            <tr>
            <td>Stadt<a href="#" data-toggle="info" data-content="Info Daten"><i class="fa fa-info-circle"></i></a></td>
            <td style="width:30%"><input name="71" class="form-control form-control-sm" placeholder="1000000"></td>
            </tr>
            </table>
            
            1. Hallo Stefan,

              du kannst auf diese Weise keine PDF-Formulare erzeugen.

              Bis demnächst
              Matthias

              --
              Du kannst das Projekt SELFHTML unterstützen,
              indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
          3. Tach!

            Notice: Undefined index: type in C:\xampp\htdocs\pdf-test\tcpdf.php on line 19190
            TCPDF ERROR: Some data has already been output, can't send PDF file

            Das sind zwei Fehler. Der zweite ist ein Folgefehler, weil der erste eine Meldung geschrieben hat. Du musst untersuchen, warum da ein angesprochener Index nicht existiert. Vielleicht ist da irgendwo ein Wert falsch oder nicht übergeben. Alternativ könnte die Ausgabe der Fehlermeldung unterdrückt werden. Aber das würde ich erst machen, wenn sich herausstellt, dass die Ursache für den Fehler nicht beseitigt werden kann, und er selbst harmlos ist.

            dedlfix.

            1. Langsam steige ich durch

              das Problem war das input Feld im HTML CODE, der verträgt sich nicht mit dem TCPDF.

              Leider kann ich auch keine eigenen CSS.STYLE einbinden.

              Vielleicht sollte ich mich nach einer ALternative zu TCPDF umsehen.

              Stefan

  3. Hallo Stefan,

    Wahrscheinlich ist es einfacher als gedacht!

    vielleicht auch nicht. Ich habe nämlich den Eindruck, du selbst und auch alle bisherigen Helfer übersehen etwas.

    Ich habe eine fertige PHP Seite, die als Webseite ausgegeben wird inkl. PHP Code, Abfragen zur Datenbank, etc. Diese Datei läuft einbandfrei. Nun möchte ich diese, so wie sie ist als PDF ausgeben.

    Aber schon als komplettes Abbild der Webseite, mit Stylesheet, Bildern und anderen eingebetteten Inhalten, oder?

    Das würde ich über tcpdf machen.

    Alle bisher gegebenen Vorschläge liefern dir nur den nackten HTML-Quelltext, nachdem er durch PHP durchgelaufen ist und der PHP-Code ausgeführt wurde. Ist in tcpdf etwa ein kompletter Browser integriert, der seinerseits das HTML und CSS analysiert, verlinkte Ressourcen wie z.B. Bilder nachlädt und so? - Dann wären die bisherigen Vorschläge richtig und sinnvoll.

    Ich habe hier die VAR $html, in diese sollte die komplette Seite eingelesen werden. Aber nicht als Code sondern schon fertig ausgeführt, also nur noch als html, oder PHP etc.

    Naja, als PHP ja gerade nicht.

    Kann ich eine komplette Seite an diese eine Variable übergeben?

    Ja. Die Frage ist, wie tcpdf dann damit weiterarbeitet.

    Ciao,
     Martin

    --
    Sei n die Anzahl der bekannten Fehler in einer Software, dann gilt stets: n = n+1
    1. Tach!

      Ist in tcpdf etwa ein kompletter Browser integriert, der seinerseits das HTML und CSS analysiert, verlinkte Ressourcen wie z.B. Bilder nachlädt und so?

      Jein, zumindest ein mehr oder weniger rudimentärer Renderer ist drin. Man darf keine vollständige Unterstützung von CSS erwarten.

      dedlfix.

    2. Hallo Der Martin,

      Alle bisher gegebenen Vorschläge liefern dir nur den nackten HTML-Quelltext, nachdem er durch PHP durchgelaufen ist und der PHP-Code ausgeführt wurde.

      Diesen Quellcode kannst du z.B. als String an tcpdf übergeben.

      Ist in tcpdf etwa ein kompletter Browser integriert, der seinerseits das HTML

      ja.

      und CSS analysiert,

      nicht alles

      verlinkte Ressourcen wie z.B. Bilder nachlädt und so?

      ja.

      Kann ich eine komplette Seite an diese eine Variable übergeben?

      Ja. Die Frage ist, wie tcpdf dann damit weiterarbeitet.

      Sagen wir lieber, das komplette body-Element.

      Bis demnächst
      Matthias

      --
      Du kannst das Projekt SELFHTML unterstützen,
      indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.