【PHP】使用TCPDF导出PDF文件

news2024/11/11 4:55:06

目录

一、安装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.coloradmin.cn/o/988304.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深化超低时延技术合作,中科驭数助力金仕达开创极速行情新高度

近日&#xff0c;金仕达副总经理吴江带领FPGA低延时、终端和分布式团队主要负责人赴中科驭数武汉研发中心考察调研。双方深入探讨低延时技术&#xff0c;并在FPGA国产化成果、高性能开发平台等方向展开合作研讨。以此次交流为起点&#xff0c;双方将充分发挥各自优势&#xff0…

2023-简单点-编译是什么?gcc是什么?

编译目的 把一种 程序 变成 另一种更接近机器指令 编译的术语 “接近专家的最快方法第一步&#xff0c;直接了解100行业黑话” 那么来了解一下&#xff0c;编译过程中的黑话&#xff1a; 词法分析语法分析中间代码目标代码代码优化出错管理表格管理 gcc是个什么? 一种编译…

【liunx】进程的状态

进程的状态 1.进程的状态2.僵尸进程3.孤儿进程 1.进程的状态 我们或多或少了解到进程的状态分为&#xff1a; 运行&#xff0c;新建&#xff0c;就绪&#xff0c;挂起&#xff0c;阻塞&#xff0c;等待&#xff0c;停止&#xff0c;挂机&#xff0c;死亡… 首先解释一点&…

windows系统edge浏览器退出账户后还能免密登录的解决方式

edge浏览器明明退出登录了&#xff0c;还能不用输密码一键点击就能登录&#xff1b; 这是因为微软的煞笔产品经理用脚后跟想出来的方案。 解决方案&#xff1a; 去设置里的账号管理&#xff0c;注销自己的微软账号登录&#xff1b;如果你发现自己并没有登录&#xff0c;那么看…

Spring框架中bean的生命周期(理解)

1.解释Spring框架中bean的生命周期 在传统的Java应用中&#xff0c;bean的生命周期很简单。使用Java关键字new进行bean实例化&#xff0c;然后该bean就可以使用了。一旦该bean不再被使用&#xff0c;则由Java自动进行垃圾回收。 相比之下&#xff0c;Spring容器中的bean的生命…

2023什么好用的工具可以传大文件?

在当今的信息时代&#xff0c;数据已经成为了企业和个人的重要资产。无论是视频、音乐、图片、文档等各种格式的文件&#xff0c;都需要在不同的场景和需求下进行传输或分享。然而&#xff0c;随着数据量的不断增长&#xff0c;传输或分享大文件就成了一个难题。 常见的传输方式…

SpringBoot通过自定义注解实现日志打印

目录 前言&#xff1a; 正文 一.Spring AOP 1.JDK动态代理 2.Cglib动态代理 使用AOP主要的应用场景&#xff1a; SpringBoot通过自定义注解实现日志打印 一.Maven依赖 二.ControllerMethodLog.class自定义注解 三.Spring AOP切面方法的执行顺序 四.ControllerMethodL…

WireShark抓包工具的安装

1.下载安装包 在官网或者电脑应用商城都可以下载 2.安装 打开安装包&#xff0c;点击next 点击next 选择UI界面&#xff0c;两种都装上 根据习惯选择 选择安装位置点击安装 开始安装安装成功

测试用例基础

测试用例概要 测试用例要素 测试环境,操作步骤,测试数据,预期结果 测试用例好处 提高测试效率,节省测试时间 测试用例是自动化测试用例的前提 测试用例设计方法 1.基于需求的设计方法 需求文档 --> 梳理需求(掌握需求) --> 针对文档设计测试用例(基于需求设计测…

无脑013—— win11配置mmdetection实现训练自己的vol格式(xml)数据集

昨天使用cascade——rcnn 实现了MSAR 1.0的训练&#xff0c;今天来回顾一下 参考资料&#xff1a; http://t.csdn.cn/8A5WE http://t.csdn.cn/ccOZg 电脑 笔记本电脑&#xff0c;拯救者Y7000P 2018款&#xff0c;GTX1060显卡6G显存 &#xff0c;cmd输入代码nvcc-version显示的C…

[docker]笔记-portainer的安装

1、portainer是一款可视化的容器管理软件&#xff0c;利用portainer可以轻松方便的管理和创建容器。portainer本身是一个容器&#xff0c;完全免费并且具有汉化版。本文介绍portainer的安装和使用。 2、安装好容器并配置好容器环境&#xff0c;可参照https://blog.csdn.net/bl…

redis实战篇之导入黑马点评项目

1. 搭建黑马点评项目 链接&#xff1a;https://pan.baidu.com/s/1Q0AAlb4jM-5Fc0H_RYUX-A?pwd6666 提取码&#xff1a;6666 1.1 首先&#xff0c;导入SQL文件 其中的表有&#xff1a; tb_user&#xff1a;用户表 tb_user_info&#xff1a;用户详情表 tb_shop&#xff1a;商户…

使用Vagrant创建和管理本地Kubernetes(K8s)集群的步骤是什么

文章目录 步骤1&#xff1a;准备环境步骤2&#xff1a;创建Vagrantfile步骤3&#xff1a;启动虚拟机步骤4&#xff1a;安装Kubernetes步骤5&#xff1a;配置Kubernetes网络插件步骤6&#xff1a;将Worker节点加入集群步骤7&#xff1a;验证集群步骤8&#xff1a;部署应用步骤9&…

部署笔记:文件句柄调整和磁盘分区 02

系统默认是1024&#xff0c;基本不够&#xff0c;会报“too many open files”的错误。因此需要调整。 系统文件句柄数调整 # 编辑打开文件&#xff0c;在文末追加两行配置 vim /etc/security/limits.conf # 需要添加的配置&#xff0c;注意别漏了前面的*号 # * 指所有用户、…

gitlab 合并分支

打开我们的gitlab&#xff0c;找到我们的项目&#xff0c;在左侧菜单中找到Merge requests&#xff0c;点击Merge requests&#xff0c;进入下一个页面 点击New merge requests&#xff0c;创建一个新的merge&#xff0c;进入下一个页面 选择自己分支和目标分支&#xff0c;自己…

如何在Windows中使用C#填写和提取PDF表单

如何在Windows中使用C#填写和提取PDF表单 PDF表单不仅允许用户填写和提交数据&#xff0c;也允许用户创建各种表单域收集用户的数据&#xff0c;并通过提取表单字段值&#xff0c;将收集和合并提交的数据进一步分析或处理。PDF通过电子方式填写、保存和共享的形式&#xff0c;…

WebDAV之π-Disk派盘 + 百灵创作

百灵创作是一款简约而不简单、功能强大且安全的高颜值码字工具,为网络写手和小说作者提供跨平台的写作环境,并提供强大的数据备份和云同步技术,以保障作者的数据安全,并提供流畅的多端无缝切换体验。 百灵创作的特点和功能包括: 简约而不简单:提供简洁直观的界面和操作,…

成都瀚网科技有限公司:抖音怎么绑定抖音小店才好?

抖音是一款非常流行的短视频应用&#xff0c;为用户提供了一个展示才华、分享生活的平台。在抖音上&#xff0c;用户可以通过绑定抖音商店来销售自己的产品或服务&#xff0c;从而实现商业变现。那么&#xff0c;抖音如何绑定抖音商店呢&#xff1f; 1、抖音如何绑定抖音商店&a…

注解方式配置SpringMVC

注解配置SpringMVC 1. 初始化类&#xff0c;代替web.xml2. 创建SpringConfig配置类&#xff0c;代替spring的配置文件3. 创建SpringMVCConfig配置类&#xff0c;代替SpringMVC.xml配置文件4. 项目结构 1. 初始化类&#xff0c;代替web.xml Spring3.2引入了一个便利的WebApplic…

解放程序员生产力的AI代码助手重磅来袭

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…