Laravel使用Dompdf插件生成打印PDF文件具体步骤是什么?
- 内容介绍
- 文章标签
- 相关推荐
本文共计850个文字,预计阅读时间需要4分钟。
如果您在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.php的providers数组中添加:Barryvdh\DomPDF\ServiceProvider::class。
3、同样在config/app.php的aliases数组中添加门面别名:'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: inline(stream()默认满足),否则浏览器可能触发下载而非内嵌显示。
本文共计850个文字,预计阅读时间需要4分钟。
如果您在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.php的providers数组中添加:Barryvdh\DomPDF\ServiceProvider::class。
3、同样在config/app.php的aliases数组中添加门面别名:'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: inline(stream()默认满足),否则浏览器可能触发下载而非内嵌显示。

