我刚刚逐字复制了您的源代码,将 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) 插入 iframe 的 Javascript
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;