当前位置: 首页 > news >正文

【TCPDF】使用TCPDF导出PDF文件

目录

一、安装TCPDF类库

二、安装字体

三、使用TCPDF导出PDF文件


目的:PHP通过TCPDF类库导出文件为PDF。

开发语言及类库:ThinkPHP、TCPDF

效果图如下

一、安装TCPDF类库

在项目根目录使用composer安装TCPDF,安装完成后会在vendor目录下生成tecnickcom文件夹,就是TCPDF类库

composer require tecnickcom/tcpdf

二、安装字体

有时候导出的文件是乱码,是因为TCPDF不支持中文,所以需要下载中文字体,字体在网上可以搜索下载,把下载好的字体(ttf格式)放到“\tecnickcom\tcpdf\tools\”目录下,在此目录打开CMD,输入

php tcpdf_addfont.php -i .\msyh.ttf

执行成功后,在“\tecnickcom\tcpdf\fonts\”文件夹下生成相应的文件

三、使用TCPDF导出PDF文件

TCPDF类库和字体安装好后,就可以引用TCPDF导出PDF文件了

<?php
use tecnickcom\tcpdf\tcpdf;public function exportPDF(){$objPDF = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);// 是否显示页眉$objPDF->setPrintHeader(false);// 是否显示页脚$objPDF->setPrintFooter(true);// 设置页脚的字体$objPDF->setFooterFont(Array('msyh', '', '8'));// 设置页脚距离底部的距离$objPDF->SetFooterMargin('7');// 设置默认等宽字体$objPDF->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);// 设置行高$objPDF->setCellHeightRatio(1.5);// 设置是否自动分页  距离底部多少距离时分页$objPDF->SetAutoPageBreak(TRUE, '10');$objPDF->setFontSubsetting(true);$objPDF->AddPage();// 设置字体$objPDF->SetFont('msyh', '', 12, '', true);// 调用拼接html代码方法$pdf_html = $this->pdf_html($info,$list,$title);$objPDF->writeHTMLCell(0, 0, '', '', $pdf_html, 0, 1, 0, true, '', true);// 输出  四种模式 I输出、D下载、F保存本地、S输出二进制字符串$objPDF->Output('test.pdf', 'D');
}

上面pdf_html方法是拼接html代码,里面的HTML代码可以根据自己需要修改。CSS样式并不是所有都支持,但也可以用其他HTML标签的代替,比如说font-weight就不支持,可以使用<b></b>代替。

public function pdf_html($info,$list,$title)
{$html = '';$html .= '<h2 style="text-align:center;"><b>'.$title.'</b></h2><table style="text-align:right"><tr><td>班级:'.$info['grade'].'_'.$info['year'].$info['season'].'</td></tr><tr><td>总人数:'.$info['student'].'; 已交卷:'.$info['cmit'].'</td></tr><tr><td>导出时间:'.date('Y-m-d H:i:s',time()).'</td></tr></table>';foreach ($list as $k => $v) {$html .= '<div>【'.$v['type'].'】 第'.($k+1).'题:'.$v['title'].'<br><span style="color: green;">【正确答案:'.$v['answer'].'】</span><b style="color: #1E9FFF"> &nbsp; &nbsp; 正确率:'.$v['percent'].'%</b></div><table  border="1" style="text-align:center"><colgroup><col width="40%"><col width="10%"><col width="50%"><col></colgroup><tr style="background:#f2f2f2; "><th>选项</th><th>选择次数 / 人</th><th>比例</th></tr> <tr><td style="text-align:left">A:'.$v['option_A'].'</td><td>'.$v['sel_A'].'</td><td>'.$v['percent_A'].'%</td></tr><tr><td style="text-align:left">B:'.$v['option_B'].'</td><td>'.$v['sel_B'].'</td><td>'.$v['percent_B'].'% </td></tr><tr><td style="text-align:left">C:'.$v['option_C'].'</td><td>'.$v['sel_C'].'</td><td> '.$v['percent_C'].'% </td></tr><tr><td style="text-align:left">D:'.$v['option_D'].'</td><td>'.$v['sel_D'].'</td><td> '.$v['percent_D'].'% </td></tr><tr><td style="text-align:left">E:'.$v['option_E'].'</td><td>'.$v['sel_E'].'</td><td> '.$v['percent_E'].'% </td></tr><tr><td style="text-align:left">F:'.$v['option_F'].'</td><td>'.$v['sel_F'].'</td><td> '.$v['percent_F'].'% </td></tr><tr><td style="text-align:left">G:'.$v['option_G'].'</td><td>'.$v['sel_G'].'</td><td> '.$v['percent_G'].'% </td></tr><tr><th>作答人数:'.$v['cmit_num'].' 人次</th><th></th><th></th></tr> </table><br/>';}return $html;
}

http://www.lryc.cn/news/167304.html

相关文章:

  • MacBook苹果电脑重装、降级系统
  • Java 解决long类型数据在前后端传递失真问题
  • IDEA的快捷键大全
  • 简单记一下Vue router 路由中使用 vue-i18n 进行标题国际化
  • 【Gitea】 Post “http://localhost:3000/api/internal/hook/pre-receive/aa/bbb“ 异常
  • 如何使用element-ui相关组件如:el-select,el-table,el-switch,el-pagination,el-dialog
  • 微信小程序+echart实现点亮旅游地图
  • Git(8)——Git命令总结
  • 9.15 滴滴笔试
  • 有趣的设计模式——适配器模式让两脚插头也能使用三孔插板
  • 2.10 PE结构:重建重定位表结构
  • 关于content-type的理解
  • <图像处理> 空间滤波基础二
  • Java中的队列Queue
  • 机器学习技术(十)——决策树算法实操,基于运营商过往数据对用户离网情况进行预测
  • 大数据之-kafka学习笔记
  • 虚幻动画系统概述
  • 什么是集成测试?集成测试方法有哪些?
  • elementUI中的el-form常用校验规则
  • 蓝桥杯打卡Day9
  • C# 辗转相除法求最大公约数
  • 腾讯mini项目-【指标监控服务重构】2023-08-03
  • redis缓存穿透、击穿、雪崩介绍
  • Redis 基础总结
  • 基于nginx的tomcat负载均衡和集群(超简单)
  • ESIM实战文本匹配
  • 基于虚拟仿真技术的汽车燃油泵控制
  • angular:HtmlElement的子节点有Shadow dom时奇怪的现象
  • 栈与队列--删除字符串中的所有相邻重复项
  • 使用SSH地址拉取远程仓库代码报下面的错误