TCPDF打印从入门到精通
1. TCPDF的模块导入
TCPDF的官网为https://tcpdf.org
官方文档有几十个例子;详情参看官方文档!
2. 使用 TCPDF打印
例如:横版表格打印并自动分页
/** * 打印 */ public function actionPrint($id) { //设置无布局 $this->layout = false; //获取打印数据 $model = $this->findModel($id); if(!($model->is_del == 0)){ throw new ForbiddenHttpException("该单据无法打印"); } $wmsCheckDetail = new \backend\models\WmsCheckDetailSearch(); $dataProvider = $wmsCheckDetail->searchByCheckId($id); //生成页面内容 $content = $this->render('print', [ 'model' => $model, 'dataProvider'=>$dataProvider, ]); //打印对象 // $pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT,true, 'UTF-8', false); $pdf = (new \TCPDF('L', 'mm', array(240, 140), true, 'UTF-8', false)); //设置无打印头 $pdf->setPrintHeader(false); $pdf->setPrintFooter(false); //设置PDF打印纸张的编剧 $pdf->SetMargins(20, 20,20); //设置单元格内边距 $pdf->setCellPaddings(0, 0, 0, 0); //设置自动进入下一页 $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_RIGHT); $pdf->AddPage(); //设置字体 $pdf->SetFont('stsongstdlight', '', 10); $pdf->writeHTML($content, true, false, true, false, ''); $pdf->lastPage(); $pdf->get('库存盘点.pdf'); }
<style type="text/css"> @page { size: A4; margin: 0px; } .out { width: 100%; /*border: 1px solid #ddd;*/ /*margin: 0 auto;*/ } .out .title { text-align: center; } table.table { margin: 10px; width: 100%; } table.table-bordered { /*table-layout: fixed;*/ margin: 100px; /*border-collapse: collapse;*/ border: none; width: 100%; } table.table-bordered td { border: solid 1px #000 ; height: 26px; line-height: 26px; text-indent: 0.5em; } .footer { width: 100%; margin: 10px; } </style> <div class="out"> <h2 class="title"><?= $model->common_producer_info_name ?> | 库存盘点清单</h2> <table class="table-bordered" style="font-size: 10px"> <tr> <td colspan="24" class="active">基本信息</td> </tr> <tr> <td colspan="2" class="active" align="center">编号</td> <td colspan="6" align="center"> <?= $model->wms_check_code; ?> </td> <td colspan="4" class="active" align="center">存货类型</td> <td colspan="4" align="center"> <?= $model->common_producer_herb_type == 1 ? '原料' : '成品'; ?> </td> <td colspan="4" class="active" align="center">截止日期</td> <td colspan="4" align="center"> <?= date('Y-m-d', strtotime('-1 day', $model->wms_check_end_at)) ?> </td> </tr> <tr> <td colspan="24" class="active">库存清单</td> </tr> <tr> <td colspan="2" class="active" align="center">名称</td> <td colspan="2" class="active" align="center">等级</td> <td colspan="4" class="active" align="center">单号</td> <td colspan="2" class="active" align="center">件数(袋)</td> <td colspan="2" class="active" align="center">实盘</td> <td colspan="2" class="active" align="center">差异</td> <td colspan="2" class="active" align="center">规格</td> <td colspan="2" class="active" align="center">重量(公斤)</td> <td colspan="2" class="active" align="center">实盘</td> <td colspan="2" class="active" align="center">差异</td> <td colspan="2" class="active" align="center">说明</td> </tr> <?php foreach ($dataProvider->getModels() as $detail){ ?> <tr> <td colspan="2" align="center"><?= $detail->common_producer_herb_info_name ?></td> <td colspan="2" align="center"><?= substr($detail->common_producer_herb_grade_info_name, 0, 12) ?></td> <td colspan="4" align="center"><?= $detail->wms_herb_in_sheet_number ?></td> <td colspan="2" align="center"><?= $detail->wms_check_detail_system_package_num ?></td> <td colspan="2" align="center"></td> <td colspan="2" align="center"></td> <td colspan="2" align="center"></td> <td colspan="2" align="center"><?= \common\models\Base::weightBcdiv($detail->wms_check_detail_system_weight) ?></td> <td colspan="2" align="center"></td> <td colspan="2" align="center"></td> <td colspan="2" align="center"></td> </tr> <?php } ?> <tr> <td colspan="24" class="active">库管签字</td> </tr> <tr> <td colspan="4" class="active" align="center">盘点人</td> <td colspan="8"> </td> <td colspan="4" class="active" align="center">盘点日期</td> <td colspan="8"> </td> </tr> <tr> <td colspan="4" align="center">盘点备注</td> <td colspan="20" class="note"> </td> </tr> <tr> <td colspan="24" class="active">财务签字</td> </tr> <tr> <td colspan="4" class="active" align="center">复核人</td> <td colspan="8"> </td> <td colspan="4" class="active" align="center">复核日期</td> <td colspan="8"> </td> </tr> <tr> <td colspan="4" align="center">复核备注</td> <td colspan="20" class="note"> </td> </tr> </table> <div class="footer"> </div> </div>
$content 返回的是html页面打印的具体内容
纸张竖着打印用
$pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT,true, 'UTF-8', false);
纸张横着打印使用
$pdf = (new \TCPDF('L', 'mm', array(240, 140), true, 'UTF-8', false));
即宽度为240,高度为140的A4纸
注意:
重要的是纸张的自动分页,如遇到表格也会形成两个表格
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_RIGHT);
TCPDF打印从入门到精通的更多相关文章
- Nginx开发从入门到精通 学习目录分享学习 (阿里著作)
Nginx开发从入门到精通 缘起 nginx由于出色的性能,在世界范围内受到了越来越多人的关注,在淘宝内部它更是被广泛的使用,众多的开发以及运维同学都迫切的想要了解nginx模块的开发以及它的内部 ...
- 2015年新版C#从入门到精通(第2版)视频教学录像【无水印版】
<c#从入门到精通(第2版)>以零基础讲解为宗旨,用实例引导读者学习,深入浅出地介绍了c#的相关知识和实战技能.<c#从入门到精通(第2版)>第1篇[c#语言基础]主要讲解c# ...
- 办公软件Office PPT 2010视频教程从入门到精通系列教程(22课时)
办公软件Office PPT 2010视频教程从入门到精通系列教程(22课时) 乔布斯的成功离不开美轮美奂的幻灯片效果,一个成功的商务人士.部门经理也少不了各种各样的PPT幻灯片.绿色资源网给你提供了 ...
- Hibernate从入门到精通(三)Hibernate配置文件
在上次的博文Hibernate从入门到精通(二)Hibernate实例演示我们已经通过一个实例的演示对Hibernate的基本使用有了一个简单的认识,这里我们在此简单回顾一下Hibernate框架的使 ...
- (升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)
本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课 ...
- 《Java从入门到精通》src0-8
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello wo ...
- 【PHP】PHP从入门到精通(一)——想学习PHP的小伙伴的福利来了!
PHP从精通到入门 (一)PHP简介和基本知识 PHP(外文名:PHP: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言.语法吸 ...
- 【PHP】最详细PHP从入门到精通(三)——PHP中的数组
PHP从入门到精通 之PHP中的数组 各位开发者朋友大家好,链接上次更新,我们PHP的学习也更深了一层,本次博主给大家带来PHP数组的数组实例详解的相关资料.数组分为数组数值数值,关联数组,多维数组 ...
- 【PHP】最详细PHP从入门到精通(四)——PHP中的字符串
PHP从入门到精通 之PHP中的字符串 大家好,继续跟进PHP最详尽的知识更新,本周,跟大家重点讲一下PHP中字符串的使用.在PHP中,字符串是非常重要的一个概念,基本上大家想到的字符串的处理功能, ...
随机推荐
- Java内存区域划分、内存分配原理(转)
文章引用自 http://blog.csdn.net/OyangYujun/article/details/41173747 运行时数据区域 Java虚拟机在执行Java的过程中会把管理的内存划分为若 ...
- 【转】Kaggle注册问题-验证码和手机短信
注册和登录Kaggle时验证码无法显示问题 参考:https://blog.csdn.net/zhuisaozhang1292/article/details/81529981 应用FQ软件需要时时关 ...
- sparse 稀疏函数的用法
sparse函数 功能:创建稀疏矩阵 用法1:S=sparse(X)—将矩阵X转化为稀疏矩阵的形式,即矩阵X中任何零元素去除,非零元素及其下标(索引)组成矩阵S. 如果X本身是稀疏的,sparse(X ...
- python inspect.stack() 的简单使用
1. #python # -*- encoding: utf-8 -*- #获取函数的名字 import inspect def debug(): callnamer = inspect.stack( ...
- keystone系列五:keystone源码分析
六 keystone架构 6.1 Keystone API Keystone API与Openstack其他服务的API类似,也是基于ReSTFul HTTP实现的. Keystone API划分为A ...
- 自建mvc5项目里几个类图
AccoutController.cs AccountViewModels.cs IdentityModel.cs
- sklearn学习笔记之简单线性回归
简单线性回归 线性回归是数据挖掘中的基础算法之一,从某种意义上来说,在学习函数的时候已经开始接触线性回归了,只不过那时候并没有涉及到误差项.线性回归的思想其实就是解一组方程,得到回归函数,不过在出现误 ...
- Python3.x:Selenium+PhantomJS爬取带Ajax、Js的网页及获取JS返回值
前言 现在很多网站的都大量使用JavaScript,或者使用了Ajax技术.这样在网页加载完成后,url虽然不改变但是网页的DOM元素内容却可以动态的变化.如果处理这种网页是还用requests库或者 ...
- ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十五节--缓存小结与ABP框架项目中 Redis Cache的实现
返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期 缓存 为什么要用缓存 为什么要用缓存呢,说缓存之前先说使用缓存的优点. 减少寄宿服务器的往返调用(round-tr ...
- 从源码的角度看 React JS 中批量更新 State 的策略(上)
在之前的文章「深入理解 React JS 中的 setState」与 「从源码的角度再看 React JS 中的 setState」 中,我们分别看到了 React JS 中 setState 的异步 ...