| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- <?php
- /**
- * 模板打印控制器
- *
- * @author qifan
- * @date 2020-12-15
- */
-
- namespace app\crm\controller;
-
- use app\admin\controller\ApiCommon;
- use app\crm\logic\PrintingLogic;
- use PhpOffice\PhpWord\IOFactory;
- use PhpOffice\PhpWord\PhpWord;
- use PhpOffice\PhpWord\Shared\Html;
- use think\Controller;
- use think\Hook;
- use think\Request;
-
- class Printing extends ApiCommon
- {
- public function _initialize()
- {
- $action = [
- 'permission'=>['previewData'],
- 'allow'=>['printingdata', 'template', 'setrecord', 'getrecord', 'preview', 'down']
- ];
- Hook::listen('check_auth',$action);
- $request = Request::instance();
- $a = strtolower($request->action());
- if (!in_array($a, $action['permission'])) {
- parent::_initialize();
- }
- }
-
- /**
- * 获取打印的数据
- *
- * @param PrintingLogic $printingLogic
- * @return \think\response\Json
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- */
- public function printingData(PrintingLogic $printingLogic)
- {
- $actionId = $this->param['action_id'];
- $templateId = $this->param['template_id'];
- $type = $this->param['type'];
- $recordId = $this->param['record_id'];
-
- $data = $printingLogic->getPrintingData($type, $actionId, $templateId, $recordId);
-
- return resultArray(['data' => $data]);
- }
-
- /**
- * 获取打印模板列表
- *
- * @param PrintingLogic $printingLogic
- * @return \think\response\Json
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- */
- public function template(PrintingLogic $printingLogic)
- {
- if (empty($this->param['type'])) return resultArray(['error' => '请选择打印的类型!']);
-
- $data = $printingLogic->getTemplateList($this->param['type']);
-
- return resultArray(['data' => $data]);
- }
-
- /**
- * 创建模板打印记录
- *
- * @param PrintingLogic $printingLogic
- * @return \think\response\Json
- */
- public function setRecord(PrintingLogic $printingLogic)
- {
- if (empty($this->param['type'])) return resultArray(['error' => '请选择模块!']);
- if (empty($this->param['action_id'])) return resultArray(['error' => '缺少数据ID!']);
- if (empty($this->param['template_id'])) return resultArray(['error' => '缺少模板ID!']);
- if (empty($this->param['recordContent'])) return resultArray(['error' => '缺少打印内容!']);
-
- $userId = $this->userInfo['id'];
-
- if (!$printingLogic->setRecord($userId, $this->param)) return resultArray(['error' => '操作失败!']);
-
- return resultArray(['data' => '操作成功!']);
- }
-
- /**
- * 获取打印记录
- *
- * @param PrintingLogic $printingLogic
- * @return \think\response\Json
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- */
- public function getRecord(PrintingLogic $printingLogic)
- {
- if (empty($this->param['crmType'])) return resultArray(['error' => '请选择模块!']);
- if (empty($this->param['typeId'])) return resultArray(['error' => '缺少数据ID']);
-
- $data = $printingLogic->getRecord($this->param, $this->userInfo['id']);
-
- return resultArray(['data' => $data]);
- }
-
- /**
- * 保存打印内容
- *
- * @param user_id 用户id
- * @param type 类型(work,pdf)
- * @param content 打印内容
- * @author fanqi
- * @date 2021-03-25
- * @return \think\response\Json
- */
- public function preview(PrintingLogic $printingLogic)
- {
- if (empty($this->param['type'])) return resultArray(['error' => '缺少类型参数!']);
- if (empty($this->param['content'])) return resultArray(['error' => '缺少打印内容!']);
-
- $userInfo = $this->userInfo;
- $this->param['user_id'] = $userInfo['id'];
-
- $key = $printingLogic->preview($this->param);
-
- return resultArray(['data' => $key]);
- }
-
- /**
- * 打下打印文件
- * @param string key 打印数据的唯一key
- * @author fanqi
- * @date 2021-03-26
- * @return \think\response\Json
- */
- public function down()
- {
- if (empty($this->param['key'])) return resultArray(['error' => '参数错误!']);
-
- $data = db('admin_printing_data')->field(['type', 'content'])->where('key', $this->param['key'])->find();
-
- $type = $data['type'];
- $contentArray = json_decode($data['content'], true);
- $content = $contentArray['data'];
-
- if ($type == 'pdf') {
- require_once(EXTEND_PATH.'tcpdf'.DS.'config'.DS.'tcpdf_config.php');
- require_once(EXTEND_PATH.'tcpdf'.DS.'tcpdf.php');
-
- $tcpdf = new \TCPDF();
-
- // 设置PDF页面边距:LEFT,TOP,RIGHT
- $tcpdf->SetMargins(10, 10, 10);
-
- // 设置字体,防止中文乱码
- $tcpdf->SetFont('simsun', '', 10);
-
- // 设置文件信息
- $tcpdf->SetCreator(TITLE_NAME);
- $tcpdf->SetAuthor(TITLE_NAME);
- $tcpdf->SetTitle("打印文件");
-
- // 删除预定义的打印 页眉/页尾
- $tcpdf->setPrintHeader(false);
-
- // 设置文档对齐,间距,字体,图片
- $tcpdf->SetCreator(PDF_CREATOR);
- $tcpdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
- $tcpdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
-
- // 自动分页
- $tcpdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
- $tcpdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
- $tcpdf->setFontSubsetting(true);
- $tcpdf->setPageMark();
-
- $tcpdf->AddPage();
- $html = $content;
- $tcpdf->writeHTML($html, true, false, true, true, '');
- $tcpdf->lastPage();
- $tcpdf->Output('print.PDF','I');
- }
-
- if ($type == 'word') {
- $fileName = 'print.docx';
- header("Cache-Control: no-cache, must-revalidate");
- header("Pragma: no-cache");
- header("Content-Type: application/octet-stream");
- header("Content-Disposition: attachment; filename=$fileName");
- header('Transfer-Encoding: chunked');
-
- $html = '<html xmlns:v="urn:schemas-microsoft-com:vml"
- xmlns:o="urn:schemas-microsoft-com:office:office"
- xmlns:w="urn:schemas-microsoft-com:office:word"
- xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
- xmlns="http://www.w3.org/TR/REC-html40">';
- $html .= '<head><meta charset="UTF-8" /></head>';
-
- echo $html . '<body>'.$content .'</body></html>';
- }
- }
- }
|