提问人:john 提问时间:9/9/2023 更新时间:9/10/2023 访问量:176
大小> 3MB 的 Base64 pdf 未使用 iframe 加载
Base64 pdf with size > 3MB not loading with iframe
问:
Chrome 上未显示 Base64 PDF iframe。
PHP/HTML格式:
<?php
$pdf = base64_encode(file_get_contents('https://freetestdata.com/wp-content/uploads/2022/11/Free_Test_Data_10.5MB_PDF.pdf'));
echo '<iframe src="data:application/pdf;base64,' . $pdf . '></iframe>';
?>
我试过,指定 和 ,但它不起作用。<embed>
width
height
type="application/pdf"
文件大小> 10MB,我尝试了 3MB 文件不起作用。
它仅适用于 39kb pdf。
答:
-1赞
KIKO Software
9/10/2023
#1
为了规避数据 URL 长度限制,您可以在服务器上创建一个 PHP 脚本,该脚本将为您下载文件:
<?php
header('Content-type:application/pdf');
header('Content-Disposition:inline;filename="downloaded.pdf"');
readfile('https://freetestdata.com/wp-content/uploads/2022/11/Free_Test_Data_10.5MB_PDF.pdf');
参见:readfile()。需要标题来告诉浏览器它是 PDF 以及文件名是什么。
现在假设你把这个PHP脚本叫做“download_pdf.php”,你可以这样使用它:
<?php
echo '<iframe src="download_pdf.php"></iframe>';
现在你没有说什么,但如果你想能够下载多个PDF,你可以使用URL参数,如下所示:
<?php
echo '<iframe src="download_pdf.php?fileId=3"></iframe>';
然后你需要像这样修改脚本:
<?php
switch (intval($_GET['fileId'] ?? 0)) {
case 0 : $url = 'https://example.com/404_error.pdf';
break;
case 1 : $url = '.....';
break;
case 2 : $url = '.....';
break;
case 3 : $url = 'https://freetestdata.com/wp-content/uploads/2022/11/Free_Test_Data_10.5MB_PDF.pdf';
break;
case 4 : $url = '.....';
break;
}
header('Content-type:application/pdf');
header('Content-Disposition:inline;filename="downloaded.pdf"');
readfile($url);
这只是一个例子。URL 可以来自数组,甚至可以来自数据库表。
评论
echo '<iframe src="data:application/pdf;base64,' . $pdf . '"></iframe>';