Oops, you -6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 03:38:17 24 4
gpt4 key购买 nike

以下内容在 Chrome 中有效,但 iframe 内容在 Firefox 15 和 IE 9 中为空白。

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

问题似乎出在 dataurl 上。如果我将它更改为简单的 src="memlist.pdf"那么它在任何地方都有效。 PDF 大小为 75kb。

dataurls 是否有一些(当前的)浏览器限制?

(由于一些身份验证的复杂性,我试图避免使用 http url 回调到服务器)

最佳答案

我刚刚逐字复制了您的源代码,将 php 输出编码 pdf 的部分替换为我从在线编码器返回的字符串。

原始 pdf 为 141kb,编码后的字符串为 194,065 字节 - 与 url 一样大..

它在 Chrome 中运行良好,就像它为您所做的一样。同样,Opera 也不会有它。

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

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

在过去,我使用 php 即时创建 pdf,并简单地将 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;

关于php - 使用 dataurl 将 PDF 流式传输到 iframe - 仅适用于 Chrome,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12848616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com