当“在浏览器中显示PDF”选项未选中时,是否有一种方法强制PDF文件在浏览器中打开?

我尝试使用嵌入标签和一个iframe,但它只有当该选项被选中时才会工作。

我该怎么办?


当前回答

我也有同样的问题,上面的大部分答案应该可以解决你的问题。不幸的是,即使我在响应中收到了内容类型和内容处理标题,但我的pdf仍然是被下载而不是被查看。经过几个小时的头脑风暴和尝试。

罪魁祸首是火狐,在某种程度上是我。紧张的笑声

默认情况下,当你在firefox中打开一个pdf文件时,它会弹出一个窗口,让你保存pdf文件或直接打开它,还有一个复选框告诉你从现在开始自动执行这个操作,猜猜是谁选择了它。

由于这个错误,我的pdf文件被下载而不是被查看,即使有所有必要的标题响应。这是一个简单的错误,但却花费了我大量的时间。

要解决这个问题,只需进入设置,搜索应用程序,并将pdf设置更改为您需要的任何设置。

其他回答

如果你有Apache,把这个添加到。htaccess文件中:

<FilesMatch "\.(?i:pdf)$">
    ForceType application/octet-stream
    Header set Content-Disposition attachment
</FilesMatch>

虽然下面的工作很好在firefox,它不工作在chrome和移动浏览器。

Content-Type: application/pdf
Content-Disposition: inline; filename="filename.pdf"

要修复chrome和移动浏览器错误,请执行以下操作:

将文件存储在项目中的某个目录中 使用谷歌PDF查看器

谷歌PDF查看器可以这样使用:

<iframe src="http://docs.google.com/gview?url=http://example.com/path/to/my/directory/pdffile.pdf&embedded=true" frameborder="0"></iframe>

你可以通过以下方式做到这一点:

<a href="path to PDF file">Open PDF</a>

如果PDF文件在某个文件夹中,而该文件夹没有权限直接访问该文件夹中的文件,那么你必须通过使用.htaccess文件设置绕过一些文件访问限制:

<FilesMatch ".*\.(jpe?g|JPE?G|gif|GIF|png|PNG|swf|SWF|pdf|PDF)$" >
    Order Allow,Deny
    Allow from all
</FilesMatch>

但是现在只允许某些必要的文件。

我已经使用了这段代码,它工作得很完美。

正确的格式是application/pdf,而不是application/force-download。这看起来像是对一些传统浏览器的黑客攻击。如果可以,总是使用正确的mimetype。

如果你可以控制服务器代码:

强制下载/提示:使用头(“Content-Disposition”,“附件;文件名= myfilename.myextension "); 浏览器尝试打开它:使用头("Content-Disposition", "inline;文件名= myfilename.myextension ");

无法控制服务器代码:

使用HTML5下载属性。它使用在视图端指定的自定义文件名。

注意:我更喜欢在服务器端设置文件名,因为您可能有更多的信息,可以使用公共代码。

从rootfile打开downloads.php。

然后在第186行修改如下:

        if(preg_match("/\.jpg|\.gif|\.png|\.jpeg/i", $name)){
            $mime = getimagesize($download_location);
            if(!empty($mime)) {
                header("Content-Type: {$mime['mime']}");
            }
        }
        elseif(preg_match("/\.pdf/i", $name)){
            header("Content-Type: application/force-download");
            header("Content-type: application/pdf");
            header("Content-Disposition: inline; filename=\"".$name."\";");
        }

        else{
            header("Content-Type: application/force-download");
            header("Content-type: application/octet-stream");
            header("Content-Disposition: attachment; filename=\"".$name."\";");
        }