Ich möchte meinen Benutzern PDF-Dateien anzeigen. Der Grund, warum ich cgi verwende, um das PDF anzuzeigen, ist, dass ich die Klicks für das PDF verfolgen und den tatsächlichen Speicherort des gespeicherten PDFs verschleiern möchte.
Ich habe im Internet gesucht und nur herausgefunden, wie ich den Benutzern den Dialog zum Speichern und Erstellen eines PDFs zeigen kann, nicht die Dateien den Benutzern.
Was wollte ich ist zeigen die Benutzer meine PDF - Dateien, nicht die Erstellung oder laden Sie die pdf. Folgendes habe ich aus der offiziellen PHP-Dokumentation erhalten:
<?php
header('Content-type: application/pdf');
readfile('the.pdf');
?>
Auch mein Google-Suchergebnis-Perl-Code:
open(PDF, "the.pdf") or die "could not open PDF [$!]";
binmode PDF;
my $output = do { local $/; <PDF> };
close (PDF);
print "Content-Type: application/pdf\n";
print "Content-Length: " .length($output) . "\n\n";
print $output
Wenn du es auf Rubin machst, sag es mir bitte. Ich bin mir jedoch nicht sicher, ob mein Server Schienen unterstützt.
Es tut mir leid, wenn mein Code zu weit von der Methode entfernt ist, um das PDF anzuzeigen, da ich nichts über die PDF-Verarbeitung und die Implementierung dieses Problems weiß.
Nehmen wir an, die Benutzer haben das Adobe Reader-Plug-In. Wie kann ich mein Problem beheben?
Bearbeiten : Ich möchte eine einfache PDF-Datei anzeigen. Mein Hauptzweck: Verfolge meine PDF-Dateien und verwende einige ausgefallene URLs.
edit : Hier ist mein Haupt-PHP-Code:
<?php
$file='/files/the.pdf';
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="the.pdf"');
@readfile($file);
?>
Bearbeiten : Jetzt funktioniert der Code. Der Ladefortschrittsbalken (im Adobe Reader X-Plugin) wird jedoch nicht angezeigt. Warum? Kann mir jemand helfen? Hier ist mein Hauptcode:
<?php
$file='./files/the.pdf';
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="the.pdf"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
@readfile($file);
?>
edit : Alle meine Probleme gelöst. Hier ist der endgültige Code:
<?php
$file = './path/to/the.pdf';
$filename = 'Custom file name for the.pdf'; /* Note: Always use .pdf at the end. */
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Accept-Ranges: bytes');
@readfile($file);
?>
Vielen Dank! :) :)
Antworten:
Ich gehe davon aus, dass die PDF-Datei im Browser angezeigt werden soll, anstatt einen Download zu erzwingen. Wenn dies der Fall ist, setzen Sie den
Content-Disposition
Header auf den Wertinline
.Denken Sie auch daran, dass dies auch von den Browsereinstellungen beeinflusst wird. Einige Browser sind möglicherweise so konfiguriert, dass PDF-Dateien immer heruntergeladen oder in einer anderen Anwendung (z. B. Adobe Reader) geöffnet werden.
quelle
Getestet und funktioniert gut. Wenn Sie möchten, dass die Datei stattdessen heruntergeladen wird, ersetzen Sie sie
mit
quelle
Sie können einen PDF-Renderer wie xpdf oder evince so ändern, dass er auf Ihrem Server in ein Grafikbild gerendert wird, und das Bild dann dem Benutzer bereitstellen. So funktioniert Googles Schnellansicht von PDF-Dateien. Sie rendern lokal und liefern dann Bilder an den Nutzer. Keine heruntergeladene PDF-Datei, und die Quelle ist ziemlich gut verdeckt. :) :)
quelle
Der sicherste Weg, eine PDF-Anzeige anstelle eines Downloads zu haben, scheint darin zu bestehen, sie mit einem
object
oderiframe
-Element einzubetten. Es gibt auch Lösungen von Drittanbietern wie den PDF-Viewer von Google.Eine Übersicht finden Sie unter Beste Möglichkeit, PDF in HTML einzubetten .
Es gibt auch DoPDF , einen Java-basierten PDF-Viewer im Browser. Ich kann nicht mit seiner Qualität sprechen, aber es sieht interessant aus.
quelle
Sie können auch die fpdf-Klasse verwenden, die unter folgender Adresse verfügbar ist: http://www.fpdf.org . Es bietet Optionen für die Ausgabe in eine Datei und die Anzeige im Browser.
quelle