Chcę pokazać moim użytkownikom pliki PDF. Powodem, dla którego używam cgi do wyświetlania pliku PDF, jest to, że chcę śledzić kliknięcia pliku PDF i ukryć rzeczywistą lokalizację zapisanego pliku PDF.
Szukałem w Internecie i odkryłem tylko, jak pokazać użytkownikom okno dialogowe zapisywania i stworzyć plik PDF, a nie pokazać pliki użytkownikom.
Chciałem pokazać użytkownikom moje pliki PDF, a nie tworzyć ani pobierać pliku PDF. Oto, co otrzymałem z oficjalnej dokumentacji php:
<?php
header('Content-type: application/pdf');
readfile('the.pdf');
?>
Również mój kod perl wyników wyszukiwania Google:
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
jeśli zrobisz to na rubinie, powiedz mi to. Ale nie jestem pewien, czy mój serwer obsługuje szyny.
Przepraszam, jeśli mój kod jest zbyt daleko od metody, aby wyświetlić plik PDF, ponieważ nie wiem nic o przetwarzaniu plików PDF i jak wdrożyć ten problem.
Załóżmy, że użytkownicy mają wtyczkę Adobe Reader. Jak więc rozwiązać mój problem?
edycja : chcę pokazać zwykły plik pdf. Mój główny cel: śledzenie moich plików PDF i używanie wyszukanych adresów URL.
edycja : Oto mój główny kod php:
<?php
$file='/files/the.pdf';
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="the.pdf"');
@readfile($file);
?>
edycja : Teraz kod działa. Ale pasek postępu ładowania (we wtyczce Adobe Reader X) nie pojawia się. Czemu? Czy ktoś może mi pomóc? Oto mój główny kod:
<?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);
?>
edycja : wszystkie moje problemy rozwiązane. Oto ostateczny kod:
<?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);
?>
Dzięki! :)
Odpowiedzi:
Zakładam, że chcesz, aby plik PDF był wyświetlany w przeglądarce, zamiast wymuszać pobieranie. W takim przypadku spróbuj ustawić
Content-Disposition
nagłówek na wartośćinline
.Pamiętaj też, że wpłyną na to również ustawienia przeglądarki - niektóre przeglądarki mogą być skonfigurowane tak, aby zawsze pobierać pliki PDF lub otwierać je w innej aplikacji (np. Adobe Reader)
źródło
Przetestowane i działa dobrze. Jeśli chcesz zamiast tego pobrać plik, zamień
z
źródło
Możesz zmodyfikować renderer PDF, taki jak xpdf lub evince, aby renderować do obrazu graficznego na serwerze, a następnie dostarczyć obraz do użytkownika. W ten sposób działa szybki podgląd plików PDF Google , renderują go lokalnie, a następnie dostarczają obrazy do użytkownika. Brak pobranego pliku PDF, a źródło jest dość dobrze ukryte. :)
źródło
Najbezpieczniejszym sposobem na wyświetlenie pliku PDF zamiast pobierania wydaje się być osadzenie go za pomocą elementu
object
lubiframe
. Istnieją również rozwiązania innych firm, takie jak przeglądarka PDF firmy Google.Zobacz Omówienie najlepszego sposobu osadzania PDF w HTML .
Istnieje również DoPDF , oparta na Javie przeglądarka PDF w przeglądarce. Nie mogę mówić o jego jakości, ale wygląda interesująco.
źródło
Możesz także skorzystać z klasy fpdf dostępnej pod adresem : http://www.fpdf.org . Daje opcje zarówno wyprowadzania do pliku, jak i wyświetlania w przeglądarce.
źródło