2016-03-25 4 views
0

Ich möchte eine PDF-Datei in eine Webseite einbetten. Ich muss das PDF dynamisch erzeugen, damit ich den Benutzer zuerst authentifizieren kann, also benutze ich XSendFile auf Apache. Die PHP-Datei, die ich habe, funktioniert gut, wenn ich einen Browser besuche, wobei die PDF-Datei sofort zum Download angeboten wird. Hier ist der Code verwende ich (mit freundlicher Genehmigung von http://www.brighterlamp.com/2010/10/send-files-faster-better-with-php-mod_xsendfile/)Probleme beim Einbetten von PDF-Dateien, die mit XSendFile auf einer Webseite gesendet wurden

// Get a list of loaded Apache modules 
$modules = apache_get_modules(); 
if (in_array('mod_xsendfile', $modules)) { 
    // Use XSendFile if possible 
    header ('X-Sendfile: ' . $pathToFile); 
    header ('Content-Type: ' . $documentMIME); 
    header ('Content-Disposition: attachment; filename="' . $actualFilename . '"'); 
    exit; 
} else { 
    // Otherwise, use the traditional PHP way.. 
    header ('Content-Type: ' . $documentMIME); 
    header ('Content-Disposition: attachment; filename="' . $actualFilename . '"'); 
    @ob_end_clean(); 
    @ob_end_flush(); 
    readfile($pathToFile); 
    exit; 
} 

So weit so gut. Jetzt möchte ich diese PDF in eine Webseite eingebettet werden unter Verwendung eines Objekt-Tag z.B .:

<object data="dynamicpdf.php" type="application/pdf"> 
    <p>PDF embed failed</a></p> 
</object> 

Aber diese ausfällt. Wenn ich das Datenattribut in eine statische PDF-Datei umwandle, funktioniert es einwandfrei.

Irgendwelche Ideen was schief läuft?

Antwort

1

Ist iframing das PDF eine Option für Sie?

Wie <iframe src="dynamicpdf.php">

Der Content-Disposition Kopf zwingt den Download. Entfernen Sie es.

Allgemeine Hinweis: Ich würde nicht Funktionen wie apache_get_modules verwenden, die eine bestimmte Webserver-Umgebung abbilden.

Was ist, wenn Sie in Zukunft von mod_php oder apache wechseln? Dein Code wird beschädigt.

Stattdessen würde ich die Lieferung in einer gestreamten PHP-Antwort, die mehr Speicher effizienter ist als Ausgabe Pufferung der gesamten PDF in RAM und dann senden.

Durch das Streaming des PDF heraus mit PHP würden Sie haben auch nur eine Implementierung und es würde mit gleicher Geschwindigkeit wie x-sendfile ist:

Streaming a large file using PHP

+0

Swapping die für eine