использование header () для перезаписи имени файла в URL для динамического PDF - PullRequest
27 голосов
/ 06 января 2010

У меня есть скрипт php, который генерирует отчет в формате pdf. Когда мы собираемся сохранить документ в формате pdf, Acrobat предлагает имя файла report_pdf, поскольку скрипт php называется report_pdf.php. Я хотел бы динамически называть файл pdf, поэтому мне не нужно вводить соответствующее имя для отчета каждый раз, когда я его сохраняю.

В ответ на новостную группу кто-то предложил это, где filename="July Report.pdf" - предполагаемое название отчета

<?
header('Content-Type: application/pdf');
header('Content-disposition: filename="July Report.pdf"');

Но это не работает. Я делаю это неправильно, или это сработает вообще? Это работа для mod_rewrite?


Итак, я попробовал оба
header('Content-disposition: inline; filename="July Report.pdf"');

и

header('Content-disposition: attachment; filename="July Report.pdf"');

(не одновременно) и ни у меня не работает. Это проблема моего веб-хостинга? Для этого url , вот мой код:

<?
header('Content-disposition: inline; filename="July Report.pdf"');

// requires the R&OS pdf class
require_once('class.ezpdf.php');
require_once('class.pdf.php');

// make a new pdf object
$pdf = new Cpdf();
// select the font
$pdf->selectFont('./fonts/Helvetica');
$pdf->addText(30,400,30,'Hello World');
$pdf->stream();

?>

Ответы [ 5 ]

49 голосов
/ 06 января 2010

Попробуйте:

header('Content-Disposition: attachment; filename="July Report.pdf"');

или

header('Content-Disposition: inline; filename="July Report.pdf"');

Другой вариант - использовать $_SERVER['PATH_INFO'] для передачи вашего «July Report.pdf» - пример ссылки может быть:

<a href="report_pdf.php/July%20Report.pdf?month=07">

Этот файл должен по умолчанию сохраняться как "July Report.pdf" - и должен вести себя так же, как ваш старый скрипт php, просто измените код, который создает ссылку на pdf.

5 голосов
/ 06 января 2010

Должно быть:

header('Content-disposition: attachment;filename="July Report.pdf"'); 
3 голосов
/ 03 июля 2015

На основе https://github.com/rospdf/pdf-php/raw/master/readme.pdf (стр. 19) Потоковый метод принимает массив в качестве параметра:

stream([array options]) Используется для вывода, это установит требуемые заголовки и выведет код PDF. Массив параметров может быть использован для установки нескольких параметров вывода:

'Content-Disposition'=>'filename' устанавливает имя файла, ...

Этот код хорошо работает для меня

$ezOutput = $pdf->ezStream(array("Content-Disposition"=>"YourFileName.pdf"));

В моем случае я использую ezStream(), но я думаю, что stream() должен дать тот же результат.

1 голос
/ 06 сентября 2016

Для имени, отображаемого на вкладке заголовка в браузере

У меня была такая же проблема, потом я обнаружил, что в моем .pdf отсутствуют метаданные. Я использовал инструменты («инструменты Debenu PDF») для редактирования свойств PDF, таких как автор, заголовок и т. Д. Я просто изменяю заголовок с пустого поля на нужный заголовок, загружаю новый pdf, и теперь, с тем же кодом, тот же скрипт, браузер показывает правильное имя!

Для имени, когда вы просите сохранить документ

это то, что вы указываете в заголовке файла =

0 голосов
/ 12 марта 2011

Вы пытались удалить пробелы в имени файла, используя дефисы? Итак, я думаю, что его имя должно быть таким; имя файла = июль-Report.pdf

...