当前位置: 首页 > 工具软件 > PHP Snappy > 使用案例 >

使用PHP将HTML生成PDF或图片:采用 laravel-snappy

严宇
2023-12-01

barryvdh/laravel-snappy 笔记:

	再次强调,laravel-snappy 是对 knplabs/knp-snappy 的 laravel 集成,而底层使用的是 wkhtmltopdf/wkhtmltoimage 包

	1.安装 wkhtmltopdf
		1>从 wkhtmltopdf 官方安装:
			https://wkhtmltopdf.org/downloads.html

		2>作为 composer 的依赖来安装:
			https://github.com/KnpLabs/snappy#wkhtmltopdf-binary-as-composer-dependencies

			32位系统:
				composer require h4cc/wkhtmltopdf-i386 0.12.x
				composer require h4cc/wkhtmltoimage-i386 0.12.x

			64位系统:
				composer require h4cc/wkhtmltopdf-amd64 0.12.x
				composer require h4cc/wkhtmltoimage-amd64 0.12.x				

		注意:
			我们系统,可能缺少一些依赖包,例如:libXrender,我们需要自己手动安装

	2.测试 wkhtmltopdf 安装是否成功
		直接在命令行运行 wkhtmltopdf 命令

		使用第二种方式来安装(作为 composer 依赖安装),安装后的目录位于:
			/vendor/h4cc/wkhtmltoimage-amd64/bin
			/vendor/h4cc/wkhtmltopdf-amd64/bin

		注意:
			vagrant 用户需要进行如下操作,来避免出现的 126 报错:
				1>将下载的二进制软件,移动到不在同步文件夹中的路径,例如:
					cp vendor/h4cc/wkhtmltoimage-amd64/bin/wkhtmltoimage-amd64 /usr/local/bin/
					cp vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64 /usr/local/bin/

				2>添加可执行权限:
					chmod +x /usr/local/bin/wkhtmltoimage-amd64 
					chmod +x /usr/local/bin/wkhtmltopdf-amd64

	3.barryvdh/laravel-snappy 安装 & 使用
		1>composer 安装:
			composer require barryvdh/laravel-snappy

		laravel 5.5 已经使用了包自动发现,我们不需要手动添加 'ServiceProvider/Facade'。如果使用了 'laravel-dompdf',可能会产生冲突。这种情况下,需要手动来注册 Facade,来解决这个问题(没打算使用,有使用的,万一冲突了,记得这个提示!)

		2>config/app.php
			providers:
				Barryvdh\Snappy\ServiceProvider::class,

			aliases:
				'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,
				'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,

		3>发布配置文件:
			php artisan vendor:publish --provider="Barryvdh\Snappy\ServiceProvider"

			配置文件中,我们主要是需要修改,wkhtmltopdf 和 wkhtmltoimage 的路径

		4>使用:
			1.使用 App 容器:
				$snappy = App::make('snappy.pdf');
				$html = '<h1>dongxuemin</h1>';

				// 从 HTML 字符串生成 PDF
				$snappy->generateFromHtml($html, '/tmp/test.pdf');

				// 从 URL 链接生成 PDF
				$snappy->generate('http://www.github.com', '/tmp/test.php');

				// 获取转换后的 PDF 字符串
				$pdf_response = $snappy->getOutputFromHtml($html);
				// 直接输出到浏览器下载
				return response($pdf_response, 200, [
			        'Content-Type'          => 'application/pdf',
			        'Content-Disposition'   => 'attachment; filename="file.pdf"'
				]);

			2.使用封装(wrapper):
				$pdf = App::make('snappy.pdf.wrapper');
				$html = '<h1>dongxuemin</h1>';

				// 加载 HTML
				$pdf->loadHTML($html);
				return $pdf->inline();

			3.使用 Facade:

				// 从 blade 模板加载
				$pdf = PDF::loadView('invoice.blade.php', $view_data)
				return $pdf->download('invoice.pdf');

				// 链式调用:
				return PDF::loadFile('http://www.github.com')->inline('github.pdf');

				// 改变方向和纸张大小
				PDF::loadHTML($html)
					->setPaper('a4')					// 纸张大小
					->setOrientation('landscape')		// 方向
					->setOption('margin-bottom', 0)		// 其他设置
					->save('myfile.pdf');				// 存储
					// ->output();						// 得到输出字符串

			4.更多信息和参数设置,参考 wkhtmltopdf 文档:
				http://wkhtmltopdf.org/usage/wkhtmltopdf.txt

	4.总结完后,实战操作了下:
		mac 系统使用 '第二种' 安装方法,报错:
			/xxx/wkhtmltopdf-amd64 cannot execute binary file
		搜索了半天,没找到有用的解决方法,只有采用 '第一种' 安装方法,官网下载软件包

 

 类似资料: