当前位置: 首页 > news >正文

phpword生成PDF

接上一篇phpword生成word文档,如有不明白的问题可以先查看上一篇文章

首先,生成PDF需要先生成word文档,而后通过word文档生成HTML文档,最后才可以通过HTML文档生成PDF文件,详细代码如下。

执行命令安装phpword:

composer require phpoffice/phpword

将word转为HTML然后转为PDF的后端代码如下:

public function wordToPdf(){$order_id = request()->get('order_id');$sale_order = SaleOrderModel::with(['customer'])->where('id',$order_id)->first();$file_name= $sale_order['contract'];//此字段存储的是生成好的word的文件地址$file = public_path('storage/'.$file_name);$phpWord = IOFactory::load($file);$html =  IOFactory::createWriter($phpWord  ,'HTML');// 设置Dompdf$dompdf = new Dompdf();// 将Word文档内容转换为HTML$html->save(storage_path('app/public/contract/'.$order_id.'.html'));$html = file_get_contents(base_path().'/public/storage/contract/'.$order_id.'.html');//这几步是因为复杂的HTML样式不被识别,所以将其替换掉$css = <<<HTML*{ font-family: simsun, DejaVu Sans, sans-serif;}
HTML;$font = "font-family: '宋体';";$style = "* {";$style_new = "* {  word-wrap: break-word;";$search = '</style>';$html = str_replace($search,$css.'</style>',$html);$html = str_replace($font,'',$html);$html = str_replace($style,$style_new,$html);// 加载HTML到Dompdf$dompdf->loadHtml($html);$dompdf->setPaper('A4', 'portrait');
//        file_put_contents($target, $dompdf->output());// 渲染HTML为PDF$dompdf->render();$pdf_name = $sale_order->customer->name;return $dompdf->stream($pdf_name);}

前端的页面样式(建议先查看上一篇文章PHP+laravel 生成word):

{"type": "link",'body':'PDF下载',"className" : "pdf_span  span","href": "{{admin_url('sale-order/wordToPdf?order_id='.$order_id)}}","style": {"margin-left": "80px","margin-top" : "5px","padding" : "3px 12px",}},

 其中需要使用字体文件,下载文字包地址

https://download.csdn.net/download/QiZong__BK/89482065?spm=1001.2014.3001.5503

这样就完成啦

http://www.lryc.cn/news/388759.html

相关文章:

  • Linux进程优先级
  • 每日一题——Python实现PAT乙级1096 大美数(举一反三+思想解读+逐步优化)3千字好文
  • 无锁编程——从CPU缓存一致性讲到内存模型(1)
  • C++编程(七)继承
  • 【ACM_2023】3D Gaussian Splatting for Real-Time Radiance Field Rendering
  • 【TB作品】atmega16 计算器,ATMEGA16单片机,Proteus仿真
  • C++的IO流操作
  • MacOS升级指定Python版本的pip
  • 音频Balance源码总结
  • CesiumJS【Basic】- #043 绘制脉冲线(Entity方式)- 需要自定义着色器
  • Linux命令 wc(word count)-l(lines)用于统计文件中的行数。
  • 数据结构 - C/C++ - 链表
  • sheng的学习笔记-AI-高斯混合模型(GMM)
  • OFDM的缺点与关键技术
  • 电脑录音软件哪个好?7款录制音频工具大盘点,赶快学起来!(2024)
  • 【Android面试八股文】你说你使用Leakcanary进行内存泄漏检测,那你能说一说Leakcanary的原理吗?
  • 蒂升电梯职业性格和Verify认知能力SHL测评答题攻略及薪资待遇解密!
  • window上部署sql server改动端口、和sqlserver的一些还原、批量插入存储过程的命令
  • 【单片机与嵌入式】stm32串口通信入门
  • 启动Redis服务器
  • uniapp中使用threejs加载几何体
  • 【SQL注入】 数据库基础
  • 文件操作~
  • 身边的故事(十二):阿文的故事:消失
  • 智能扫地机器人程序中出现的问题可以参考的解决方案
  • 如何借用物联网快速实现高标准农田信息化
  • 计算机网络基础入门
  • uniApp vue2 vue3配置代理
  • 运维锅总详解RocketMQ
  • 【Linux】使用ntp同步时间