如何在iframe中水平放置PDF文件?

时间:2012-03-28 13:38:46

标签: javascript jquery html pdf iframe

我一直在努力使pdf动态水平拟合 https://www.modelica.org/events/modelica2011/authors-guide/example-abstract.pdf#toolbar=0&navpanes=0&scrollbar=0&安培;图= FITH

但它在firefox中不起作用。

虽然此演示正常,但您可以在此处看到演示。 http://jsfiddle.net/raanx/1/

2 个答案:

答案 0 :(得分:4)

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代码演示了我是如何做到的:

viewpdf.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>

答案 1 :(得分:2)

好吧,没有办法解决此类浏览器特定的错误。 pdf查看器在不同浏览器中的工作方式不同。我建议你使用Javascript PDF查看器。