php – 使用dataurl将PDF流式传输到iframe – 仅适用于Chrome

以下内容适用于Chrome,但在Firefox 15和IE 9中iframe内容为空.
<html>
  <head></head>
  <body>
    <p>this n that</p>
    <iframe type="application/pdf"
            width="95%"
            height="95%"
            src="data:application/pdf;base64,<?PHP echo base64_encode(file_get_contents('memlist.pdf'));?>">
      Oops,you have no support for iframes.
    </iframe>
    <p>this n that</p>
  </body>
</html>

问题似乎是数据.如果我将其更改为src =“memlist.pdf”,那么它无处不在. PDF大小为75kb.

dataurls是否存在某些(当前)浏览器限制?

(我试图避免使用http url回调服务器,因为一些身份验证并发症)

我刚刚逐字复制了你的源代码,交换了PHP输出编码的pdf的部分,这是我从在线编码器返回的字符串.

原始pdf是141kb,编码的字符串是194,065字节 – 所以非常大的网址.

它在Chrome中运行得很好,就像它对你一样.同样,Opera也没有它的标准.

因此,我从iframe标记删除了type =’application / pdf’属性.现在Chrome和Opera都会显示文件,而IE9仍然会拒绝.

我尝试通过javascript更改src(以防万一),通过Opera / Chrome没有问题,但仍然没有使用IE浏览器.

在过去,我已经使用PHP创建了pdfs,只需将iframe的src设置为PHP文件的url,完成GET参数. IE6(以及Opera,chrome和ff – 在移动设备上从未尝试过它,它已经超过5年了)

我希望一些旧的示例代码可以帮助:

(1)Javascript插入iframe

function  showPdfTt(studentId)
{
    var url,tgt;
    title = byId("popupTitle");
    title.innerHTML = "TiMetable for " + studentId;
    tgt = byId("popupContent");
    url = "pdftiMetable.PHP?";
    url += "id="+studentId;
    url += "&type=Student";
    tgt.innerHTML = "<iframe onload=\"centerElem(byId('Box'))\" src='"+url+"' width=\"700px\" height=\"500px\"></iframe>";
}

pdfTiMetable.PHP输出部分

$pdfStr = $pdf->output();
$myFile = fopen("lastRequested.pdf","wb");  // just here for debugging purposes
fwrite($myFile,$pdfStr);
fclose($myFile);

$pdf->ezStream();   // send output to stdout (the browser) - uses fpdf for generation
exit;

fpdf的输出部分

if(PHP_sapi_name()!='cli')
        {
            //We send to a browser
            header('Content-Type: application/pdf');
            if(headers_sent())
                $this->Error('Some data has already been output,can\'t send PDF file');
            header('Content-Length: '.strlen($this->buffer));
            header('Content-Disposition: inline; filename="'.$name.'"');
            header('Cache-Control: private,max-age=0,must-revalidate');
            header('Pragma: public');
            ini_set('zlib.output_compression','0');
        }
        echo $this->buffer;
        break;

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...