需求:
将页面中内容以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();
}
}