我有一个表单按钮,可以将数据提交到通用脚本(加载表单的同一页面,index.php),如果将正确的 POST 变量提交给该脚本,它会返回一个 PDF 供用户打印(使用加载的相关表单信息,以及其他数据库信息等)。
问题是,无论我在标题中将 content-type 和 content-disposition 设置为什么,Firefox 都会提示用户保存或打开文档。
如果 Firefox 提供它自己的 Adobe Reader 插件作为“打开方式”选项,这不会那么糟糕,但它只提供实际的 Adobe 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 中)相同,因此仅提示在 Adobe Reader 中保存或打开,而不是默认为 Adobe Reader 插件:
header("Content-Type: application/pdf");
header('Content-Disposition:pdf; filename="testing.pdf"');
另请注意,在最后一个示例中,我尝试了pdf
和application\pdf
作为内容配置。没有不同。
我唯一没有尝试过的是将类型设置为八进制/流。我会交叉手指,但不会屏住呼吸。