用于 PDF.js 的 PHP 标头逐步加载和显示

Oli*_*ier 1 php pdf.js

有谁知道如何在 PHP 输出 PDF 文件时让 PDF.js 逐步加载和显示页面?直接调用时,PDF 文件加载良好并逐渐显示,但当 PHP 处理同一个 PDF 文件的输出时,PDF.js 会在显示第一页之前等待整个文件加载完毕。我尝试了不同的标题,例如这些没有成功:

$file = 'big.pdf';
$filename = 'fakefilename.pdf';

header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Accept-Ranges: bytes');

@readfile($file);
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助。

在@Rob 发表评论后编辑:以下是来自网络浏览器的日志:

Accept-Ranges   0-23822222
Cache-Control   no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection  Keep-Alive
Content-Length  23822222
Content-Range   bytes 0-23822221/23822222
Content-Type    application/pdf
Date    Mon, 23 Jun 2014 13:06:33 GMT
Expires Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive  timeout=15, max=99
Pragma  no-cache
Server  Apache/2.2.16 (Debian)
X-Powered-By    PHP/5.3.3-7+squeeze19
Run Code Online (Sandbox Code Playgroud)

Rob*_*b W 5

仅添加“Accept-Ranges”标头不会神奇地激活分块响应。您必须识别 HTTP Range 标头,在文件中查找,然后将此数据与“206 Partial Content”状态行和“Content-Range”标头一起发送。

这是流式传输 MP4 文件的示例代码,它几乎可以直接复制粘贴到 PDF。要获得最佳显示时间,请确保您的 PDF 已线性化(也称为“Web 优化”)。这是 PDF 文档生成器的一个功能,它按顺序输出 PDF 流,以便在加载 PDF 文件的第一个块时呈现第一页所需的所有数据可用。