Andreas: generierte PDF Datei direkt runterladen lassen

Hallo!
ist ja bekanntlich schon öfter diskutiert worden, dass man es nicht 100%ig sauber hinbekommt, das alle Browser eine PDF-Datei nicht öffnen sondern dass sich das Downloadfenster öffnet. ich generiere in einem Script eine pdf-Datei, und möchte das sich das Fenster dann auch direkt öffnet, mein gescheiterter Versuch sieht so aus:

...
system ("htmldoc --webpage --jpeg=50 -f $pdf_output $temp_html");

header ("Content-type: application/x-save-this-file");
header ("location: $pdf_output");

nun, es wird weitergeleitet, aber noch nichtmal die pdf Datei wird vernünftig geöffnet, geschweigedenn das sich das Downloadfenster öffnet!

Hat jemand ne Idee wie ich das machen kann? Außerdem weiß ich nicht, wo ich dann was hinschreiben kann, also "Datei erfolgreich erstellt, hier klicken um zurück zu gelangen..."

Viele grüße
Andreas

  1. Hallo!

    Hallo

    ...
    system ("htmldoc --webpage --jpeg=50 -f $pdf_output $temp_html");

    header ("Content-type: application/x-save-this-file");
    header ("location: $pdf_output");

    schreib mal noch folgendes in den Header:

    header ("Content-Disposition: attachment; filename=blabla.pdf");

    Mfg
    Dirk Michael

    1. Hallo!

      Hallo

      ...
      system ("htmldoc --webpage --jpeg=50 -f $pdf_output $temp_html");

      header ("Content-type: application/x-save-this-file");
      header ("location: $pdf_output");

      schreib mal noch folgendes in den Header:

      header ("Content-Disposition: attachment; filename=blabla.pdf");

      Hi!
      Ja, richtig! Aber entweder oder, ich kann doch nicht gleichzeitig sagen es kommt pdf, dann geht ja direkt das Fenster auf, oder?

      Grüße
      Andreas

      1. Hi!

        Hi

        Ja, richtig! Aber entweder oder, ich kann doch nicht gleichzeitig sagen es kommt pdf, dann geht ja direkt das Fenster auf, oder?

        Wenn ich dich richtig verstehe, möchtest du, das der Download-Dialog erzwungen wird, dies schaffst du mit dem Content-Disposition-Eintrag im Header (um genauer zu sein, mit dem "attachment"!).
        Probiers mal, bei mir hats auch geklappt.

        Grüße
        Andreas

        MfG
        Dirk

        1. Hallo!

          Also, ich habe es jetzt mal wie unten versucht, klappt auch grundsätzlich, aber wenn ich das so mache bekomme ich ein DL-Fenster, welches mich auffordert, nicht die von mir angegebene PDF Datei runterzuladen, sondern die PHP Datei?!?!? Wenn ich auf Speichern klicke geht es trotzdem irgendwie, aber wenn ich öffnen drücke, öffnet sich dasselbe Download-Fenster erneut, nur diesmal für die PDF-Datei. Wie könnte ich das direkt richtig hinbekommen, das die Leute auch direkt öffnen könnten?

          Der Code sieht wie folgt aus:

          <?

          ob_start(); // Am Anfang

          // dann die Skriptausgaben ....
          include "druck.php";

          // am Ende
          $pdf_inhalt = ob_get_contents();

          ob_end_clean(); # oder ob_end_flush()

          $temp_html=$temp_pfad."expose_ID".$ID.".html";
          $pdf_output=$pdf_pfad."expose_ID".$ID.".pdf";

          // Inhalt aus dem Puffer in die temp. html Datei schreiben
          $fp = fopen ($temp_html, "w");
          fwrite($fp,$pdf_inhalt);
          fclose($fp);

          // PDF erstellen
          system ("htmldoc --webpage --jpeg=50 -f $pdf_output $temp_html");

          // Downloadfenster öffnen
          header("Content-Type: application/octet-stream");
          header("Content-Disposition: attachment; filename="expose_ID".$ID.".pdf"");

          readfile($pdf_output);
          ?>

          Bewundert werden kann das ganze z.B. unter www.meinhausonline.de/ID24 (ganz unten auf der Seite "download" klicken)

          Hat jemand noch ne Idee? Und nochwas, was bedeutet dieses komische Zeichne am Ende des Downloads vor der oberen KB-Zahl?

          Viele Grüße
          Andreas

          1. Hallo!

            Hallo

            Also, ich habe es jetzt mal wie unten versucht, klappt auch grundsätzlich, aber wenn ich das so mache bekomme ich ein DL-Fenster, welches mich auffordert, nicht die von mir angegebene PDF Datei runterzuladen, sondern die PHP Datei?!?!?

            Also da steht, das eine Datei von diesem Ort heruntergeladen werden soll, und das ist ja korrekt.

            Wenn ich auf Speichern klicke geht es trotzdem irgendwie, aber wenn ich öffnen drücke, öffnet sich dasselbe Download-Fenster erneut, nur diesmal für die PDF-Datei. Wie könnte ich das direkt richtig hinbekommen, das die Leute auch direkt öffnen könnten?

            Also das klappt bei mir ganz prima, deine PDF-Datei wird in meinem Browser-Fenster angezeigt, wie ich es erwartet habe.

            Bewundert werden kann das ganze z.B. unter www.meinhausonline.de/ID24 (ganz unten auf der Seite "download" klicken)

            Hab ich gemacht.

            Hat jemand noch ne Idee? Und nochwas, was bedeutet dieses komische Zeichne am Ende des Downloads vor der oberen KB-Zahl?

            Ich find, es funktioniert.

            Viele Grüße
            Andreas

            Mfg
            Dirk

            1. Hi!

              Also da steht, das eine Datei von diesem Ort heruntergeladen werden soll, und das ist ja korrekt.

              Ja, aber es soll da stehen das die pdf Datei geruntergeladen wird, und nicht die php Datei!(s.u.)

              Wenn ich auf Speichern klicke geht es trotzdem irgendwie, aber wenn ich öffnen drücke, öffnet sich dasselbe Download-Fenster erneut, nur diesmal für die PDF-Datei. Wie könnte ich das direkt richtig hinbekommen, das die Leute auch direkt öffnen könnten?

              Also das klappt bei mir ganz prima, deine PDF-Datei wird in meinem Browser-Fenster angezeigt, wie ich es erwartet habe.

              Was???  Bei mir(IE5.0) nicht. Was verwendest Du? Bei mir kommt dann ein 21. Downloadfenster, worin dann die pdf-Datei steht, und est dann kann ich siw öffnen, oder 'nochmal' runterladen?!?

              Bewundert werden kann das ganze z.B. unter http://www.meinhausonline.de/ID24 (ganz unten auf der Seite "download" klicken)

              Hab ich gemacht.

              ich gerade auch nochmal, verstehe das nicht.

              Hat jemand noch ne Idee? Und nochwas, was bedeutet dieses komische Zeichne am Ende des Downloads vor der oberen KB-Zahl?

              Steht da bei Dir kein komisches Zeichen?

              Grüße
              Andreas

      2. Probiers doch einfach mal, wirst schon sehen, was Du davon hast ;-)

        Ja, richtig! Aber entweder oder, ich kann doch nicht gleichzeitig sagen es kommt pdf, dann geht ja direkt das Fenster auf, oder?

        Im Ernst: Bei mir klappt das in den meisten Browsern tadellos:

        header("Content-type: application/pdf");
        header("Content-Disposition: attachment; filename=druck.pdf")

        Gruß,
        paschef

  2. Hallo!

    nochmal Hallo

    header ("Content-type: application/x-save-this-file");

    das sollte vielleicht

    header ("Content-type: application/pdf");

    heissen.

    MfG
    Dirk Michael

    1. Hallo!

      nochmal Hallo

      header ("Content-type: application/x-save-this-file");

      das sollte vielleicht

      header ("Content-type: application/pdf");

      heissen.

      MfG
      Dirk Michael

      Hallo Dirk !

      Normalerweise hättest Du recht, aber mit "application/x-save-this-file" schummelt man sich gut an allen Viewern und Plugins vorbei und erzwingt mit fast 100%iger Wahrscheinlichkeit einen Download in eine Datei ("Save file as ..."). Die Diskussion hatten wir letzte Woche schonmal, such im Archiv nach diesem "bösen" MIME-Typ.

      Alexander

  3. Hallo!

    Moin Moin !

    ist ja bekanntlich schon öfter diskutiert worden, dass man es nicht 100%ig sauber hinbekommt, das alle Browser eine PDF-Datei nicht öffnen sondern dass sich das Downloadfenster öffnet. ich generiere in einem Script eine pdf-Datei, und möchte das sich das Fenster dann auch direkt öffnet, mein gescheiterter Versuch sieht so aus:

    ...
    system ("htmldoc --webpage --jpeg=50 -f $pdf_output $temp_html");

    header ("Content-type: application/x-save-this-file");
    header ("location: $pdf_output");

    ^--- Was soll das ?

    Öffne binär die PDF-Datei zum lesen, und schreibe das ganze binär zum Webserver/Browser raus.

    In Perl (sorry, ich kann nicht wirklich PHP):

    #!/usr/bin/perl
    $pdf_output='/tmp/foobar$$.pdf';
    $temp_html='/tmp/whatever';
    system ("htmldoc --webpage --jpeg=50 -f $pdf_output $temp_html");
    print "Content-type: application/x-save-this-file\r\n\r\n";

    ^-- entspricht header()

    open FILE,"<$pdf_output";
    binmode FILE;
    binmode STDOUT;
    print while <FILE>;
    close FILE;

    Wo ich das gerade getippt habe: Es müßte noch einfacher gehen, wenn htmldoc nach STDOUT schreiben kann:

    #!/usr/bin/perl
    $temp_html='/tmp/whatever';
    print "Content-type: application/x-save-this-file\r\n\r\n";

    ^-- entspricht header()

    system ("htmldoc --webpage --jpeg=50 -f - $temp_html");

    ^-- und hier geht die PDF-Datei direkt als Stream durch den Webserver zum Browser.

    Alexander