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

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

我该怎么办?


当前回答

要么使用

<embed src="file.pdf" />

如果嵌入是一个选项或我的新插件,PIFF: https://github.com/terrasoftlabs/piff

其他回答

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

<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>

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

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

为了向浏览器表明文件应该在浏览器中查看,HTTP响应应该包括这些头文件:

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

下载而不是查看文件:

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

如果文件名包含特殊字符(如文件名[1].pdf),则文件名周围的引号是必需的,否则可能破坏浏览器处理响应的能力。

如何设置HTTP响应标头取决于您的HTTP服务器(或者,如果您从服务器端代码生成PDF响应,则需要使用服务器端编程语言)。

虽然下面的工作很好在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>

从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."\";");
        }

(我误解了问题,下面的答案是关于强制下载文件而不是在浏览器中打开文件)

如果你使用HTML5(我猜现在每个人都在用HTML5),有一个属性叫做下载。

例如,

<a href="somepathto.pdf" download="filename">

这里filename是可选的,但是如果提供了,它将使用这个名称下载文件。

EDIT

我知道这和问题的答案正好相反。我为那些(像我一样)寻找相反问题的人保留了相反的答案(证据:这个答案的赞票比反对票多)