Tcpdf不使用css来实现线上合同和签章,图片悬浮
前言:以前虽然有了解过Tcpdf的用法,但是没有实际的应用过,最近在用tcpdf的时候发现对css支持很有限,使的如果想实现类似html的种种效果都很难,而我这次要做的就是
图片悬浮在文字上方形成类似水印或者盖章的效果。
由于Tcpdf是由歪果仁写的,所以中文的手册也没有,导致虽然这个工具好多年前就不更新了,国内网上目前类似的资料依然不是很多,
还好英语阅读水平比较过关,又响应开源精神,所以做一下分享,但是我希望大家不要做一个伸手党。另外请支持每个人的原创。下面进入正题
步骤一:下载tcpdf
这里我就不给梯子了,自行百度,然后下载软件,布置好之后可以自己先看看里面给的例子,也许就能找到你想要的效果。这里省略部署,
不论你是tp还是yii或者别的什么请自行部署
步骤二:生成文件
生成中文文件不乱码的解决方法网上很多我就不赘述了。这里需要注意几点
1.生成的文件最好用css比较老的属性,而且最好图片不要用浮动等控制,很多效果都没有作用,
2.文件如果是很长的文档,则需要手动进行断行,也就是</br>,原因是:因为生成pdf排版的时候出现如果文字刚好够一行多一点,Tcpdf会把整个行的一大部分放到
下一行,而不是最后几个字放到下一行(这里Tcpdf判断换行的逻辑很怪,如果你想看看效果你可以不加换行标签测试一下,一定惊喜)而出现如下图的效果:
这里是一部分内容(未满行)
这里是另一部分内容。
步骤三:生成pdf预览
这里需要注意的是,
$pdf->Output($name, 'I');
其中如果输出为页面查看方式则为‘I’,如果想要直接下载则为:‘D’,如果想保存文件则为:‘F’
<?php
function review_pdf($html,$title) {
vendor('Tcpdf.tcpdf');
$pdf = new \Tcpdf(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// 设置打印模式
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Nicola Asuni');
$pdf->SetTitle($title);
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');
// 是否显示页眉
$pdf->setPrintHeader(false);
// 设置页眉显示的内容
$pdf->SetHeaderData('logo.png', 60, 'jr.fccfae.com', $title, array(0, 64, 255), array(0, 64, 128));
// 设置页眉字体
$pdf->setHeaderFont(Array('dejavusans', '', '12'));
// 页眉距离顶部的距离
$pdf->SetHeaderMargin('5');
// 是否显示页脚
$pdf->setPrintFooter(true);
// 设置页脚显示的内容
$pdf->setFooterData(array(0, 64, 0), array(0, 64, 128));
// 设置页脚的字体
$pdf->setFooterFont(Array('dejavusans', '', '10'));
// 设置页脚距离底部的距离
$pdf->SetFooterMargin('10');
// 设置默认等宽字体
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// 设置行高
$pdf->setCellHeightRatio(1.2);
// 设置左、上、右的间距
$pdf->SetMargins('8', '8', '8');
// 设置是否自动分页 距离底部多少距离时分页
$pdf->SetAutoPageBreak(TRUE, '15');
// 设置图像比例因子 1.3可以
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
if (@file_exists(dirname(__FILE__) . '/lang/eng.php')) {
require_once(dirname(__FILE__) . '/lang/eng.php');
$pdf->setLanguageArray($l);
}
$pdf->setFontSubsetting(true);
$pdf->AddPage();
$pdf->SetFont('STSongStdLight', '', 12, '', true);
// $pdf->SetFont('helvetica', '', 14, true);
$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);
//$pdf->MultiCell(0, 5, $html, 0, 'J', 0, 2, '', '', true, 0, false);
$pdf->setPage(1);
$pdf->Image('img/image_with_alpha.png', 50, 50, 100, '', '', 'http://www.tcpdf.org', '', false, 300);
$name = time() . ".pdf";
$pdf->Output($name, 'I');
}
?>
这里有两点比较重要
1.如果要加图片,图片如果在下面就先调用
$pdf->Image();
如果是想要图片悬浮,则需要
先调用$pdf->writeHTMLCell();或者其他的比如MultiCell() 后调用$pdf->Image();
2.如果文件为多页,如果想要控制在某一页加图片,则需要在加图片前调用
$pdf->setPage(1);
里面的1为第一页,按自己的需要添加。