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


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 = '

dongxuemin

'; // 从 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 = '

dongxuemin

'; // 加载 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 搜索了半天,没找到有用的解决方法,只有采用 '第一种' 安装方法,官网下载软件包

 

你可能感兴趣的:(php,laravel框架,PDF相关技术)