库存盘点打印功能生成PDF速度太慢使用页面缓存
一.业务需求
二.产品设计
三.UI设计
四.程序设计
1.使用behavior配置页面缓存
class WmsCheckController extends Controller { /** * @inheritdoc */ public function behaviors() { return [ 'verbs' => [ 'class' => VerbFilter::className(), 'actions' => [ 'delete' => ['POST'], ], ], [ 'class' => 'yii\filters\PageCache', 'only' => ['view'], 'duration' => 3600, 'variations' => [ \Yii::$app->language, ], 'dependency' => [ 'class' => 'yii\caching\DbDependency', ], ], ]; }
2.在控制器中编写redis缓存对数据进行缓存
public function actionPrint($id) { //设置无布局 $this->layout = false; //获取打印数据 $model = $this->findModel($id); if(!($model->is_del == 0)){ throw new ForbiddenHttpException("该单据无法打印"); } $serializedDataProvider = \Yii::$app->redis->get('wms_check_detail_data_provider'); if (false == $serializedDataProvider){ $wmsCheckDetail = new \backend\models\WmsCheckDetailSearch(); $dataProvider = $wmsCheckDetail->searchByCheckId($id); \Yii::$app->redis->set('wms_check_detail_data_provider', serialize($dataProvider)); \Yii::$app->redis->expire('wms_check_detail_data_provider', 3600); }else{ $dataProvider = unserialize($serializedDataProvider); } //生成页面内容 $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_TOP); // $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); // $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_LEFT); $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_RIGHT); // $pdf->SetAutoPageBreak(TRUE, 0); $pdf->AddPage(); //设置字体 $pdf->SetFont('stsongstdlight', '', 10); $pdf->writeHTML($content, true, false, true, false, ''); $pdf->lastPage(); $pdf->get('库存盘点.pdf'); }
3.进行页面缓存
<?php if ($this->beginCache($model->id, [ 'duration' => 3600, 'enabled' => Yii::$app->request->isGet])): ?> <?php foreach ($dataProvider->getModels() as $detail): ?> <table class="table-bordered" style="font-size: 10px; border-top: 2px solid black;"> <tr> <td colspan="2" class="active" align="center">名称</td> <td colspan="4" 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> </tr> <tr> <td colspan="2" align="center"> <?= $detail->common_producer_herb_info_name ?> </td> <td colspan="4" align="center"> <?= $detail->common_producer_herb_grade_info_name ?> </td> <td colspan="4" align="center"> <?= $detail->wms_herb_in_sheet_number ?> </td> <td colspan="2" align="center"> <?php if(in_array($model->common_producer_herb_type, [\core\models\WmsCheck::HERB_TYPE_MATERIAL, \core\models\WmsCheck::HERB_TYPE_PRODUCT])): ?> <?= $detail->wms_check_detail_system_package_num ?> <?php endif; ?> </td> <td colspan="2" align="center"> <?php if(in_array($model->common_producer_herb_type, [\core\models\WmsCheck::HERB_TYPE_MATERIAL, \core\models\WmsCheck::HERB_TYPE_PRODUCT])): ?> <?php if($model->wms_check_status == \core\models\WmsCheck::STATUS_FINISH): ?><?= $detail->wms_check_detail_check_package_num ?><?php endif; ?> <?php endif; ?> </td> <td colspan="2" align="center"> <?php if($model->wms_check_status == \core\models\WmsCheck::STATUS_FINISH): ?><?= $detail->wms_check_detail_diff_package_num ?><?php endif; ?> </td> <td colspan="2" align="center"> <?php if($model->wms_check_status == \core\models\WmsCheck::STATUS_FINISH): ?><?= $detail->wms_check_detail_spec_name ?><?php endif; ?> </td> <td colspan="2" align="center"> <?= \common\models\Base::weightBcdiv($detail->wms_check_detail_system_weight) ?> </td> <td colspan="2" align="center"> <?php if($model->wms_check_status == \core\models\WmsCheck::STATUS_FINISH): ?><?= \common\models\Base::weightBcdiv($detail->wms_check_detail_check_weight) ?><?php endif; ?> </td> <td colspan="2" align="center"> <?php if($model->wms_check_status == \core\models\WmsCheck::STATUS_FINISH): ?><?= \common\models\Base::weightBcdiv($detail->wms_check_detail_diff_weight) ?><?php endif; ?> </td> </tr> <tr> <td colspan="2" class="active" align="center">说明</td> <td colspan="22" align="left"><?php if($model->wms_check_status == \core\models\WmsCheck::STATUS_FINISH): ?><?= $detail->wms_check_detail_diff_note ?><?php endif; ?></td> </tr> </table> <?php endforeach; ?> <?php $this->endCache(); endif; ?>
库存盘点打印功能生成PDF速度太慢使用页面缓存的更多相关文章
- 快销品 车销批发管理手持终端PDA系统 打印开单 入库 库存 盘点多功能一体
手持POS终端PDA移动开单 PDA通过扫描商品条码移动开单,实现便携式办公,伴随式销售,浩瀚技术研发团队开发的一款最新产品,PDA能通过WIFI无线局域网.GPRS互联网直接与主机连接,让公司业务人 ...
- 个人永久性免费-Excel催化剂功能第50波-批量打印、导出PDF、双面打印功能
在倡导无纸化办公的今天,是否打印是一个碍眼的功能呢,某些时候的确是,但对于数据的留存,在现在鼓吹区块链技术的今天,仍然不失它的核心价值,数据报表.单据打印出来留存,仍然是一种不可或缺的数据存档和防篡改 ...
- wkhtmltopdf+itext实现html生成pdf文件的打印下载(适用于linux及windows)
目中遇到个根据html转Java的功能,在java中我们itext可以快速的实现pdf打印下载的功能,在itext中我们一般有以下三中方式实现 配置pdf模板,通过Adobe Acrobat 来设置域 ...
- netcore3.1 + vue (前后端分离)生成PDF(多pdf合并)返回前端打印
1.使用Adobe Acrobat XI Pro编辑pdf模板 2.公共类代码 3.service层调用 4.Controller层 5.前端(Vue) 因为print.js不支持宋体,所以打算用后台 ...
- 在js内生成PDF文件并下载的功能实现(不调用后端),以及生成pdf时换行的格式不被渲染,word-break:break-all
在js内生成PDF文件并下载的功能实现(不调用后端),以及生成pdf时换行的格式不被渲染,word-break:break-all 前天来了个新需求, 有一个授权书的文件要点击下载, 需要在前端生成, ...
- php实现pdf导出和打印功能。
所用插件:TCODF //导出pdf public function export_pdf($order_sn){ require_once(FCPATH .'../sha ...
- java实现自动静默打印功能
最近接到一个需求,要求实现自动打印功能,一般网页打印pdf需要借助浏览器的pdf组件,而且还要弹出打印窗口,再点击打印才能实现. 那么如何实现自动打印了,从点击自己网页上3次缩减到点击一次了? 一 ...
- 使用 WebView2 封装一个生成 PDF 的 WPF 控件
使用 WebView2 封装一个生成 PDF 的 WPF 控件 最近在迁移项目到 .net6,发现项目中用的 PDF 库不支持 .net6,于是想着换一个库.结果找了一大圈,发现不是版本不支持,就是收 ...
- 手把手教你使用 Java 在线生成 pdf 文档
一.介绍 在实际的业务开发的时候,研发人员往往会碰到很多这样的一些场景,需要提供相关的电子凭证信息给用户,例如网银/支付宝/微信购物支付的电子发票.订单的库存打印单.各种电子签署合同等等,以方便用户查 ...
随机推荐
- Python:Day06 元组、字典、字符串
tuple(元组) 元组被称为只读列表,即数据可以被查询,但不能被修改,所以列表的切片操作同样适用于元组. 元组写在( )里,元素之间用逗号隔开. tul1 = ( ) #空元组 tul2 = (20 ...
- Java多线程(二)——常用的实现多线程的两种方式
一.继承Thread类创建线程类 Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.每个线程的作用是完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码. ...
- java 在实例化异常的时候做的事情
new Exception 这段代码,会调用父类ThrowAble的构建方法,在构造方法中会调用fillInstackTrace这个native方法. 会把当前线程异常发生的信息,上下文记录在栈调用指 ...
- Ambari 使用 Hive View 异常处理
异常:进入Hive View提示user home check fail 详细日志:Service 'userhome' check failed: java.io.FileNotFoundExcep ...
- ASP.NET Core 判断请求是否为Ajax请求
我们可以通过HTTP请求头来判断是否为Ajax请求,Ajax请求的request headers里都会有一个key为x-requested-with,值为XMLHttpRequest的header 所 ...
- JVM总括三-字节码、字节码指令、JIT编译执行
JVM总括三-字节码.字节码指令.JIT编译执行 目录:JVM总括:目录 java文件编译后的class文件,java跨平台的中间层,JVM通过对字节码的解释执行(执行模式,还有JIT编译执行,下面讲 ...
- (1)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- 什么是微服务架构,.netCore微服务选型
开发工具:VS2017 .Net Core 2.1 什么是微服务?单体结构: 缺点: 1)只能采用同一种技术,很难用不同的语言或者语言不同版本开发不同模块: 2)系统耦合性强,一旦其中一个模块有问题, ...
- Maven 安装和配置
一.Maven 简介 Maven 是一个强大的Java项目构建工具,类似.NET中的NuGet ,Node.js的NPM. 正如nuget.org ,Maven有一个中央仓库 maven.org,可以 ...
- 使用模块PIL 生成 随机验证码
--------------默认自己无能,无疑是给失败制造机会!你认为自己是什么样的人,就将成为什么样的人. 要使用PIL模块. 安装: 1 pip3 install pillow 基本使用 1. 创 ...
- Python入门-从HelloWorld开始
前言 最近在招聘网上看了许多公司的招聘要求,发现很多公司希望求职者能会Python,特别是一些自动化测试的职位,以前对Python只是介于听说或是一些简单的了解,所以既然市场有需求,那么我们就来学习一 ...