Показать PDF-файлы в браузере пользователя через PHP / Perl - PullRequest
116 голосов
/ 13 января 2011

Я хочу показать своим пользователям файлы PDF. Причина, по которой я использую cgi для показа pdf, заключается в том, что я хочу отслеживать клики для 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

если вы делаете это на ruby, пожалуйста, скажите это мне. Но я не уверен, что мой сервер поддерживает рельсы.

Извините, если мой код находится слишком далеко от метода, чтобы показать PDF, так как я ничего не знаю об обработке PDF и о том, как реализовать эту проблему.

Предположим, что у пользователей есть плагин Adobe Reader. Итак, как исправить мою проблему?

edit : Я хочу показать простой PDF-файл. Моя основная цель: отслеживать мои PDF-файлы и использовать некоторые необычные URL.

edit : Вот мой основной php код:

<?php
$file='/files/the.pdf';
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="the.pdf"');
@readfile($file);
?>

edit : теперь код работает. Но индикатор загрузки (в плагине 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);
?>

edit : Все мои проблемы решены. Вот окончательный код:

<?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);
?>

Спасибо! :)

Ответы [ 5 ]

48 голосов
/ 13 января 2011

Я предполагаю, что вы хотите, чтобы PDF-файл отображался в браузере, а не для принудительной загрузки. Если это так, попробуйте установить заголовок Content-Disposition со значением inline.

Также помните, что это также будет зависеть от настроек браузера - некоторые браузеры могут быть настроены на всегда загружать файлы PDF или открывать их в другом приложении (например, Adobe Reader)

14 голосов
/ 18 декабря 2016
    $url ="https://yourFile.pdf";
    $content = file_get_contents($url);

    header('Content-Type: application/pdf');
    header('Content-Length: ' . strlen($content));
    header('Content-Disposition: inline; filename="YourFileName.pdf"');
    header('Cache-Control: private, max-age=0, must-revalidate');
    header('Pragma: public');
    ini_set('zlib.output_compression','0');

    die($content);

Проверено и отлично работает. Если вы хотите вместо этого загрузить файл, замените

    Content-Disposition: inline

с

    Content-Disposition: attachment
4 голосов
/ 13 января 2011

Вы можете изменить средство рендеринга PDF, такое как xpdf или evince, для рендеринга в графическое изображение на вашем сервере, а затем передать изображение пользователю.Вот как работает Google быстрый просмотр файлов PDF, они визуализируют его локально, а затем доставляют изображения пользователю.Нет загруженного файла PDF, и источник довольно хорошо скрыт.:)

1 голос
/ 13 января 2011

Самый безопасный способ иметь отображение PDF вместо загрузки, кажется, внедряет это, используя элемент object или iframe.Существуют также сторонние решения, такие как Google PDF Viewer.

См. Лучший способ встраивания PDF в HTML для обзора.

Также есть DoPDF просмотрщик PDF в браузере на основе Java.Я не могу говорить о его качестве, но выглядит интересно.

0 голосов
/ 26 октября 2013

Вы также можете использовать класс fpdf, доступный по адресу: http://www.fpdf.org. Он предоставляет опции как для вывода в файл, так и для отображения в браузере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...