Я хочу показать своим пользователям PDF-файлы. Причина, по которой я использую cgi для отображения PDF-файла, заключается в том, что я хочу отслеживать клики для PDF-файла и скрывать реальное местоположение сохраненного PDF-файла.
Я искал в Интернете и нашел только, как показать диалог сохранения пользователям и создать PDF-файл, а не показывать файлы пользователям.
Я хотел показать пользователям мои файлы pdf, а не создавать и не скачивать их. Вот что я получил из официальной документации php:
<?php
header('Content-type: application/pdf');
readfile('the.pdf');
?>
Также мой код Perl для результатов поиска в 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
если ты сделаешь это на рубине, скажи мне, пожалуйста. Но я не уверен, поддерживает ли мой сервер рельсы.
Извините, если мой код слишком далек от метода, чтобы показать pdf, так как я ничего не знаю об обработке pdf и о том, как реализовать эту проблему.
Предположим, что у пользователей есть плагин Adobe Reader. Итак, как исправить мою проблему?
изменить : я хочу показать простой файл PDF. Моя основная цель: отслеживать мои файлы pdf и использовать несколько причудливых URL-адресов.
изменить : Вот мой основной код PHP:
<?php
$file='/files/the.pdf';
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="the.pdf"');
@readfile($file);
?>
изменить : теперь код работает. Но индикатор выполнения загрузки (в плагине Adobe Reader X) не отображается. Зачем? Кто-нибудь может мне помочь? Вот мой основной код:
<?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);
?>
изменить : все мои проблемы решены. Вот последний код:
<?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);
?>
Спасибо! :)
Ответы:
Я предполагаю, что вы хотите, чтобы PDF-файл отображался в браузере, а не принудительно загружал. В этом случае попробуйте установить
Content-Disposition
заголовок со значениемinline
.Также помните, что это также будет зависеть от настроек браузера - некоторые браузеры могут быть настроены так, чтобы всегда загружать файлы PDF или открывать их в другом приложении (например, Adobe Reader).
источник
Протестировано и работает нормально. Если вы хотите, чтобы файл загружался, замените
с участием
источник
Вы можете изменить средство визуализации PDF, такое как xpdf или evince, для визуализации в графическое изображение на вашем сервере, а затем доставить изображение пользователю. Вот как работает быстрый просмотр файлов PDF в Google: они визуализируют его локально, а затем доставляют изображения пользователю. Нет загруженного файла PDF, и источник довольно хорошо скрыт. :)
источник
Самый безопасный способ отображения PDF вместо загрузки - это встраивание его с помощью элемента
object
илиiframe
. Существуют также сторонние решения, такие как программа просмотра PDF от Google.См. Обзор Лучший способ встраивания PDF в HTML .
Также существует DoPDF , программа просмотра PDF в браузере на основе Java. Не могу сказать о качестве, но выглядит интересно.
источник
Вы также можете использовать класс fpdf, доступный по адресу: http://www.fpdf.org . Он предоставляет параметры как для вывода в файл, так и для отображения в браузере.
источник