PDF.js的PHP标题,以逐步加载和显示

PDF.js的PHP标题,以逐步加载和显示,php,pdf.js,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; f

当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);
提前感谢您的帮助

在@Rob的评论后编辑: 以下是web浏览器中的日志:

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
仅仅添加“Accept Ranges”标题不会神奇地激活分块响应。您必须识别HTTP范围标头,在文件中查找,然后将此数据与“206部分内容”状态行和“内容范围”标头一起发送

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

仅添加“接受范围”标题不会神奇地激活区块响应。您必须识别HTTP范围标头,在文件中查找,然后将此数据与“206部分内容”状态行和“内容范围”标头一起发送


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

非常感谢您的回答。我以前尝试过,但没有任何成功,我仍然修改了您链接的脚本以重试,但效果并不好,pdfjs正在渲染之前下载整个文件。。。可能文件名对于pdfjs很重要,并且在链接的脚本中丢失了。如果是这样,什么内容配置最适合我的目的?@Olivier显示浏览器开发工具的网络日志。我认为您没有发送正确的响应标题。PDF是否如我所建议的那样线性化了?谢谢Rob,为了更好地显示,我在原始帖子中添加了日志PDF正在加载,pdfjs在直接调用用于测试时可以很好地显示。对于生产,该文件将在webroot之外,可能不会被上传者线性化。@Olivier我链接的脚本不是我的,这只是我在谷歌搜索“PHP范围请求”后发现的第一个合理的点击。编辑脚本并使用
Accept Range:bytes
而不是
Accept Range:0-$length
。非常感谢您的回答。我以前尝试过,但没有任何成功,我仍然修改了您链接的脚本以重试,但效果并不好,pdfjs正在渲染之前下载整个文件。。。可能文件名对于pdfjs很重要,并且在链接的脚本中丢失了。如果是这样,什么内容配置最适合我的目的?@Olivier显示浏览器开发工具的网络日志。我认为您没有发送正确的响应标题。PDF是否如我所建议的那样线性化了?谢谢Rob,为了更好地显示,我在原始帖子中添加了日志PDF正在加载,pdfjs在直接调用用于测试时可以很好地显示。对于生产,该文件将在webroot之外,可能不会被上传者线性化。@Olivier我链接的脚本不是我的,这只是我在谷歌搜索“PHP范围请求”后发现的第一个合理的点击。编辑脚本并使用
Accept Range:bytes
而不是
Accept Range:0-$length