Chrome 大小> 3MB的Base64 pdf未使用iframe加载

ac1kyiln  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(108)

Base64 PDF iframe未在Chrome上显示。
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>,指定widthheight,以及type="application/pdf",但它不工作。
文件大小> 10 MB我尝试与3 MB的文件不工作。
它只适用于39 kb的PDF。

e4yzc0pl

e4yzc0pl1#

要规避数据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可以来自数组,甚至可以来自数据库表。

相关问题