1

我有一个表单按钮,可以将数据提交到通用脚本(加载表单的同一页面,index.php),如果将正确的 POST 变量提交给该脚本,它会返回一个 PDF 供用户打印(使用加载的相关表单信息,以及其他数据库信息等)。

问题是,无论我在标题中将 content-type 和 content-disposition 设置为什么,Firefox 都会提示用户保存或打开文档。

如果 Firefox 提供它自己的 Adob​​e Reader 插件作为“打开方式”选项,这不会那么糟糕,但它只提供实际的 Adob​​e Reader 应用程序(由于身份验证和默认浏览器设置超出我的控制等而导致问题) )。

那么服务器端是否需要更改(在 .htaccess 文件或实际标头中)以让 Firefox 收到消息,即响应既是具有 application/pdf MIME 类型的 PDF,因此应该将文件视为它是 PDF 的硬链接,而不是服务器生成的流?

最后一件事...

如果我将 Content-Disposition 设置为“inline”,Firefox 会在 Firefox 中打开文件,但仅在首先将页面加载为“index.php”之前。一旦用户访问 PDF,如果他们尝试单击后退按钮,他们会点击加载 PDF 的 index.php,而不是他们提交数据的那个。在 Mac 方面,Firefox 不会加载 PDF,而是提示用户保存或打开“index.php”,就好像它是一个附件一样。

谢谢!


目前我尝试过的代码(按此顺序):

此文件被视为文件附件,因此文件扩展名规则将忽略 Firefox 的 Mime-Type 规则:

    header("Content-Type: application/pdf");
    header('Content-Disposition:attachment; filename="testing.pdf"');

这个工作但index.php首先加载然后加载文件,这没有吸引力,令人困惑,并且在pdf和原始页面之间放置了一个额外的请求(因此是一个额外的页面):

    header("Content-Type: application/pdf");
    header('Content-Disposition:inline; filename="testing.pdf"');

这个被视为与attachment(在 Firefox 中)相同,因此仅提示在 Adob​​e Reader 中保存或打开,而不是默认为 Adob​​e Reader 插件:

    header("Content-Type: application/pdf");
    header('Content-Disposition:pdf; filename="testing.pdf"');

另请注意,在最后一个示例中,我尝试了pdfapplication\pdf作为内容配置。没有不同。

我唯一没有尝试过的是将类型设置为八进制/流。我会交叉手指,但不会屏住呼吸。

4

3 回答 3

1

You could try having the link end in ".pdf", and use something like mod_rewrite to map it to your PHP script.

于 2009-12-17T22:05:14.537 回答
0

我认为 Firefox 很难将 PDF 作为对 POST 的响应来处理,您能否尝试生成指向 PDF 的链接并让他们单击该链接,该链接可能包含 GET 变量,例如 blah.php?VAR =123,因此您仍然可以动态生成 PDF。

于 2009-12-17T21:47:33.510 回答
-1

mime 类型application/octet-stream应该强制浏览器下载它。我不知道这是否是你想要的。

于 2009-12-17T21:54:26.423 回答