Mpdf 不在移动设备上生成 PDF。在台式机上完美运行
Posted
技术标签:
【中文标题】Mpdf 不在移动设备上生成 PDF。在台式机上完美运行【英文标题】:MPdf not generating PDF on mobile devices. Works perfectly on desktops 【发布时间】:2019-09-02 12:27:16 【问题描述】:我正在使用 8.0 版的 MPdf 和 php 7.1 版。 这是我的代码。
function generatePDF($order)
$html = getHTML($order);
try
$mpdf = new \Mpdf\Mpdf(['margin_left' => 20,
'margin_right' => 15,
'margin_top' => 48,
'margin_bottom' => 25,
'margin_header' => 10,
'margin_footer' => 10]);
$mpdf->SetProtection(array('print'));
$mpdf->SetDisplayMode('fullpage');
$mpdf->WriteHTML($html);
$mpdf->Output('ABCD.pdf','I');
catch (\Mpdf\MpdfException $e) // Note: safer fully qualified exception name used for catch
// Process the exception, log, print etc.
$error = $e->getMessage();
echo $e->getMessage();
此代码非常适合桌面。如果我使用笔记本电脑或任何台式机,它可以很好地生成 PDF。但是,当我在移动设备上查看它时,它不会下载任何 PDF。它也不会抛出任何异常或错误。
我已经调试了每一行代码,每一行都按预期执行得很好,只是没有生成 PDF。
【问题讨论】:
一些移动浏览器对 PDF 有点挑剔。你用的是什么浏览器 谷歌浏览器,Firefox 移动版RiggsFolly,它只是无法在移动端运行。 尝试在您的手机上下载 Adobe Acrobat Reader 应用程序,看看是否可行。 【参考方案1】:可以使用F
参数代替$mpdf->Output('ABCD.pdf','I');
中的I
参数。有关更多信息,请参阅链接 here。
F
参数在服务器的特定目录下创建文件没有任何问题,通常使用I
或D
参数:$mpdf->Output('/DIRABCD.pdf','F');
之后,您可以使用 PHP 中的 readfile()
或 fread()
函数强制浏览器(手机或 PC)下载文件。
代码是这样的:
function generatePDF($order)
$html = getHTML($order);
try
$mpdf = new \Mpdf\Mpdf(['margin_left' => 20,
'margin_right' => 15,
'margin_top' => 48,
'margin_bottom' => 25,
'margin_header' => 10,
'margin_footer' => 10]);
$mpdf->SetProtection(array('print'));
$mpdf->SetDisplayMode('fullpage');
$mpdf->WriteHTML($html);
$mpdf->Output('/DIR/ABCD.pdf','F');
ob_start();
header("Content-type:application/pdf");
header("Content-Disposition:attachment;ABCD.pdf");
readfile("/DIR/ABCD.pdf");
exit;
catch (\Mpdf\MpdfException $e) // Note: safer fully qualified exception name used for catch
// Process the exception, log, print etc.
$error = $e->getMessage();
echo $e->getMessage();
【讨论】:
【参考方案2】:在将 HTML 写入 pdf 之前,请尝试清理缓冲区。这是您的更新代码。
function generatePDF($order)
$html = getHTML($order);
try
$mpdf = new \Mpdf\Mpdf(['margin_left' => 20,
'margin_right' => 15,
'margin_top' => 48,
'margin_bottom' => 25,
'margin_header' => 10,
'margin_footer' => 10]);
$mpdf->SetProtection(array('print'));
$mpdf->SetDisplayMode('fullpage');
ob_get_clean(); // Add this line before writing the HTML
$mpdf->WriteHTML($html);
$mpdf->Output('/DIR/ABCD.pdf','F');
exit;
catch (\Mpdf\MpdfException $e) // Note: safer fully qualified exception name used for catch
// Process the exception, log, print etc.
$error = $e->getMessage();
echo $e->getMessage();
【讨论】:
以上是关于Mpdf 不在移动设备上生成 PDF。在台式机上完美运行的主要内容,如果未能解决你的问题,请参考以下文章
如何在台式机上调试 Android 的原生浏览器(不是 Chrome)?