PDF.js的PHP标题,以逐步加载和显示
当PHP输出PDF文件时,有人知道如何逐步加载和显示PDF.js页面吗?直接调用时,PDF文件加载良好并逐步显示,但当PHP处理同一PDF文件的输出时,PDF.js会在显示第一页之前等待加载整个文件。我尝试了以下不同的标题,但没有成功: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
$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
。