我想在浏览器中显示PDF文件,如果可能的话 - 我知道我可以在Chrome中做到这一点,这也是我正在测试的。问题是,每次尝试时,它都会提示下载而不是在浏览器中打开。
我使用PHP会话,所以我知道有一些额外的标头被发送,因此我调用了
我调用这个函数来显示PDF:
我使用PHP会话,所以我知道有一些额外的标头被发送,因此我调用了
header_remove()
来重置所有内容。我调用这个函数来显示PDF:
<?php
// For demonstrative purposes
session_start();
if (!isset($_SESSION['auth'])) {
header('Location: login.php');
die;
}
/*
* void viewPDF (Report $report)
* Outputs the PDF of the report
*/
function viewPDF ($report) {
// Tell the browser we are going to serve a PDF file.
$file = dirname(__FILE__).'/../reports/'.$report->id.'.pdf';
// The location of the PDF
if (!file_exists($file)) {
die ('The PDF does not exist.');
// Somehow the file does not exist.
}
header_remove();
// I'm using PHP sessions, so remove the headers
// automatically set that might break something.
header('Content-Disposition: inline;filename='.$report->id.'.pdf');
header('Content-Transfer-Encoding: binary');
header('Content-Type: application/pdf');
header('Content-Length: '.filesize($file));
readfile($file);
// Serve the report PDF file from the reports
// repository.
die;
// Any whitespace could corrupt the PDF, so be extra
// sure nothing else gets printed.
}
// For demonstrative purposes:
$report = new StdClass;
$report->id = 1;
viewPDF($report);
?>
以下是发送的标头:
Date: Tue, 08 Oct 2013 18:41:32 GMT
Server: Apache/2.2.22 (Win32) PHP/5.4.15
Content-Type: application/pdf
Content-Transfer-Encoding: binary
Content-Disposition: inline;filename=1.pdf
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
Content-Length: 73464
然而它仍提示下载。一旦下载完成,我可以在Adobe Reader中正常打开。
我是不是缺少了什么?
谢谢。
readfile
之前添加以下内容:header('Accept-Ranges: bytes');
- Mehdi Karamosly