目录

参考资料:TCPDF

控件说明

效果图

实现代码


参考资料:TCPDF

控件功能说明

  • 基本功能不需要外部库;
  • 所有标准页面格式、自定义页面格式、自定义边距和计量单位;
  • UTF-8 Unicode 和从右到左的语言;
  • TrueTypeUnicode、OpenTypeUnicode、TrueType、OpenType、Type1 和 CID-0 字体;
  • 字体子集;
  • 发布一些 XHTML + CSS 代码、Javascript 和表单的方法;
  • 图像、图形(几何图形)和转换方法;
  • 原生支持 JPEG、PNG 和 SVG 图像,GD 支持的所有图像(GD、GD2、GD2PART、GIF、JPEG、PNG、BMP、XBM、XPM)和 ImagMagick 支持的所有图像(http:www.imagemagick.org/www/格式.html)
  • 一维和二维条码:CODE 39、ANSI MH10.8M-1983、USD-3、3 of 9、CODE 93、USS-93、Standard 2 of 5、Interleaved 2 of 5、CODE 128 A/B/C、2 和5 位基于 UPC 的扩展、EAN 8、EAN 13、UPC-A、UPC-E、MSI、POSTNET、PLANET、RMS4CC(Royal Mail 4-state Customer Code)、CBC(Customer Bar Code)、KIX(Klant index -客户索引)、智能邮件条码、Onecode、USPS-B-3200、CODABAR、CODE 11、PHARMACODE、PHARMACODE TWO-TRACKS、Datamatrix ECC200、QR-Code、PDF417;
  • ICC 颜色配置文件、灰度、RGB、CMYK、专色和透明胶片;
  • 自动页眉页脚管理;
  • 高达 256 位的文档加密和数字签名认证;
  • UNDO 命令的事务;
  • PDF 注释,包括链接、文本和文件附件;
  • 文本渲染模式(填充、描边和剪裁);
  • 多列模式;
  • 无写页面区域;
  • 书签和目录;
  • 文本连字符;
  • 文本拉伸和间距(跟踪/字距调整);
  • 自动分页、换行和文本对齐,包括对齐;
  • 自动页码和页组;
  • 移动和删除页面;
  • 页面压缩(需要 php-zlib 扩展);
  • XOBject 模板;
  • PDF/A-1b (ISO 19005-1:2005) 支持。

效果图

实现代码

<?php
/*** Created by PhpStorm.* User: Administrator* Date: 2019/8/30* Time: 14:10*/
namespace app\nim\controller;
class Pdf
{/** 生成pdf* @param     string  $html           内容* @param     string  $title          标题* @param     string  $fileName       生成的文件名称* @param    string  $synthesis      要合成的图片路径* @param   number  $x              x轴* @param     number  $y              Y轴* @param     number  $m              图片宽度* @param   number  $h              图片高度* @param   number  $setPage        图片放置在第几页* @param   array   $info           * @param   number  $pdf_type       新的PDF存储路径标识 2019/10/23* @return    合成正确返回PDF路径  合成失败返回为false*/public function pdfRender_D($html, $title = '', $fileName, $synthesis = [], $info){//新增路径标识$path = '/static/uploads/preview/' . date('Ym') . '/';//文件存放路径$directory=ROOT_PATH.'public';//根目录$is_path       = $directory. $path;//全路径//检测并创建文件夹if ($this->exists_dir($is_path) === false) {return false;}// GetX获取x轴坐标  GetY获取y轴坐标$pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);//A4  PDF_PAGE_FORMAT//设置件信息$pdf->SetCreator(PDF_CREATOR);$pdf->SetAuthor(str_replace("http://", "", $_SERVER['HTTP_HOST']));$pdf->SetTitle($title);$pdf->SetSubject($title);$pdf->SetKeywords('TCPDF, PDF, example, test, guide,PHP');// 设置间距$pdf->setPrintHeader(false);$pdf->setPrintFooter(false);//设置默认等宽字体$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);//设置间距   左侧、上侧、右侧的间距$pdf->SetMargins(PDF_MARGIN_LEFT, 11, PDF_MARGIN_RIGHT);//PDF_MARGIN_TOP//$pdf->SetFooterMargin(0);$pdf->setCellPaddings(0, 0, 0, 0);$pdf->SetLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(0, 0, 0)));//设置自动分页符//$pdf->MultiCell(0, 0, 'DISK CACHING TEST: check the parameters of the class constructor.', 1, 'L', 0, 0, '', '', true);$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);//设置图像比例因子$pdf->setCellHeightRatio(1.2);//设置单元格行高  1.3   1.2$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);$pdf->SetFont('stsongstdlight', '', 13); //设置中文显示$pdf->AddPage();$pdf->Cell(0, 1.2, '', 0, 1, 'C');//1.5$pdf->writeHTML($html);//时间要的多//PDF添加图片$num_num = $pdf->getNumPages();//获取当前页码if ($synthesis) {$count = count($synthesis);foreach ($synthesis as $k => $v) {if ($count > 10 && isset($v['qm'])) {//签名标记$v['setPage'] = $num_num - 1;}if (!isset($v['h'])) {$v['h'] = '';}if (isset($v['setPage'])) {$pdf->setPage($v['setPage']);//setPage 在那样插入图片  默认为最后一页   $k>=6 ||  图片太多要加新页面}$pdf->Image($v['org'], $v['x'], $v['y'], $v['w'], $v['h'], '', '', '', false, 300);//时间要的多if (isset($v['html']) && $v['html']) {$pdf->writeHTMLCell('', '', $v['x'] - 5, $v['y'] + 8, $v['html'], '', 0, 0, true, 'L', true);}}}//添加二维码  on_off=1 开启  set_page 二维码放置在第几页$this->qr_code_pdf(['pdf' => $pdf, 'uniq_key' => $info['uniq_key'] ?? '','on_off' => $info['on_off'] ?? 0,'set_page' => $info['set_page'] ?? $num_num,'num_num' => $num_num,'is_wine' => $info['wine_footer'] ?? 0,//0股权 其他为酒业]);//分页$this->footer($pdf);//自定义分页$pdf->Output($is_path . $fileName . ".pdf", "F");$url = $path . $fileName . ".pdf";if (file_exists($is_path . $fileName . ".pdf") !== false) {return $url;}return false;}/*Page footer 自定义分页 *param object PDF插件对象*param array   $info['uniq_key'] 唯一标识* */public function footer($pdf): void{$page=1;//页码//$pdf->setPage(1);//设置页面//用此函数可以设置可选边框,背景颜色和HTML文本字符串来输出单元格(矩形区域)  W:设置单元格宽度。0,伸展到右边幅的距离  H:设置单元格最小的高度  X:以左上角为原点的横坐标  Y:以左上角为原点的纵坐标  Html:html文本  Border:边框  Ln:0,单元格后的内容插到表格右边或左边,1,单元格的下一行,2,在单元格下面  Fill:填充   Reseth:true,重新设置最后一行的高度  Align:文本的位置  Autopadding:true,自动调整文本到边框的距离。$pdf->writeHTMLCell('', '', 14, 2, '<span style="color:#000;">' . $page . '  page</span>', '2', 0, 0, true, 'L', true);$pdf->writeHTMLCell('', '', 80, 2, '<span style="color:#000;">页眉内容</span>', '2', 0, 0, true, 'L', true);//设置单行单元格:W:设置单元格的宽  H:设置单元格的高  Text:单元格文本  Border:设置单元格的边框。0,无边框,1,一个框,L,左边框,R,右边框,B, 底边框,T,顶边框,LTRB指四个边都显示   Ln:0,单元格后的内容插到表格右边或左边,1,单元格的下一行,2,在单元格下面   Align:文本位置。L,左对齐,R,右对齐,C,居中,J,自动对齐  Fill:填充。false,单元格的背景为透明,true,单元格必需被填充   Link:设置单元格文本的链接。$pdf->SetY(8);$pdf->Cell(180, 0, '', 1, 0, 'C', 0, '', 0, true);//180}/*** Notes:pdf 加二维码  http:/hw.com/sign/pdf/demo* User: ZHOU WEI YUN* Date: 2021/9/23 0023* Time: 下午 5:37* @param array $arr on_off=1 开启添加二维码  uniq_key:唯一标识 pdf控件对象  set_page放置页面* @return void*/public function qr_code_pdf(array $arr): void{//生成二维码  文档 https://tcpdf.org/examples/example_027/if (!empty($arr['on_off']) && $arr['on_off'] === 1) {if ($arr['num_num'] < $arr['set_page']) {$arr['set_page'] = $arr['num_num'];}//二维码链接$url = $this->site() . '/h5_contract_url/' . $arr['uniq_key'];$arr['pdf']->setPage($arr['set_page']);//二维码放置指定的页面$style = array('border' => false,'padding' => 0,'fgcolor' => array(0, 0, 0),'bgcolor' => false, //array(255,255,255)//'module_width' => 1, // width of a single module in points//'module_height' => 1 // height of a single module in points);//生成二维码$arr['pdf']->write2DBarcode($url, 'QRCODE,L', 16, 12, 17, 17, $style, 'N');}}/*** Notes: 获取当前域名* User: ZHOU WEI YUN* Date: 2022/2/12 0012* Time: 上午 11:38* @param array* @return string*/public function site(): string{return $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_NAME'];}/*** Notes: 检测文件夹是否存在 不存在自动创建文件夹* User: ZHOU WEI YUN* Date: 2021/3/23 0023* Time: 上午 10:51* @param string $path 文件的绝对路径* @return bool  false 文件创建失败 其他返回为true*/public function exists_dir(string $path): bool{if (file_exists($path) === false) {$path     = str_replace("\\", '/', $path);$path_arr = explode('/', $path);$ping     = '';//循环逐级检测 不存在则创建foreach ($path_arr as $k => $v) {$ping .= $v . '/';if (file_exists($ping) === false && !mkdir($ping, 755) && is_dir($ping)) {return false;}}}return true;}public function demo(){$title='标题';//标题$fileName='demo';//文件名称$html='<div><table style="width: 750px;overflow:hidden;" align="center" border="1" cellspacing="0" cellpadding="0"style="background: #fff;"><tr style="width:750px"><td colspan="4"><table frame="void" cellspacing="0" cellpadding="0"><tr style="border: none;height: 30px;line-height:30px;margin: 0;padding: 0;" frame="void"><td colspan="4" style="text-align: center;border: none;font-size: 20px;height: 45px;line-height:55px;font-weight: bold;">表格demo</td></tr><tr style="font-size: 18px;height: 30px;" frame="void"><td  style="border: none;width: 71%;">制表编号:6564646</td></tr><tr style="height: 10px;" ><td  style="width: 29%;"></td><td  style="border: none;width: 71%;"></td></tr><tr style="font-size: 16px;text-align:left;border: none;height: 30px;margin:0"><td style="border: none;font-size:16px;height: 30px;text-indent:15px;width:80%;" >制表日期:<span class="year">2022&nbsp;</span>年&nbsp;<span class="month">02&nbsp;</span>月&nbsp;<span class="date">15&nbsp;</span>日</td></tr><tr style="padding: 0;width: 100%;"><td colspan="4" style="border: none;width: 100%;"><table style="width: 95%;font-size: 16px;margin: 0;padding: 0;" border="1" cellspacing="0" cellpadding="0"><tr style="height: 33px;line-height: 33px;text-align: left;"><td class="widthL" style="width:24%;height: 33px;text-indent: 8px;">制表人姓名</td><td style="text-align: left;text-indent: 10px;">张大头</td><td class="widthL" style="width:22%;height: 33px;text-indent: 8px;">身份证号</td><td style="width:29%;text-align: left;text-indent: 10px;">54657987978</td></tr><tr style="height: 33px;line-height: 33px;text-align: left;"><td class="widthL" style="width:24%;height: 33px;text-indent: 8px;">制表事项</td><td colspan="3" style="text-align: left;text-indent: 10px;">我就玩玩</td></tr><tr style="height: 33px;line-height: 33px;text-align: left;"><td rowspan="4" style="height: 33px;text-indent: 8px;"><br/><span>&nbsp;&nbsp;参</span><br/><span>&nbsp;&nbsp;与</span><br/><span>&nbsp;&nbsp;人</span><br/><span>&nbsp;&nbsp;员</span></td><td style="text-align: left;text-indent: 10px;">行政部</td><td colspan="2" class="widthL" style="height: 33px;text-indent: 8px;">欣小萌</td></tr><tr style="height: 33px;line-height: 33px;text-align: left;"><td  style="text-align: left;text-indent: 10px;">人力中心</td><td colspan="2" class="widthL" style="height: 33px;text-indent: 8px;">肖宇航</td></tr><tr style="height: 33px;line-height: 33px;text-align: left;"><td  style="text-align: left;text-indent: 10px;">采购中心</td><td colspan="2" class="widthL" style="height: 33px;text-indent: 8px;">陈小红</td></tr><tr style="height: 33px;line-height: 33px;text-align: left;"><td  style="text-align: left;text-indent: 10px;">销售部</td><td colspan="2" class="widthL" style="height: 33px;text-indent: 8px;">小流氓</td></tr><tr style="height: 33px;line-height: 33px;text-align: left;"><td class="widthL" style="height: 33px;text-indent: 8px;">项目费用</td><td colspan="2" style="text-align: left;text-indent: 10px;">1000000&nbsp;</td><td  style="height: 33px;text-indent: 8px;">1000000</td></tr><tr style="height: 33px;line-height: 33px;text-align: left;"><td  style="text-align: left;text-indent: 10px;">备注</td><td colspan="3" class="widthL" style="height: 33px;text-indent: 8px;">PHP生成PDFdemo制作</td></tr></table></td></tr><tr><td style="height:15px;"></td></tr></table></td></tr></table><p style="height: 20px;"></p><p style="width:750px;padding-bottom:30px;text-indent:0;font-size: 16px;"><span>审核人:哭一下&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>经办人:陶渊明&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p><p style="height: 30px;"></p>
</div>
';//文件内容:支持HTML+css$synthesis=[];//图片水印 可多个$synthesis[0]['org']=ROOT_PATH.'public/static/111.png';$synthesis[0]['x']=155;$synthesis[0]['y']=12;//156$synthesis[0]['w']=40;$synthesis[0]['h']=40;$info=[];//二维码相关参数echo $this->pdfRender_D($html, $title, $fileName, $synthesis, $info);//生成PDF}
}

PHP生成PDF-TCPDF相关推荐

  1. php+tcpdf+表格,PHP中使用TCPDF生成PDF文档实例

    实际工作中,我们要使用PHP动态的创建PDF文档,目前有许多开源的PHP创建PDF的类库,今天我给大家来介绍一款优秀的PDF库,它就是TCPDF,TCPDF是一个用于快速生成PDF文件的PHP5函数包 ...

  2. php生成pdf乱码_php+tcpdf生成pdf: 中文乱码

    TCPDF是一个生成PDF的不错的库,可惜,官方对包括中文在内的东亚字体支持不怎么样的. 场景:某项目需要根据数据库信息生成pdf格式的发票,考虑采用稳定的tcpdf,虽然还有许多其它选择,但是这个应 ...

  3. PHP生成PDF完美支持中文,解决TCPDF乱码

    PHP生成PDF完美支持中文,解决TCPDF乱码 2011-09-26 09:04 418人阅读 评论(0) 收藏 举报 phpfontsheaderttfxhtml文档 PHP生成PDF完美支持中文 ...

  4. PHP操作tcpdf插件生成PDF

    //本文非原创,我只是总结一下,以便使用 //官网有很多案例,很具有参考性,特别适合初学者了解 //网址:https://tcpdf.org/ 1. TCPDF布局时常用的方法 TCPDF::SetA ...

  5. PHP 使用TCPDF插件生成pdf以及pdf的中文处理

    转自 andy1219111的博客 http://blog.csdn.net/andy1219111/article/details/24348761 做了这么多年项目,以前只是在别人的项目中了解过p ...

  6. php生成pdf中文断码_PHP生成PDF完美支持中文,解决TCPDF乱码

    //生成pdf最近会用到,找到一些资料,非原创 PHP生成PDF格式文件以TCPDF为基础,TCPDF是一个用于快速生成PDF文件的PHP5函数包.TCPDF基于FPDF进行扩展和改进.支持UTF-8 ...

  7. PDF生成插件--TcPDF

    前言 上星期给毕设网站添加了markdown编辑器,然后周末突然想到如果给编辑器添加一个导出pdf的功能应该挺不错的(话说简书为啥不能导出pdf呢),所以就从网上找了一个生成pdf的PHP插件,叫做 ...

  8. 使用TCPDF插件生成pdf以及pdf的中文处理

    做了这么多年项目,以前只是在别人的项目中了解过php生成pdf文件,知道并不难,但是涉及到了pdf开发库,首先介绍pdf库. 多种多样的pdf开发库 1.WKHTMLTOPDF wkhtmltopdf ...

  9. ThinkPHP5/PHP 使用TCPDF 生成PDF文件

    由于公司业务需求,需要生成PDF文件. 网上找了一些解决方案,很多是使用composer插件解决问题的.由于同事的顾虑,建议.把网上找的TCPDF插件包,当作第三方组件来使用,放在extend 扩展文 ...

  10. TCPDF生成PDF文件方法教程说明

    TCPDF生成PDF文件方法教程说明 TCPDF下载: composer: 在packagist中所搜tcpdf (https://packagist.org/packages/tecnickcom/ ...

最新文章

  1. java 范型 约束
  2. iPhone XS MAX全球首碎!一看官方维修价 网友:修不起!
  3. java异常处理学习总结
  4. 写给用我的“新闻推荐项目”做毕设的同学们
  5. 集美大学java考试题_我的JAVA习题集2
  6. Python到底是什么?Python发展前景好吗?
  7. oracle until freed,ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法...
  8. hadoop-0.20.1+120 hive-0.3.99.1+0 试用hwi(hive web interface
  9. c++ string replace_「Java学习」String,StringBuffer和StringBuilder的区别
  10. CSS选择器常见用法
  11. python 圆周率_圆周率 python
  12. iphone4电信版怎么写号_电信iphone4如何剪卡以及写号
  13. 苹果电脑(macOS)查看 WiFi 密码的两种方法
  14. 如何用HTML和css实现拼图,打造自己的html5拼图小游戏
  15. MS-DOS系统下的autoexec.bat
  16. 手机html5活体检测,手把手教你做实时活体检测系统
  17. matlab计算下列极限,MATLAB微积分计算极限,又快又好
  18. 感受生命的伟大,努力绽放生命!
  19. 新南预科计算机学什么,留学生亲述新南威尔士大学学习心得
  20. 交流异步电机矢量控制(四)——simulink仿真搭建

热门文章

  1. 常用的maven命令如下
  2. win7摄像头软件_5款用起来超爽的Windows高效软件
  3. PTA L1-020 帅到没朋友 (20 分)(C++)
  4. 帅到没朋友 (20 分)
  5. FL Studio 教程之扫弦简介
  6. 安化县东坪完小师生们顺利完成云台山风景区研学之旅
  7. RHEL5.5下载地址及安装序列号
  8. 什么是MOS管驱动电路,如何理解MOS管驱动电路原理?
  9. 烟台大学CSDN俱乐部参加2012移动开发者大会见闻
  10. ch不是小写英文字母的c语言代码,函数fun的功能是进行字母转换。若形参ch中是小写英文字母,则转换成对应的大写英文字母;若ch中是大写英文字母,则...