库存盘点打印功能生成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 文档
一.介绍 在实际的业务开发的时候,研发人员往往会碰到很多这样的一些场景,需要提供相关的电子凭证信息给用户,例如网银/支付宝/微信购物支付的电子发票.订单的库存打印单.各种电子签署合同等等,以方便用户查 ...
随机推荐
- 002_浅析python 中__name__ = '__main__' 的作用
很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...
- buildroot使用介绍
buildroot是Linux平台上一个构建嵌入式Linux系统的框架.整个Buildroot是由Makefile脚本和Kconfig配置文件构成的.你可以和编译Linux内核一样,通过buildro ...
- Generative Adversarial Nets[content]
0. Introduction 基于纳什平衡,零和游戏,最大最小策略等角度来作为GAN的引言 1. GAN GAN开山之作 图1.1 GAN的判别器和生成器的结构图及loss 2. Condition ...
- Express+MongoDB开发web后台接口MongoDB
摘要: Express开发web接口; 安装MongoDB,启动.连接MongoDB服务台; 使用nodejs和mongoose模块链接和操作MongoDB; 一.Express开发web接口 exp ...
- Java多线程学习(二)---线程创建方式
线程创建方式 摘要: 1. 通过继承Thread类来创建并启动多线程的方式 2. 通过实现Runnable接口来创建并启动线程的方式 3. 通过实现Callable接口来创建并启动线程的方式 4. 总 ...
- 蓝牙speaker配对流程源码分析
这篇文章简单分析一下 蓝牙音箱配对流程.现在的音箱基本都支持security simple pairing.所以这里的流程基本上就是ssp的代码流程. 源码参考的是 Android 6.0 上面的bl ...
- DOM(三)
Text类型 文本节点由Text类型表示,包含的是可以照字面解释的纯文本内容,纯文本中可以包含转义后的HTML字符,但不包含HTML代码,Text节点具有以下特征: nodeType值为3: node ...
- [翻译] 使用 Visual Studio 2019 来提高每个开发人员的工作效率
[翻译] 使用 Visual Studio 2019 来提高每个开发人员的工作效率 原文: Making every developer more productive with Visual Stu ...
- .NetCore实践爬虫系统(一)解析网页内容
爬虫系统的意义 爬虫的意义在于采集大批量数据,然后基于此进行加工/分析,做更有意义的事情.谷歌,百度,今日头条,天眼查都离不开爬虫. 今日目标 今天我们来实践一个最简单的爬虫系统.根据Url来识别网页 ...
- prometeus, grafana部署以及监控mysql
什么是普罗米修斯? Prometheus是一个最初在SoundCloud上构建的开源系统监视和警报工具包 .自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有一个非常活跃的开 ...