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,这种,方式不需要安装依赖。

php 复制代码
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

php 复制代码
composer require tecnickcom/tcpdf:6.3.5

2.2:下载ttf文件【平台不支持上传,自己随便上网搜的下载一个就行】

STSong.ttf【最好是将这个文件放到下载好的扩展下面,我的是在

php 复制代码
vendor/tecnickcom/tools

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

php 复制代码
php tcpdf/tools/tcpdf_addfont.php -b -t CID0CS -i STSsong.ttf

3:开始下载pdf

php 复制代码
        $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:安装

php 复制代码
composer require mpdf/mpdf: "^8.2"

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

3.3:生成pdf

php 复制代码
        // 创建一个新的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样式,都需要自己调试

相关推荐
微信公众号:AI创造财富38 分钟前
文生视频(Text-to-Video)
开发语言·人工智能·python·深度学习·aigc·virtualenv
sunrui5211 小时前
ESP 8266+ TTS 实现对讲机语音播报 时间 和信息
开发语言
技术猿188702783511 小时前
Java、PHP、C++ 三种语言实现爬虫的核心技术对比与示例
java·c++·php
Q_Q5110082851 小时前
python的校园兼职系统
开发语言·spring boot·python·django·flask·node.js·php
OpenC++1 小时前
【C++】原型模式
开发语言·c++·设计模式·原型模式
C语言小火车1 小时前
【C语言】贪吃蛇小游戏 丨源码+解析
c语言·开发语言·课程设计·c语言游戏·贪吃蛇源码
极地星光2 小时前
Qt/C++应用:防御性编程完全指南
开发语言·c++·qt
Love__Tay2 小时前
【Python小练习】3D散点图
开发语言·python·3d
iCxhust3 小时前
一款复古的Intel8088单板机制作
开发语言·单片机·嵌入式硬件
CoderIsArt3 小时前
C# WPF常用调试工具汇总
开发语言·c#·wpf