PDF anzeigen und speichern

Hallo,

bei meinem Provider läuft nur die noch freie PDFlib-Version. Ich
möchte eine PDF generieren, gleichzeitig anzeigen und in einem
Verzeichnis speichern:

//Erstellen des PDF-Objektes
$doc = pdf_new();
//Erstellen des neuen Doks innerhalb des Objektes
pdf_open_file($doc,"/Pfad/test.pdf");

//Festlegen der Dok-Informationen
pdf_set_parameter($doc,
resourcefile,"/usr/local/include/php/pdflib.upr");

//Neue Seite innerhalb des Dok beginnen mit Parametern für Breite
und Höhe
pdf_begin_page($doc,595,842); //DIN A4

[..]

//Seite innerhalb des Dok beenden
pdf_end_page($doc);

//Dokument schließen
pdf_close($doc);

//Dokument aus dem Buffer holen
$buff = pdf_get_buffer($doc);
//Header für die Ausgabe im Acrobat Reader verändern
header("Content-type:application/pdf");
header("Content-length:".strlen($buff));
header("Content-disposition:inline, filename=irgendwas.pdf");
//Ausgeben als PDF
echo $buff;
//Dokument aus dem Speicher löschen
pdf_delete($doc);

So wird mir ein Fehler angezeigt, pdf_get_buffer sei bei
gleichzeitigen Schreiben nicht möglich.
Nehme ich den Pfad weg bei pdf_open_file wird die Datei angezeigt.
Nehme ich den letzten Teil weg, wird sie gespeichert. Wie bekomme ich
das zusammen hin?

--
Stephan
Stephan Dreisbach [ Sa, 01 September 2007 23:36 ] [ ID #1810435 ]

Re: PDF anzeigen und speichern

Stephan Dreisbach schrieb:
>
> Nehme ich den Pfad weg bei pdf_open_file wird die Datei angezeigt.
> Nehme ich den letzten Teil weg, wird sie gespeichert. Wie bekomme ich
> das zusammen hin?

IMHO gar nicht.

Am besten Du speicherst das fertige pdf in deine Datei und gibst dann
diese Datei inline aus. So sparst Du dir das zweimalige Erstellen des
Dokuments. Der zeitliche Mehraufwand ist nicht so dramatisch und wird
vom User vermutlich gar nicht bemerkt, weil er ohnehin auf das Starten
der Acrobat Readers warten muss.


Peter
Peter Schleif [ So, 02 September 2007 07:05 ] [ ID #1810820 ]

Re: PDF anzeigen und speichern

Peter Schleif wrote:
> Am besten Du speicherst das fertige pdf in deine Datei und gibst dann
> diese Datei inline aus. So sparst Du dir das zweimalige Erstellen des
> Dokuments. Der zeitliche Mehraufwand ist nicht so dramatisch und wird
> vom User vermutlich gar nicht bemerkt, weil er ohnehin auf das Starten =

> der Acrobat Readers warten muss.

Genau, speichern und dann mit http://php.net/readfile gleich wieder
ausgeben. Da sich der Dateiinhalt mit hoher Wahrscheinlichkeit eh
noch im Filesystem Buffer Cache befindet ist die Verzögerung minimal,
und selbst wenn die Daten noch einmal von der Platte gelesen werden
müssen fällt das schon gegenüber der benötigten =DCbertragungszei=
t
zum Client nicht weiter auf, und auch das Starten des Readers
dauert in der Tat länger.

--
hartmut
Hartmut Holzgraefe [ So, 02 September 2007 08:49 ] [ ID #1810821 ]

Re: PDF anzeigen und speichern

Peter Schleif <gib.spam.keine.chance [at] web.de> schrieb:

[..]
>Am besten Du speicherst das fertige pdf in deine Datei und gibst dann
>diese Datei inline aus. So sparst Du dir das zweimalige Erstellen des
>Dokuments. Der zeitliche Mehraufwand ist nicht so dramatisch und wird
>vom User vermutlich gar nicht bemerkt, weil er ohnehin auf das Starten
>der Acrobat Readers warten muss.

Ich will die Datei nun als Anhang versenden:

$text = "irgendein Text";
$Dateiname="/absoluter/Pfad/zur/Datei/test.pdf";
$header = "From: info [at] domain.de\n";
$header .= "Bcc: info [at] anderedomain.de\n";
$boundary = md5(uniqid(time()));
$header .= "\nMIME-Version: 1.0";
$header .= "\nContent-Type: multipart/mixed; boundary=$boundary";
$header .= "\n\nThis is a multi-part message in MIME format";
$header .= "\n--$boundary";
$header .= "\nContent-Type: text/plain";
$header .= "\nContent-Transfer-Encoding: 8bit";
$header .= "\n\n$text";
$header .= "\n--$boundary";
$header .= "\nContent-Type: application/pdf; name=name.pdf";
$header .= "\nContent-Transfer-Encoding: base64";
$header .= "\nContent-Disposition: inline; filename=name.pdf";
$header .= "\n\n";
$filedata = fread(fopen($Dateiname, "r"), filesize($Dateiname));
$header .= chunk_split(base64_encode($filedata));
$header .= "\n";
$header .= "--$boundary--";

mail($Adressat,$betreff,"",$header));

Nur wird mir alles als Plaintext in der Mail angezeigt. Wo ist mein
Fehler?

Danke für die Hilfe
--
Stephan
Stephan Dreisbach [ So, 02 September 2007 19:22 ] [ ID #1810831 ]

Re: PDF anzeigen und speichern

Stephan Dreisbach <muelleimer15 [at] gmx.de> schrieb:

>Peter Schleif <gib.spam.keine.chance [at] web.de> schrieb:
>
>[..]
>>Am besten Du speicherst das fertige pdf in deine Datei und gibst dann
>>diese Datei inline aus. So sparst Du dir das zweimalige Erstellen des
>>Dokuments. Der zeitliche Mehraufwand ist nicht so dramatisch und wird
>>vom User vermutlich gar nicht bemerkt, weil er ohnehin auf das Starten
>>der Acrobat Readers warten muss.
>
>Ich will die Datei nun als Anhang versenden:

[..]

>Nur wird mir alles als Plaintext in der Mail angezeigt. Wo ist mein
>Fehler?

erledigt, Fehler gefunden.
Stephan Dreisbach [ So, 02 September 2007 20:21 ] [ ID #1810833 ]

Re: PDF anzeigen und speichern

Stephan Dreisbach wrote:

> >Nur wird mir alles als Plaintext in der Mail angezeigt. Wo ist mein
> >Fehler?
>
> erledigt, Fehler gefunden.

Echt "nett", daß du uns auch die Lösung vorenthältst. :-|

--
Robert Riebisch
Bitte NUR in der Newsgroup antworten!
Please reply to the Newsgroup ONLY!
Robert Riebisch [ So, 02 September 2007 22:04 ] [ ID #1810835 ]
PHP » de.comp.lang.php.misc » PDF anzeigen und speichern

Vorheriges Thema: [PHP5, OOP] Eigenen Methodennamen herausfinden oder von welcher Methode aufgerufen wurde
Nächstes Thema: Fehlermeldung vermeiden: $_SERVER['HTTP_REFERER'] aber mit Notice: Undefined index