1) 嵌入已过时,不应再使用以获得一致的结果。
2) 有多种方法可以处理它(例如,ajax 抓取文件然后渲染它),但是,我会消除涉及浏览器对插件的依赖的怪癖。
要“正确”执行此操作,我会查看 https://github.com/andreasgal/pdf.js#readme 并查看仅在 javascript 中呈现 pdf。它消除了在计算机上安装阅读器的需要,并且是事情的发展方向。
3) 为了处理水平匹配,我发现截至今天为止,css 在一些浏览器中给我的 iframes / pdf 组合带来了问题,于是我使用了老式的宽度和高度,如下所示。古怪,但它适用于 firefox、chrome、IE9、safari,所以请不要因为浏览器怪癖而否定我。否则我只会使用 css。
<iframe name="myiframe" id="myiframe" width="100%" height="600" src="viewpdf.php"></iframe>
虽然不是 JavaScript,但这里有一些 php 代码演示了我是如何做到的:
查看pdf.php:
header('Content-Type: application/pdf');
header('Accept-Ranges: none');
header('Content-Disposition: inline; filename="' . $finalpdf_fn . '"');
header('Content-Transfer-Encoding: binary');
header('Cache-Control: no-store, must-revalidate, post-check=0, pre-check=0', true);
@readfile($finalpdf_fn);
所以...在 JavaScript 中,它看起来像:
function getXMLHttp() {
var xmlHttp;
try {
//Firefox, Opera 8.0+, Safari
xmlHttp = new XMLHttpRequest();
} catch(e) {
//Internet Explorer
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
alert("Your browser does not support AJAX!");
return false;
}
}
}
return xmlHttp;
}
var oRequest = getXMLHttp();
var sURL = "/tmp/pdf-13319JPL3j7.pdf";
oRequest.open("GET",sURL,false);
oRequest.setRequestHeader("Content-Type","application/pdf");
oRequest.setRequestHeader("Accept-Ranges","none");
oRequest.setRequestHeader("Content-Disposition","inline; filename='"+sURL+"'");
oRequest.setRequestHeader("Content-Transfer-Encoding","binary");
oRequest.setRequestHeader("Cache-Control","no-store, must-revalidate, post-check=0, pre-check=0', true");
oRequest.onreadystatechange = function() {
if( oRequest.readyState == 4 ) {
if (oRequest.status==200) {
document.write (oRequest.responseText);
}
}
}
oRequest.send(null)
</script>