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.pswp.cn/news/907400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

联通专线加持!亿林网络 24 核 32G 裸金属服务器,千兆共享带宽适配中小型企业 IT 架构

在当今数字化时代&#xff0c;企业的业务运营越来越依赖高效、稳定的 IT 架构。对于中小型企业而言&#xff0c;如何在有限的预算内构建强大且可靠的 IT 基础设施&#xff0c;是一项关键挑战。亿林网络推出的 24 核 32G 裸金属服务器&#xff0c;搭配联通专线和千兆共享带宽&am…

SQL计算列

SqlServer: ALTER TABLE KC_BILLHEAD ADD bill_no AS coalesce(billno , ) PERSISTED; 这是一个SQL语句&#xff0c;用于向表KC_BILLHEAD添加一个计算列bill_no。让我解释一下这个语句的各个部分&#xff1a; ALTER TABLE KC_BILLHEAD - 修改表KC_BILLHEAD的结构 ADD bill_n…

利用海外代理IP,做Twitter2026年全球趋势数据分析

近年来&#xff0c;社交媒体趋势分析逐渐成为品牌监控、市场洞察和消费者研究的必备工具。而当谈到全球趋势数据分析&#xff0c;很多人都会立即想到 Twitter趋势&#xff08;逼近连美丽国的总统都喜欢在上面发表自己的看法- -!!!&#xff09;。Twitter趋势&#xff0c;即Twitt…

【Vue3】Vue3 + TypeScript 中如何区分开发和生产环境的 API 地址(支持 axios 请求

Vue3 TypeScript 中如何区分开发和生产环境的 API 地址&#xff08;支持 axios 请求&#xff09; 在实际项目开发中&#xff0c;我们通常会遇到以下需求&#xff1a; 本地开发时访问的是本地 API&#xff08;如 http://localhost:3000&#xff09;&#xff1b;上线打包后访问…

【数据结构】线性表之“双链表(带头循环双向链表)”

- 第 99 篇 - Date: 2025 - 05 - 25 Author: 郑龙浩/仟墨 【数据结构】 续上一篇: 线性表之“单链表” 文章目录 “双链表&#xff08;带头双向循环链表&#xff09;” 的实现:分步解释所有函数&#xff1a;test.cDListNode.hDListNode.c “双链表&#xff08;带头双向循环链表…

【学习笔记】Transformer

学习的博客&#xff08;在此致谢&#xff09;&#xff1a; 初识CV - Transformer模型详解&#xff08;图解最完整版&#xff09; 1 整体结构 Transformer由Encoder和Decoder组成&#xff0c;分别包含6个block。 Transformer的工作流程大体如下&#xff1a; 获取每个单词的em…

[MMU]IOMMU的主要职能及详细的验证方案

IOMMU的主要职能及详细的验证方案 摘要&#xff1a;IOMMU&#xff08;Input/Output Memory Management Unit&#xff09;是一种硬件组件&#xff0c;负责管理I/O设备对内存的直接访问&#xff08;DMA&#xff0c;Direct Memory Access&#xff09;&#xff0c;其主要作用是提供…

动物类 如何使用Yolov11训练使用牛羊数据集 实现对牛羊进行检测数据集

牛羊检测数据集 3700张 平视视角牛羊检测 带标注 voc yolo 牛羊检测数据集 3700张 牛羊检测平视 带标注 voc yolo 分类名: (图片张数&#xff0c;标注个数) cattle: (1395&#xff0c;4309) sheep: (2393&#xff0c;1 1205) 总数: (3791&#xff0c; 15514) 总类(nc): 2类 以…

搭建frp内网穿透

前言 内网穿透的原理我就不多说了哈&#xff0c;既然会看到我这篇文章&#xff0c;想必都知道内网穿透是做什么的吧 frp分为服务端和客户端&#xff0c;服务端一般是搭在公网服务器中&#xff0c;客户端一般搭在本地或者局域网&#xff0c;需要提前在服务端搭好ftp server&am…

Tailwind CSS 实战,基于 Kooboo 构建 AI 对话框页面(四):语音识别输入功能

基于前三章的内容&#xff0c;开发AI 对话框语音识别输入功能&#xff1a; Tailwind css实战&#xff0c;基于Kooboo构建AI对话框页面&#xff08;一&#xff09;-CSDN博客 Tailwind css实战&#xff0c;基于Kooboo构建AI对话框页面&#xff08;二&#xff09;&#xff1a;实…

ollama list模型列表获取 接口代码

ollama list模型列表获取 接口代码 curl http://localhost:11434/v1/modelscoding package hcx.ollama;/*** ClassName DockerOllamaList* Description TODO* Author dell* Date 2025/5/26 11:31* Version 1.0**/import java.io.BufferedReader; import java.io.InputStreamR…

ISOLAR软件生成报错处理(五)

错误1 An error has occurred. See error log for more details. java.lang.NullPointerException 这东西不用管&#xff0c;不影响生成 错误2 Description Resource Path Location Type Target ARObject: <xxxx> CompuMethod used for floating-point data conversi…

前端开发定时,ES学习,java集合

1.前端vue3加入定时任务&#xff1a; import { onMounted, ref,onUnmounted } from vue;//初始化&#xff0c;结束调用部分引用let timer: any;//定时器onMounted(async () > {timer setInterval(() > {open()//需要定时的任务}, 60000)//一分钟调用一次}); onUnmounte…

Photoshop2025(PS2025)软件及安装教程

在数字图像编辑领域&#xff0c;Adobe Photoshop 一直是无可争议的王者。如今&#xff0c;Photoshop 2025 重磅登场&#xff0c;再次为我们带来了惊喜与变革&#xff0c;进一步巩固了它在行业中的领先地位。 Photoshop 2025 在人工智能方面的升级令人瞩目。其全新的 “Magic Se…

【SQL Server Management Studio 连接时遇到的一个错误】

第一次用SQL Server Management Studio启动之后第一步就是要建立连接 但是不知道Server Name要填什么&#xff0c;看了网上的教程说是要找到下面这个注册表中对应的实例名称填上去&#xff0c;或者前面加localhost 但是好像都没有用&#xff0c;一直遇到报错如下&#xff1a;…

高等数学基础(向量矩阵及其创建和特殊的矩阵)

向量 向量是机器学习最底层的组成部分, 也是基础数据的表示形式, 线性代数通过将研究对象拓展到向量, 对多维数据进行统一研究, 而进化出的方法方便我们可以研究和解决真实世界中的问题 标量 标量也称为"无向量", 使用一个单独的数表示数值大小, 可以有正负之分, …

IBM DB2数据库管理工具IBM Data Studio

一、介绍 IBM Data Studio 是 IBM 提供的一个集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于支持数据管理、开发、优化和管理数据库应用程序&#xff0c;特别是在 IBM Db2 和其他数据库平台上。它提供了许多功能&#xff0c;以帮助开发人员和数据库管理员提高生产力…

Java异常处理的全面指南

Java异常处理的全面指南 一、Java异常的基础概念1.1 什么是异常1.2 异常类的层次结构 二、Java异常的处理方式2.1 try-catch块2.2 throws关键字2.3 throw关键字 三、自定义异常3.1 自定义受检异常3.2 自定义非受检异常 四、Java异常处理的最佳实践4.1 捕获合适粒度的异常4.2 避…

MediaMtx开源项目学习

这个博客主要记录MediaMtx开源项目学习记录,主要包括下载、推流(摄像头,MP4)、MediaMtx如何使用api去添加推流,最后自定义播放器,播放推流后的视频流,自定义Video播放器博客地址 1 下载 MediaMTX MediaMTX 提供了预编译的二进制文件,您可以从其 GitHub 页面下载: Gi…

【unity游戏开发——编辑器扩展】EditorApplication公共类处理编辑器生命周期事件、播放模式控制以及各种编辑器状态查询

注意&#xff1a;考虑到编辑器扩展的内容比较多&#xff0c;我将编辑器扩展的内容分开&#xff0c;并全部整合放在【unity游戏开发——编辑器扩展】专栏里&#xff0c;感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言一、监听编辑器事件1、常用编辑器事件2、示例监听播放模…