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
繁體地址,請注明出處:http://hk.pswp.cn/news/907400.shtml
英文地址,請注明出處:http://en.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、示例監聽播放模…