如何在Laravel/PHP中用mPDF将Base64编码XML附加到PDF?
如何在Laravel/PHP中解码Base64 XML并通过mPDF附加到PDF
你需要处理Base64编码的XML字符串,将其解码后附加到PDF中,替代原示例中读取本地文件的方式。可以按以下步骤实现:
核心思路
mPDF的SetAssociatedFiles方法不仅支持通过path指定本地文件,还支持直接通过content字段传入内存中的文件内容。我们只需先解码Base64字符串,再将解码后的XML内容传入该字段即可。
实现代码
// 假设你的Base64编码XML字符串存储在这里 $base64Xml = '你的Base64编码XML字符串'; // 解码Base64字符串,得到原始XML内容 $decodedXml = base64_decode($base64Xml); // 验证解码是否成功(可选但推荐) if ($decodedXml === false) { throw new \Exception('无效的Base64编码字符串'); } // 初始化mPDF实例 $mpdf = new \Mpdf\Mpdf([ 'PDFA' => true, 'PDFAauto' => true, ]); // 设置关联文件,使用content传入解码后的XML内容 $mpdf->SetAssociatedFiles([[ 'name' => 'attachment.xml', // 附加文件的显示名称 'mime' => 'text/xml', 'description' => '解码后的XML附件', 'AFRelationship' => 'Alternative', 'content' => $decodedXml // 直接传入解码后的内容,替代path字段 ]]); // 写入PDF内容 $mpdf->WriteHTML('<h1>Hello world!</h1>'); // 输出PDF return $mpdf->Output();
注意事项
- 确保
$base64Xml是有效的Base64编码字符串,解码失败时base64_decode会返回false,建议添加错误处理逻辑。 name字段可自定义,是PDF中显示的附件文件名。- 若需要兼容旧版mPDF,可先将解码后的内容写入临时文件,再通过
path指向临时文件(不过推荐直接使用content字段更高效)。
内容的提问来源于stack exchange,提问作者Ahmar Arshad
相关产品推荐
相关产品推荐

