项目需求 需要生成电子报告 并且能够线上签发 所以需要自定义内容并且能够加上电子骑缝章,TCPDF使用直接看手册就行
解决思路如下
· 最 好是使用TCPDF 来实现html和pdf的转化 使用富文本编辑的话要注意 富文本添加以后特别是表格是没有边框的所以你的文本数据入库可以在头部拼接以下内容 实现边框
<style>table {
border-top: 1px solid black;
border-left: 1px solid black;
}
table td,
table th {
border-bottom: 1px solid black;
border-right: 1px solid black;
padding: 3px 5px;
}
table th {
border-bottom: 2px solid black;
text-align: center;
}</style>
如果富文本编辑的内容直接加入进去会导致内容样式变乱,因为pdf里面一般对table 和 p 是支持的最好的当前我的解决方法就是 ,所有富文本内容都放在一个table里面显示
$html = '<p style="height: 40px">测试结论</p>
<p><table border="1px" width="650px" align="left" cellpadding="0" cellspacing="1">
<tr style="text-align: left">
<td>
'.$report_info['report_comclusion'].'
</td>
</tr>
</table>
</p> ';
如果有封面页或者单独页可以单独生成page
$html_page_first = Report::fristPageHtml($report_info['sheet'],$report_info['body']);
$pdf->AddPage();//单独生成注意事项页
$pdf->writeHTML($html_page_first, true, false, true, false, '');
生成以后增加电子骑缝章 思路很简单 根据生成的pdf的页数 把电子章切割成均份贴在每页相同的位置
获取pdf页数
$page_all = $pdf->PageNo();
切割图片 直接上代码吧
//被切割的图片必须是.png结尾的 如果是jpg或者其他格式 下面的某些函数就需要替换
static function cuttingImg($filename,$p){
$img_src = $filename;
$num_pages = $p;
$image = imagecreatefrompng($img_src); //由文件或 URL 创建一个新图象
list($width, $height,$type,$attr) = getimagesize($img_src); //获取尺寸
$offset = ceil($width/$num_pages);
$maxW = $offset;
$maxH = $height;
$widthnum = $num_pages;
$heightnum = 1;
$dir_src = "./new_file/";
$back_msg = true;
for ($i=0;$i<$heightnum;$i++){
for ($j=0;$j<$widthnum;$j++){
$iOut = imagecreatetruecolor($maxW,$maxH);//新建一个真彩色图像
$bg = imagecolorallocatealpha($iOut,0,0,0,127);//为幅图像分配颜色
imagealphablending($iOut,false);
imagefill($iOut,0,0,$bg);//填充
imagesavealpha($iOut,true);//设置保存PNG时 保留透明通道 这个很重要对于透明背景的图片
imagecopy($iOut,$image,0,0,($j*$maxW),($i*$maxH),$maxW,$maxH);//复制图片的一部分
$cutting_img_src = $dir_src.$i."_".$j.".png";
if (!imagepng($iOut,$cutting_img_src)){
$back_msg = false;
}
}
}
if (!$back_msg) return false;
return $maxW;
}
循环页数 每页插入图片
for($i=0;$i<$page_all;$i++){
$pdf->setPage($i+1);
$pdf->Image($pa.'0_'.$i.'.png', 201, 100, "", "", 'png', '', '', false,300); //前三个参数 分别是 图片地址 X、Y轴位置
}
看效果