」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 在 Laravel 中產生 PDF 文檔

在 Laravel 中產生 PDF 文檔

發佈於2024-08-16
瀏覽:208

Generating PDF documents in Laravel

Laravel 和 DomPDF:使用图像和 CSS 生成 PDF 文档的分步指南

创建 PDF 文档是 Web 应用程序中的常见要求,尤其是生成发票、收据、证书、票据和各种报告。在这个综合教程中,我们将深入研究如何使用 Laravel 和 DomPDF 生成带有图像和 CSS 的 PDF 文档。我们将介绍配置选项、设计注意事项、输出大小、性能和数据库查询。此外,我们还将讨论处理分页符、使用 base64 加载图像等的提示和技巧。

先决条件

在我们开始之前,请确保您已安装以下软件:

  • PHP >=8.2
  • 作曲家 2
  • Laravel 10

介绍

DomPDF 是一个流行的 PHP 库,允许您从 HTML 内容生成 PDF 文档。它支持 CSS 样式、图像和各种配置选项。通过将 DomPDF 与 Laravel 集成,您可以使用 Blade 模板和 Laravel 的强大功能轻松创建复杂的 PDF 文档。

其他流行的 PDF 库包括 TCPDF、FPDF 和 Snappy。

然而,DomPDF 由于其易于集成和强大的功能集而被广泛使用。

在本教程中,我们将逐步介绍设置 Laravel 项目、配置 DomPDF、创建处理 PDF 生成的控制器、为 PDF 内容设计 Blade 模板、添加路由和优化性能的过程。我们还将讨论高级配置选项并提供生成高质量 PDF 文档的提示和技巧。

假设

本教程假设您对 Laravel 和 PHP 有基本的了解。如果您是 Laravel 新手,请考虑阅读官方 Laravel 文档来熟悉该框架。否则,您可以按照 Laravel Bootcamp 开始使用 Laravel。

第 1 步:设置 Laravel 项目

首先,如果你还没有Laravel项目,请创建一个新的Laravel项目,或者使用现有的项目,当然,如果你已经有Laravel项目,你可以跳过这一步。

composer create-project --prefer-dist laravel/laravel pdf-tutorial
cd pdf-tutorial

接下来,安装DomPDF:

composer require barryvdh/laravel-dompdf

发布配置文件:

php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"

第2步:配置DomPDF

打开config/dompdf.php文件。配置文件包含用于自定义 PDF 输出的各种选项。在这里您可以设置各种选项,包括默认纸张尺寸、方向、字体等。

  • 纸张尺寸: 您可以设置默认纸张尺寸。
  'default_paper_size' => 'a4',
  • 方向: 设置默认方向(纵向或横向)。
  'orientation' => 'portrait',
  • 字体:您可以指定默认字体并添加自定义字体。
  'default_font' => 'serif',

第三步:创建控制器

创建一个控制器来处理 PDF 生成:

php artisan make:controller PDFController

在app/Http/Controllers/PDFController.php中,添加以下代码:

 'Laravel PDF Example',
            'date' => date('m/d/Y'),
        ];

        $pdf = PDF::loadView('myPDF', $data);

        return $pdf->download('document.pdf');
    }
}

第 4 步:创建刀片模板

为 PDF 内容创建 Blade 模板:

touch resources/views/myPDF.blade.php

将以下内容添加到myPDF.blade.php:



    Laravel PDF Example

{{ $title }}

Date: {{ $date }}

This is an example of a PDF document generated using Laravel and DomPDF.

第5步:添加路由

在routes/web.php中添加处理PDF生成的路由:

use App\Http\Controllers\PDFController;

Route::get('generate-pdf', [PDFController::class, 'generatePDF']);

第 6 步:添加图像

您可以通过将图像嵌入为 Base64 编码字符串或使用 URL 来将图像添加到 PDF。

图像可以使用base64编码直接嵌入到Blade模板中。例如,要嵌入来自 public/images 的图像,可以这样做:

Logo

或直接从 URL:

Logo

第 7 步:优化性能

数据库查询

处理大型数据集(例如 1,000 条记录)时,使用分页或分块来管理内存使用情况:

$data = DB::table('users')->paginate(50);

$pdf = PDF::loadView('myPDF', ['data' => $data]);

输出尺寸

要减小输出大小,请尽量减少使用大量图像,并尽可能选择矢量图形。另外,使用高效的 CSS。

分页符

确保内容结构良好,适合分页。使用CSS处理分页符:

.page-break {
    page-break-after: always;
}

在您的 Blade 模板中:

步骤8:高级配置

更多高级配置,请参考DomPDF文档。您可以自定义几乎所有内容,从边距到字体加载方式。

使用自定义字体

要使用自定义字体,首先,将它们添加到您的项目中并配置 DomPDF 以使用它们:

'custom_font_dir' => base_path('resources/fonts/'),
'custom_font_data' => [
    'custom-font' => [
        'R' => 'CustomFont-Regular.ttf',
        'B' => 'CustomFont-Bold.ttf',
    ]
],

在您的 Blade 模板中:

结论

通过遵循此分步指南,您可以使用 Laravel 和 DomPDF 生成复杂的 PDF 文档,并包含图像和 CSS 样式。本教程涵盖了基本的配置选项、设计注意事项、性能优化。您可以扩展此基础,为您的 Laravel 应用程序构建强大的文档生成系统。

潜在系列和存储库

本教程是使用 Laravel 生成 PDF 系列的一部分。可以在此处找到包含各种文档模板(发票、收据、证书、票据等)的完整存储库。请随意贡献并扩大收藏。

编码愉快!

版本聲明 本文轉載於:https://dev.to/alphaolomi/generating-pdf-documents-in-laravel-n07?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 增強您的 Web 動畫:像專業人士一樣最佳化 requestAnimationFrame
    增強您的 Web 動畫:像專業人士一樣最佳化 requestAnimationFrame
    流畅且高性能的动画在现代 Web 应用程序中至关重要。然而,管理不当可能会使浏览器的主线程过载,导致性能不佳和动画卡顿。 requestAnimationFrame (rAF) 是一种浏览器 API,旨在将动画与显示器的刷新率同步,从而确保与 setTimeout 等替代方案相比更流畅的运动。但有效...
    程式設計 發佈於2024-11-06
  • 為什麼MySQL伺服器在60秒內就消失了?
    為什麼MySQL伺服器在60秒內就消失了?
    MySQL 伺服器已消失- 恰好在60 秒內在此場景中,之前成功運行的MySQL 查詢現在遇到了60 秒後逾時,顯示錯誤「MySQL 伺服器已消失」。即使調整了 wait_timeout 變量,問題仍然存在。 分析:超時正好發生在 60 秒,這表明是設置而不是資源限制是原因。直接從 MySQL 客戶...
    程式設計 發佈於2024-11-06
  • 為什麼帶有“display: block”和“width: auto”的按鈕無法拉伸以填充其容器?
    為什麼帶有“display: block”和“width: auto”的按鈕無法拉伸以填充其容器?
    了解具有“display: block”和“width: auto”的按鈕的行為當您設定“display: block”時一個按鈕,它會調整其佈局以佔據可用的整個寬度。但是,如果將其與“width: auto”結合使用,則按鈕會出現意外行為,並且無法拉伸以填充其容器。此行為源自於按鈕作為替換元素的基...
    程式設計 發佈於2024-11-06
  • 為 Bluesky Social 創作機器人
    為 Bluesky Social 創作機器人
    How the bot will work We will develop a bot for the social network Bluesky, we will use Golang for this, this bot will monitor some hashtags ...
    程式設計 發佈於2024-11-06
  • 為什麼 PHP 的浮點運算會產生意外的結果?
    為什麼 PHP 的浮點運算會產生意外的結果?
    PHP 中的浮點數計算精度:為什麼它很棘手以及如何克服它在PHP 中處理浮點數時,這一點至關重要了解其固有的準確性限制。如程式片段所示:echo("success");} else {echo("error");} 您可能會驚訝地發現,儘管值之間的差異小於0....
    程式設計 發佈於2024-11-06
  • Python中可以透過變數ID逆向取得物件嗎?
    Python中可以透過變數ID逆向取得物件嗎?
    從 Python 中的變數 ID 擷取物件參考Python 中的 id() 函數傳回物件的唯一識別。人們很容易想知道是否可以反轉此過程並從其 ID 取得物件。 具體來說,我們想要檢查取消引用變數的ID 是否會擷取原始物件:dereference(id(a)) == a瞭解引用的概念及其在Python...
    程式設計 發佈於2024-11-06
  • Go 的 Defer 關鍵字如何在函數執行順序中發揮作用?
    Go 的 Defer 關鍵字如何在函數執行順序中發揮作用?
    了解 Go 的 Defer 關鍵字的功能使用 Go 時,了解 defer 關鍵字的行為至關重要。此關鍵字允許開發人員推遲函數的執行,直到周圍的函數返回。但是,需要注意的是,函數的值和參數在執行 defer 語句時進行評估。 範例:評估 Defer Order為了說明這一點,請考慮以下內容代碼:pac...
    程式設計 發佈於2024-11-06
  • WordPress Gutenberg 全域狀態管理初學者指南
    WordPress Gutenberg 全域狀態管理初學者指南
    构建复杂的 WordPress 块编辑器 (Gutenberg) 应用程序时,有效管理状态变得至关重要。这就是 @wordpress/data 发挥作用的地方。它允许您跨 WordPress 应用程序中的不同块和组件管理和共享全局状态。 如果您不熟悉管理全局状态或使用@wordpress/data,...
    程式設計 發佈於2024-11-06
  • 亞馬遜解析簡單且完全由您自己完成
    亞馬遜解析簡單且完全由您自己完成
    I came across a script on the Internet that allows you to parse product cards from Amazon. And I just needed a solution to a problem like that. I wrac...
    程式設計 發佈於2024-11-06
  • React JSX 如何在幕後轉換為 JavaScript
    React JSX 如何在幕後轉換為 JavaScript
    當您編寫 React 時,您會經常看到 JSX – 在 JavaScript 程式碼中看起來像 HTML 的語法。但你有沒有想過這段程式碼在瀏覽器中是如何運作的呢? 神奇之處在於:JSX 不是有效的 JavaScript!瀏覽器無法直接理解它。在幕後,像 Babel 這樣的工具介入將 JSX 轉換...
    程式設計 發佈於2024-11-06
  • 如何透過 CSS 變換實現傾斜:兩側傾斜
    如何透過 CSS 變換實現傾斜:兩側傾斜
    使用CSS 變換實現傾斜:傾斜兩側提供的圖像展示了一種有趣的傾斜效果,該效果使元素的兩個角都形成角度。若要使用 CSS 轉換重新建立此效果,請按照下列步驟操作:應用透視傾斜:若要新增透視,請使用下列 CSS屬性:transform: perspective(distance) rotateY(ang...
    程式設計 發佈於2024-11-06
  • Express.js 基礎:初學者指南 - Node.js 教學系列 - 第 10 部分
    Express.js 基礎:初學者指南 - Node.js 教學系列 - 第 10 部分
    介紹: 嘿!如果您是 Node.js 新手,您可能聽說過 Express.js——一個用於建立 Web 伺服器和 API 的輕量級、快速且靈活的框架。在本指南中,我將引導您了解 Express 的基礎知識,並向您展示入門是多麼容易。 準備好?讓我們開始吧! 1....
    程式設計 發佈於2024-11-06
  • Python:未來的語言
    Python:未來的語言
    在不断发展的技术领域,某些编程语言已经占据主导地位,并塑造了我们构建软件和与软件交互的方式。其中,Python 脱颖而出,它不仅获得了巨大的普及,而且还将自己定位为未来技术的关键工具。其简单性、多功能性和强大的库使 Python 成为从 Web 开发到数据科学、人工智能、自动化等各种应用程序的首选语...
    程式設計 發佈於2024-11-06
  • 如何在 PHP 中將 PDF 檔案儲存為 MySQL BLOB(帶有程式碼範例)?
    如何在 PHP 中將 PDF 檔案儲存為 MySQL BLOB(帶有程式碼範例)?
    使用PHP 將PDF 檔案儲存為MySQL BLOB使用PHP 在MySQL 中將PDF 檔案儲存為BLOB(二進位大物件)時,建議考慮在資料庫中儲存二進位資料的潛在缺點。但是,如果您選擇這樣做,可以採用以下方法:首先,定義一個包含整數 ID 欄位和名為 DATA 的 BLOB 欄位的資料表。 用於...
    程式設計 發佈於2024-11-06
  • 使用 React Router v6 在 React 中實作麵包屑
    使用 React Router v6 在 React 中實作麵包屑
    面包屑在网页开发中非常重要,因为它们为用户提供了一种方法来跟踪他们在我们网页中的当前位置,并帮助我们的网页导航。 在本指南中,我们将使用 React-router v6 和 Bootstrap 在 React 中实现面包屑。 React-router v6 是 React 和 React Nati...
    程式設計 發佈於2024-11-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3