【发布时间】:2011-01-02 05:25:31
【问题描述】:
我有一个生成 pdf 报告的 php 脚本。当我们去保存 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();
?>
【问题讨论】:
-
如果你想下载文件(而不是在浏览器中打开),添加这些:header('Content-Transfer-Encoding: binary'); header('Content-Type: application/force-download');否则,您仍应包含行 header('Content-Type: application/pdf') 以便浏览器知道如何打开文件。
-
另外,您可能会丢失文件的内容长度 - 有些浏览器在没有这个的情况下可以正确打开文件,有些则不能。为此,将所有输出转储到输出缓冲区中,然后打印出标题并将其指定为 'Content-Length:'输出缓冲区的 strlen*
-
暂时注释那些 php 标题行并查看输出。它不应包含任何 php 错误。如果是这样,请在修复任何错误后重新应用标题。
标签: php pdf mod-rewrite rename http-headers