一.需求
最近接到一个需求,该需求为:批量导出推荐表导出需为PDF格式,且只能有2页。
二.实现
1.曲折的过程
1)百度、谷歌搜了许多相关的材料,发现对php中html转pdf的资料非常少。但是啦,黄天不符有心人,最终还是找的了一份勉强看得懂的。(链接:https://www.cnblogs.com/zx-admin/p/6801978.html
)
2)将TCPDF代码下载到本地
[图片上传失败…(image-63bb22-1604636933694)]
.png)
3)使用examples
的例子(我这里使用的是第一个例子)
4)根据导出模板写了一个html文件,代码和效果如下
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<style>
table {
text-align: left;
margin: 0 auto;
border: 1px solid #000000;
font-weight: 700;
}
.td-height {
height: 70px;
font-weight: 700;
}
.title {
text-align: center;
}
.title .tjb {
font-size: 30px;
}
</style>
<div class="title">
<img src="http://www.nucibc2.dev.com/Public/data/src/tjb_top.png" width="200">
<span class="tjb">111届毕业生就业推荐表</span>
</div>
<table class="top">
<tbody>
<tr>
<td class="td-height" style="border: 1px solid #000000">姓名</td>
<td class="td-height" style="border: 1px solid #000000">
田*
</td>
<td class="td-height" style="border: 1px solid #000000">性别</td>
<td class="td-height" style="border: 1px solid #000000">男</td>
<td class="td-height" style="border: 1px solid #000000">民族</td>
<td class="td-height" style="border: 1px solid #000000">
汉
</td>
<td rowspan="3" colspan="2" cellpadding="0" style="border: 1px solid #000000" height="230">
<img src="http://www.nucibc2.dev.com/Public/data/tjb/5eb8f24808179.jpg" style=" width:166px;height: 230px;margin: 0;
" alt="">
</td>
</tr>
<tr>
<td class="td-height" style="border: 1px solid #000000">专业</td>
<td class="td-height" style="border: 1px solid #000000">网络技术</td>
<td class="td-height" style="border: 1px solid #000000">学历</td>
<td class="td-height" style="border: 1px solid #000000"> 大专</td>
<td class="td-height" style="border: 1px solid #000000">学制</td>
<td class="td-height" style="border: 1px solid #000000">3</td>
</tr>
<tr>
<td class="td-height" style="border: 1px solid #000000">出生<br/>日期</td>
<td class="td-height" style="border: 1px solid #000000">1996***</td>
<td class="td-height" style="border: 1px solid #000000">健康<br/>状况</td>
<td class="td-height" style="border: 1px solid #000000">良好</td>
<td class="td-height" style="border: 1px solid #000000">身高</td>
<td class="td-height" style="border: 1px solid #000000">170</td>
</tr>
<tr>
<td class="td-height" style="border: 1px solid #000000">身份证<br/>号码</td>
<td class="td-height" colspan="3" style="border: 1px solid #000000">513433</td>
<td class="td-height" style="border: 1px solid #000000">籍贯</td>
<td class="td-height" colspan="3" style="border: 1px solid #000000">
四川冕宁
</td>
</tr>
<tr>
<td class="td-height" style="border: 1px solid #000000">计算机<br/>等级</td>
<td class="td-height" style="border: 1px solid #000000">二级</td>
<td class="td-height" style="border: 1px solid #000000">外语<br/>等级</td>
<td class="td-height" style="border: 1px solid #000000">4</td>
<td class="td-height" style="border: 1px solid #000000">邮箱</td>
<td class="td-height" colspan="3" style="border: 1px solid #000000">251@qq.com</td>
</tr>
<tr>
<td class="td-height" style="border: 1px solid #000000">本人<br/>电话</td>
<td class="td-height" style="border: 1px solid #000000">151</td>
<td class="td-height" colspan="" style="border: 1px solid #000000">家庭<br/>电话</td>
<td class="td-height" colspan="" style="border: 1px solid #000000">191</td>
<td class="td-height" colspan="" style="border: 1px solid #000000">家庭<br/>住址</td>
<td class="td-height" colspan="3" style="border: 1px solid #000000">四川</td>
</tr>
<tr>
<td class="td-height" style="border: 1px solid #000000">在校担<br/>任职务</td>
<td colspan="3" style="border: 1px solid #000000">测试职位</td>
<td class="td-height" colspan="" style="border: 1px solid #000000">特长</td>
<td colspan="3" style="border: 1px solid #000000"></td>
</tr>
<tr>
<td style="border: 1px solid #000000">自<br/>我<br/>总<br/>结</td>
<td colspan="7" style="height:320px;border: 1px solid #000000"><p>自我总结111</p></td>
</tr>
<tr>
<td style="border: 1px solid #000000">在<br/>校<br/>期<br/>间<br/>获<br/>奖<br/>情<br/>况</td>
<td colspan="7" style="height: 320px;border: 1px solid #000000"><p>获奖</p></td>
</tr>
<tr>
<td style="border: 1px solid #000000" rowspan="2">学<br/>生<br/>在<br/>校<br/>表<br/>现<br/>情<br/>况</td>
<td colspan="7" style="height: 300px;">
<p>在校基本情况111</p>
</td>
</tr>
<tr>
<td colspan="8">
<span style="width: 100%;">班主任签字: <span> 年 月 日</span></span>
</td>
</tr>
<tr>
<td style="height: 50px;border: 1px solid #000000;" colspan="4">系 部 推 荐 意 见</td>
<td style="height: 50px;border: 1px solid #000000;" colspan="4"><p>学 院 推 荐 意 见</p></td>
</tr>
<tr>
<td style="height: 200px;border: 1px solid #000000;" colspan="4">
<div style="height: 150px;text-align: right;">
<p>签 章 </p>
<p>年 月 日</p>
</div>
</td>
<td style="height: 200px;border: 1px solid #000000;" colspan="4">
<div style="height: 150px;text-align: right;">
<p>签 章 </p>
<p>年 月 日</p>
</div>
</td>
</tr>
</tbody>
</table>
</body>
</html>
5)根据这个html,将example_001.php
的得代码进行更改(不用它定义的常量),代码和效果如下:
<?php
require_once('../tcpdf.php');
$pdf = new \TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);
$pdf->SetCreator('TCPDF');
$pdf->setPrintFooter(false);
$pdf->setPrintHeader(false);
$pdf->SetDefaultMonospacedFont('courier');
$pdf->SetDefaultMonospacedFont('courier');
$pdf->SetMargins(15, 15, 15);
$pdf->SetHeaderMargin(0);
$pdf->SetFooterMargin(0);
$pdf->SetAutoPageBreak(true, 25);
$pdf->setImageScale(1.25);
$pdf->setFontSubsetting(false);
$pdf->SetFont('stsongstdlight', '', 10);
$pdf->AddPage();
$pdf->setTextShadow(array('enabled' => false, 'depth_w' => 0.2, 'depth_h' => 0.2, 'color' => array(196, 196, 196), 'opacity' => 1, 'blend_mode' => 'Normal'));
$html = '<style>
table {
text-align: left;
margin: 0 auto;
border: 1px solid #000000;
font-weight: 700;
}
.td-height {
height: 70px;
font-weight: 700;
}
.title {
text-align: center;
}
.title .tjb {
font-size: 30px;
}
</style>
<div class="title">
<img src="" width="200">
<span class="tjb">111届毕业生就业推荐表</span>
</div>
<table class="top">
<tbody>
<tr>
<td class="td-height" style="border: 1px solid #000000">姓名</td>
<td class="td-height" style="border: 1px solid #000000">
田*
</td>
<td class="td-height" style="border: 1px solid #000000">性别</td>
<td class="td-height" style="border: 1px solid #000000">男</td>
<td class="td-height" style="border: 1px solid #000000">民族</td>
<td class="td-height" style="border: 1px solid #000000">
汉
</td>
<td rowspan="3" colspan="2" cellpadding="0" style="border: 1px solid #000000" height="230">
<img src="http://www.nucibc2.dev.com/Public/data/tjb/5eb8f24808179.jpg" style=" width:166px;height: 230px;margin: 0;
" alt="">
</td>
</tr>
<tr>
<td class="td-height" style="border: 1px solid #000000">专业</td>
<td class="td-height" style="border: 1px solid #000000">网络技术</td>
<td class="td-height" style="border: 1px solid #000000">学历</td>
<td class="td-height" style="border: 1px solid #000000"> 大专</td>
<td class="td-height" style="border: 1px solid #000000">学制</td>
<td class="td-height" style="border: 1px solid #000000">3</td>
</tr>
<tr>
<td class="td-height" style="border: 1px solid #000000">出生<br/>日期</td>
<td class="td-height" style="border: 1px solid #000000">1996.6</td>
<td class="td-height" style="border: 1px solid #000000">健康<br/>状况</td>
<td class="td-height" style="border: 1px solid #000000">良好</td>
<td class="td-height" style="border: 1px solid #000000">身高</td>
<td class="td-height" style="border: 1px solid #000000">170</td>
</tr>
<tr>
<td class="td-height" style="border: 1px solid #000000">身份证<br/>号码</td>
<td class="td-height" colspan="3" style="border: 1px solid #000000">513433</td>
<td class="td-height" style="border: 1px solid #000000">籍贯</td>
<td class="td-height" colspan="3" style="border: 1px solid #000000">
四川
</td>
</tr>
<tr>
<td class="td-height" style="border: 1px solid #000000">计算机<br/>等级</td>
<td class="td-height" style="border: 1px solid #000000">二级</td>
<td class="td-height" style="border: 1px solid #000000">外语<br/>等级</td>
<td class="td-height" style="border: 1px solid #000000">4</td>
<td class="td-height" style="border: 1px solid #000000">邮箱</td>
<td class="td-height" colspan="3" style="border: 1px solid #000000">251122@qq.com</td>
</tr>
<tr>
<td class="td-height" style="border: 1px solid #000000">本人<br/>电话</td>
<td class="td-height" style="border: 1px solid #000000">151</td>
<td class="td-height" colspan="" style="border: 1px solid #000000">家庭<br/>电话</td>
<td class="td-height" colspan="" style="border: 1px solid #000000">191</td>
<td class="td-height" colspan="" style="border: 1px solid #000000">家庭<br/>住址</td>
<td class="td-height" colspan="3" style="border: 1px solid #000000">四川</td>
</tr>
<tr>
<td class="td-height" style="border: 1px solid #000000">在校担<br/>任职务</td>
<td colspan="3" style="border: 1px solid #000000">测试职位</td>
<td class="td-height" colspan="" style="border: 1px solid #000000">特长</td>
<td colspan="3" style="border: 1px solid #000000"></td>
</tr>
<tr>
<td style="border: 1px solid #000000">自<br/>我<br/>总<br/>结</td>
<td colspan="7" style="height:320px;border: 1px solid #000000"><p>自我总结111</p></td>
</tr>
<tr>
<td style="border: 1px solid #000000">在<br/>校<br/>期<br/>间<br/>获<br/>奖<br/>情<br/>况</td>
<td colspan="7" style="height: 320px;border: 1px solid #000000"><p>获奖</p></td>
</tr>
<tr>
<td style="border: 1px solid #000000" rowspan="2">学<br/>生<br/>在<br/>校<br/>表<br/>现<br/>情<br/>况</td>
<td colspan="7" style="height: 300px;">
<p>在校基本情况111</p>
</td>
</tr>
<tr>
<td colspan="8">
<span style="width: 100%;">班主任签字: <span> 年 月 日</span></span>
</td>
</tr>
<tr>
<td style="height: 50px;border: 1px solid #000000;" colspan="4">系 部 推 荐 意 见</td>
<td style="height: 50px;border: 1px solid #000000;" colspan="4"><p>学 院 推 荐 意 见</p></td>
</tr>
<tr>
<td style="height: 200px;border: 1px solid #000000;" colspan="4">
<div style="height: 150px;text-align: right;">
<p>签 章 </p>
<p>年 月 日</p>
</div>
</td>
<td style="height: 200px;border: 1px solid #000000;" colspan="4">
<div style="height: 150px;text-align: right;">
<p>签 章 </p>
<p>年 月 日</p>
</div>
</td>
</tr>
</tbody>
</table>
';
$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 0, 0, false, 'center', true);
$res = $pdf->Output('example_065.pdf', 'S');
file_put_contents('./bb.pdf', $res);
效果:
6)把生成的效果给领导
2.领导过目
1)把html模板给我发一份,给了,不知道他通过什么生成了pdf文档。
2)然后给我发了一份生成的pdf文件,说跟你发给我的不一样,我说就是通过这个模板生成的呀。
3)我估计领导百度看了一下(他是懂技术的哦),发现php通过html生成pdf的教程非常少。
4)最后说,不用改了,测一下原来的(说明一下,原来的是通过word模板生成word文件)。
3.结论
以后如果有领导让你生成pdf文件(技术栈:php),你可以婉转的拒绝。
最后希望我的博客能帮助到大家。