我有一个表单按钮,将数据提交到通用脚本(从表单加载的同一页面,index.php),如果正确的POST变量提交到该脚本,它会返回一个PDF给用户打印(加载了相关的表单信息,以及其他数据库信息等)。
问题在于,无论我在标题中设置内容类型和内容处置,Firefox都会提示用户保存或打开文档。
如果Firefox将其自己的Adobe Reader插件作为“打开方式”选项提供,那就不会那么糟糕了,但它只提供实际的Adobe Reader应用程序(由于身份验证和默认浏览器设置导致我的问题控制等)。
因此,我需要更改服务器端(在.htaccess文件或实际标头中)以使Firefox获得响应是带有application / pdf MIME Type的PDF的消息,因此应该对待文件,好像它是PDF的硬链接,而不是服务器生成的流?
最后一件事......
如果我将Content-Disposition设置为“inline”Firefox会在Firefox中打开文件,但只能在首先将页面加载为“index.php”之前。一旦用户访问PDF,如果他们尝试单击后退按钮,他们会点击加载PDF的index.php,而不是他们提交数据的那个。在Mac方面,Firefox不会加载PDF,而是提示用户保存或打开“index.php”,就好像它是附件一样。
谢谢!
目前我尝试的代码(按此顺序):
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
作为内容处置。没有区别。
我还没有尝试过的唯一一个是将类型设置为ocet / stream。我会越过我的手指,但不会屏住呼吸。
答案 0 :(得分:1)
您可以尝试将链接以“.pdf”结尾,并使用类似mod_rewrite的内容将其映射到PHP脚本。
答案 1 :(得分:0)
我认为Firefox很难处理PDF作为对POST的响应,您是否可以尝试生成PDF链接并让他们点击链接,链接可能包含GET变量,如blah。 php?VAR = 123所以你仍然可以动态生成PDF。
答案 2 :(得分:-1)
mime-type application/octet-stream
应该强制浏览器下载它。我不知道这是你想要的帖子。