需求:
将页面中内容以pdf形式导出
准备:
TCPDF 地址: https://tcpdf.org/
使用 composer 安装即可,在 packagist 的地址是 :https://packagist.org/packages/tecnickcom/tcpdf
思路:
前端获取到要导出页面的html传递给后端,后端通过tcpdf来进行导出操作。
前端代码如下:
//...... <form id="html_form" method="post" action="your action"> <input hidden name="html" id="html_vaue"/> </form> <div> //要导出的内容 <span id="pdf-content"> //...... </span> <button type="button" onclick="exPdf()" class="submission">导出pdf</button> </div> //...... <script> function exPdf() { var html = document.getElementById("pdf-content").innerHTML; $("#html_vaue").val(html); $('#html_form').submit(); } </script>
后端代码如下:
class PdfController { public function getPage($html){ $pageHtml = <<<EOF <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <div> {$html} </div> </body> </html> EOF; return $pageHtml; } /** * 生成pdf文件 */ public function createPdfAction(){ //引入tcpdf $door = dirname( $this->container->get('kernel')->getRootDir() ). DIRECTORY_SEPARATOR; require_once implode('/', [$door, 'vendor/tecnickcom/tcpdf/tcpdf.php']); //生成pdf文件名以及对应内容 $html = $this->getPage(self::$request->get("html","")); $file_name = self::$request->get("file_name","pdf".time()).'.pdf'; //替换\n $html = str_replace("\n","",$html); //TCPDF使用 $pdf = new \TCPDF(); $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); $pdf->setFontSubsetting(false); $pdf->SetFont('stsongstdlight', '', 10, '', false); $pdf->AddPage(); //写入html I:在浏览器中打开,D:下载,F:在服务器生成pdf ,S:只返回pdf的字符串 $pdf->writeHTML($html, true, false, true, false, ''); $pdf->Output($file_name, 'D'); exit(); } }
转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/25393.html


微信打赏

支付宝打赏
感谢您对作者Miya的打赏,我们会更加努力! 如果您想成为作者,请点我