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

PHP生成pdf方法

1:第一种方法:
主要使用PHP的扩展 【 “spatie/browsershot”: “3.57”】
使用这个扩展生成PDF需要环境安装以下依赖
1.1:NPM【版本:9.2.0】
1.2:NODE【版本:v18.19.1】
1.3:puppeteer【npm install -g puppeteer】
下面是示例代码:示例是脚本生成pdf的方法;
扩展也可以是接口形式直接输出给浏览器生成pdf,这种,方式不需要安装依赖。

use console\base\ConsoleBaseController;
use Spatie\Browsershot\Browsershot;class PtdfController extends ConsoleBaseController
{public function actionIndex(){$html = 'html代码';$savePath = __DIR__ . '/../../runtime/';$fileName = realpath($savePath)."/20250526.pdf";$browsershot = Browsershot::html($html); // 如果是URL页面,则使用 Browsershot::url()// 配置PDF输出选项$browsershot->setOption('format', 'A4') // 设置纸张大小->setOption('margin', ['top' => '20px', 'right' => '20px', 'bottom' => '20px', 'left' => '20px']) // 设置页边距->showBackground() // 显示背景图形->waitUntilNetworkIdle() // 等待网络空闲后截图->save($fileName); // 保存PDF到指定路径echo "PDF has been saved to {$fileName}";}
}

2:第二种方法:TCPDF
主要使用扩展【“tecnickcom/tcpdf”: “6.3.5”】
这个扩展主要问题是默认不支持使用中文,需要自己下载支持中文的ttf文件转换。具体步骤如下
2.1:安装tecnickcom/tcpdf

composer require tecnickcom/tcpdf:6.3.5

2.2:下载ttf文件【平台不支持上传,自己随便上网搜的下载一个就行】
STSong.ttf【最好是将这个文件放到下载好的扩展下面,我的是在

vendor/tecnickcom/tools

在这里插入图片描述

这个目录下面有一个文件:tcpdf_addfont.php文件,这个文件是用来生成TCPDF需要的字体工具,执行下面命令【到vendor/tecnickcom/tools目录下面运行】,命令会在目录【vendor/tecnickcom/fonts】下,自动生成一个对应的文件 stsong.php

php tcpdf/tools/tcpdf_addfont.php -b -t CID0CS -i STSsong.ttf

在这里插入图片描述
3:开始下载pdf

        $pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);// 设置文档信息$pdf->SetCreator(PDF_CREATOR);$pdf->SetAuthor('anson');$pdf->SetTitle('TCPDF Example 001');$pdf->SetSubject('TCPDF Tutorial');$pdf->SetKeywords('TCPDF, PDF, example, test, guide');// 移除默认的页眉和页脚$pdf->setPrintHeader(false);$pdf->setPrintFooter(false);// 添加一页$pdf->AddPage();// 设置字体-这个是自己下载的中文字体$pdf->SetFont('stsong', '', 12);// 添加文本$text = '<h1>Hello World</h1><p>你好</p>';$pdf->writeHTML($text, true, false, true, false, '');// 添加图片
//        $image_file = 'path/to/your/image.jpg'; // 替换为实际图片路径
//        $pdf->Image($image_file, 15, 140, 75, 113, 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false);// 输出PDF文档$pdf->Output('example_001.pdf', 'I'); // 'I'表示直接在浏览器中打开PDF文件

3:第三种方法:MPDF
这个扩展安装,需要安装其他依赖,这个安装的时候,会提示出来,自己根据情况安装依赖就行,但是 mbstring 和 gd依赖是必须安装的
3.1:安装

composer require mpdf/mpdf: "^8.2"

3.2:下载中文字体ttf文件直接放到目录下就支持中文了【/vendor/mpdf/mpdf/ttfonts/STSong.ttf】
3.3:生成pdf

        // 创建一个新的mPDF实例$fontDir = realpath(__DIR__ . '/../../vendor/mpdf/mpdf/ttfonts/');// 字体路径$mpdf = new Mpdf(['mode' => 'UTF-8','format' => 'A4','fontDir' => $fontDir,'fontdata' => ['msyh' => ['R' => 'STSong.ttf','B' => 'FreeMono.ttf',]],'default_font' => 'msyh',]);
//        $mpdf->setBorder()$html = '<h1>Hello World</h1><p>你好</p>';// 将HTML内容写入PDF对象$mpdf->WriteHTML($html);// 输出PDF文件给用户下载,或者直接在浏览器中打开$mpdf->Output('hello_world.pdf', 'D'); // 'D' 参数表示下载文件

注意:目前不管用那种方式都不能完全支持所有的css样式,都需要自己调试

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

相关文章:

  • 【Android笔记】记一次 CMake 构建 Filament Android 库的完整排错过程(安卓交叉编译、CMake、Ninja)
  • C#中的BeginInvoke和EndInvoke:异步编程的双剑客
  • 告别延迟!modbus tcp转profine网关助力改造电厂改造升级
  • 《软件工程》第 5 章 - 需求分析模型的表示
  • 解释k8s种ConfigMap和Secret的作用,如何在Pod中挂载环境变
  • 阿里云国际版香港轻量云服务器:CN2 GIA加持,征服海外网络的“速度与激情”!
  • Qt6无法识别OpenCV(Windows端开发)
  • 二、网络安全常见编码及算法-(2)
  • Windows系统安装MySQL Connector 使用C++ VS2022连接MySQL
  • D2000平台上Centos使用mmap函数遇到的陷阱
  • Elasticsearch索引机制与Lucene段合并策略深度解析
  • BPE、WordPiece 与 Unigram:三种主流子词分词算法对比
  • 青少年编程与数学 02-020 C#程序设计基础 11课题、可视化编程
  • AI时代新词-AI驱动的自动化(AI - Driven Automation)
  • 整合Jdk17+Spring Boot3.2+Elasticsearch9.0+mybatis3.5.12的简单用法
  • Starrocks 物化视图的实现以及在刷新期间能否读数据
  • 前后端传输 Long 类型数据时(时间戳,雪花算法ID),精度丢失的根本原因
  • 探索容器技术:Docker与Kubernetes的实践指南
  • Ubuntu从0到1搭建监控平台:本地部署到公网访问实战教程Cpolar穿透与Docker部署全过程
  • vscode java debug terminal 中文乱码
  • 3D PDF如何制作?SOLIDWORKS MBD模板定制技巧
  • Qt DateTimeEdit(时间⽇期的微调框)
  • C# 类和继承(屏蔽基类的成员)
  • 基于qt5和stk10开发的互联调试
  • matlab雷达定位仿真
  • 基于vue框架的动物园饲养管理系统a7s60(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • MySQL 索引和事务
  • BERT分类器和朴素贝叶斯分类器比较
  • WPS自动换行
  • C#面向对象核心:类继承详解