Laravel使用Dompdf插件生成打印PDF文件具体步骤是什么?

2026-04-24 16:552阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计850个文字,预计阅读时间需要4分钟。

Laravel使用Dompdf插件生成打印PDF文件具体步骤是什么?

如果您在Laravel项目中需要将HTML内容转换为PDF并输出,可以直接使用Laravel内置的PDF功能。以下是一个简单的示例:

一、安装Dompdf及Laravel适配包

Dompdf本身不直接支持Laravel的视图渲染机制,需借助laravel-dompdf包实现无缝集成。该包封装了Dompdf核心功能,并提供Facade和视图指令支持。

1、在项目根目录执行Composer命令安装laravel-dompdf包:composer require barryvdh/laravel-dompdf

2、若使用Laravel 5.5及以上版本,包会自动注册服务提供者;如为Laravel 5.4或更早版本,需手动在config/app.phpproviders数组中添加:Barryvdh\DomPDF\ServiceProvider::class

3、同样在config/app.phpaliases数组中添加门面别名:'PDF' => Barryvdh\DomPDF\Facade::class

二、发布并配置Dompdf设置

发布配置文件可自定义字体路径、纸张尺寸、DPI等参数,确保生成的PDF符合实际打印需求,避免中文乱码或布局错位。

1、运行Artisan命令发布配置:php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"

2、打开config/dompdf.php,确认'default_font'设为'sans-serif'或已加载中文字体(如'simhei'),并检查'chroot'是否指向public_path()以保障资源路径可读。

3、如需支持中文,将TrueType字体文件(如simhei.ttf)放入storage/fonts/目录,并运行php artisan dompdf:install-font simhei完成字体注册。

三、创建PDF专用视图模板

Laravel PDF生成依赖于Blade视图,该视图应仅包含适合打印的静态结构与内联样式,避免外部CSS文件引用,防止Dompdf无法解析路径。

1、在resources/views下新建视图文件,例如pdf/invoice.blade.php

2、在该文件中使用内联样式控制页面尺寸与边距,例如添加:<style>@page { margin: 1cm; } body { font-family: "simhei", sans-serif; font-size: 12px; }</style>

3、视图中可使用Laravel Blade语法动态插入数据,如{{ $order->number }},但禁止使用JavaScript或未被Dompdf支持的CSS属性(如flexbox、grid)。

四、在控制器中生成PDF响应

通过PDF门面调用loadView()方法加载Blade视图,再使用stream()download()触发浏览器响应,实现即时预览或强制下载。

1、在控制器方法中引入PDF门面:use PDF;

2、构建数据并传入视图:$data = ['order' => Order::find($id)];

3、生成PDF并返回流式响应:return PDF::loadView('pdf.invoice', $data)->stream('invoice.pdf');

4、若需保存PDF到服务器而非响应浏览器,改用save()方法:PDF::loadView('pdf.invoice', $data)->save(storage_path('app/invoices/invoice_'.$id.'.pdf'));

五、实现前端一键打印功能

生成PDF后,用户可能需要直接调用系统打印机输出纸质文档。可通过嵌入PDF预览并绑定浏览器原生打印指令实现。

1、在返回PDF流的路由中,不直接跳转,而是返回一个中间页面,内嵌<iframe>加载PDF URL。

2、在该页面中添加JavaScript按钮,点击时执行:document.querySelector('iframe').contentWindow.print();

3、确保PDF响应头包含Content-Disposition: inlinestream()默认满足),否则浏览器可能触发下载而非内嵌显示。

标签:LaravelPDF

本文共计850个文字,预计阅读时间需要4分钟。

Laravel使用Dompdf插件生成打印PDF文件具体步骤是什么?

如果您在Laravel项目中需要将HTML内容转换为PDF并输出,可以直接使用Laravel内置的PDF功能。以下是一个简单的示例:

一、安装Dompdf及Laravel适配包

Dompdf本身不直接支持Laravel的视图渲染机制,需借助laravel-dompdf包实现无缝集成。该包封装了Dompdf核心功能,并提供Facade和视图指令支持。

1、在项目根目录执行Composer命令安装laravel-dompdf包:composer require barryvdh/laravel-dompdf

2、若使用Laravel 5.5及以上版本,包会自动注册服务提供者;如为Laravel 5.4或更早版本,需手动在config/app.phpproviders数组中添加:Barryvdh\DomPDF\ServiceProvider::class

3、同样在config/app.phpaliases数组中添加门面别名:'PDF' => Barryvdh\DomPDF\Facade::class

二、发布并配置Dompdf设置

发布配置文件可自定义字体路径、纸张尺寸、DPI等参数,确保生成的PDF符合实际打印需求,避免中文乱码或布局错位。

1、运行Artisan命令发布配置:php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"

2、打开config/dompdf.php,确认'default_font'设为'sans-serif'或已加载中文字体(如'simhei'),并检查'chroot'是否指向public_path()以保障资源路径可读。

3、如需支持中文,将TrueType字体文件(如simhei.ttf)放入storage/fonts/目录,并运行php artisan dompdf:install-font simhei完成字体注册。

三、创建PDF专用视图模板

Laravel PDF生成依赖于Blade视图,该视图应仅包含适合打印的静态结构与内联样式,避免外部CSS文件引用,防止Dompdf无法解析路径。

1、在resources/views下新建视图文件,例如pdf/invoice.blade.php

2、在该文件中使用内联样式控制页面尺寸与边距,例如添加:<style>@page { margin: 1cm; } body { font-family: "simhei", sans-serif; font-size: 12px; }</style>

3、视图中可使用Laravel Blade语法动态插入数据,如{{ $order->number }},但禁止使用JavaScript或未被Dompdf支持的CSS属性(如flexbox、grid)。

四、在控制器中生成PDF响应

通过PDF门面调用loadView()方法加载Blade视图,再使用stream()download()触发浏览器响应,实现即时预览或强制下载。

1、在控制器方法中引入PDF门面:use PDF;

2、构建数据并传入视图:$data = ['order' => Order::find($id)];

3、生成PDF并返回流式响应:return PDF::loadView('pdf.invoice', $data)->stream('invoice.pdf');

4、若需保存PDF到服务器而非响应浏览器,改用save()方法:PDF::loadView('pdf.invoice', $data)->save(storage_path('app/invoices/invoice_'.$id.'.pdf'));

五、实现前端一键打印功能

生成PDF后,用户可能需要直接调用系统打印机输出纸质文档。可通过嵌入PDF预览并绑定浏览器原生打印指令实现。

1、在返回PDF流的路由中,不直接跳转,而是返回一个中间页面,内嵌<iframe>加载PDF URL。

2、在该页面中添加JavaScript按钮,点击时执行:document.querySelector('iframe').contentWindow.print();

3、确保PDF响应头包含Content-Disposition: inlinestream()默认满足),否则浏览器可能触发下载而非内嵌显示。

标签:LaravelPDF