一、通过composer下载laravel框架
composer create-project --prefer-dist laravel/laravel laravel-pdf
cd laravel-pdf
安装依赖yum install libXrender*
yum install libssl*
yum install libXext*
yum install libfontconfig*
二、新增barryvdh/laravel-snappy 、h4cc/wkhtmltoimage-amd64、h4cc/wkhtmltopdf-amd64 包文件
"barryvdh/laravel-snappy": "^0.4.6",
"h4cc/wkhtmltoimage-amd64": "0.12.x",
"h4cc/wkhtmltopdf-amd64": "0.12.x",
执行composer update
三、配置laravel-snappy 扩展包
打开config/app.php 将 Barryvdh\Snappy\ServiceProvider::class, 添加到 provider数组中
添加facade到config / app.php中的aliases数组中
'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,
'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,
四、通过pushlish 发布pdf配置
php artisan vendor:publish
打开 /config/snappy.php 修改成如下配置:
'pdf' => [
'enabled' => true,
'binary' => base_path('vendor' . DIRECTORY_SEPARATOR . 'h4cc' . DIRECTORY_SEPARATOR . 'wkhtmltopdf-amd64'
. DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'wkhtmltopdf-amd64'),
'timeout' => false,
'options' => [],
'env' => [],
],
'image' => [
'enabled' => true,
'binary' => base_path('vendor' . DIRECTORY_SEPARATOR . 'h4cc' . DIRECTORY_SEPARATOR . 'wkhtmltoimage-amd64'
. DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'wkhtmltoimage-amd64'),
'timeout' => false,
'options' => [],
'env' => [],
],
五、生成pdf
为了方便,使用功能测试进行pdf文件生成:
1、首先创建PdfTest测试类
[root@iz25vpndgurz laravel-pdf]# php artisan make:test PdfTest
Test created successfully.
2、创建pdfCreate方法
public function testPdfCreate(){
$htmlContent=<<
html>
h1{
color:red;
}
.hh{
color: aqua;
font-weight: bold;
}
title h1
this is content
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
TOT;
$pdf = app('snappy.pdf.wrapper')->loadHTML($htmlContent)->setOption('dpi', 300)->setOption('margin-bottom','10')
->setOption('margin-left','0')->setOption('margin-right','0')->setOption('margin-top','10')
->setOption('page-offset','1')->setOption('page-height','100');
$res = $pdf->save('aa.pdf',true);
$this->assertIsBool(true);
}
执行 PdfTest 中的 testPdfCreate方法./vendor/bin/phpunit tests/Feature/PdfTest --filter testPdfCreate
sz aa.pdf 下载到本地
支持中文:
将字体文件上传至 /usr/share/fonts
./vendor/bin/phpunit tests/Feature/PdfTest --filter testPdfCreate
效果如图:
六、生成图片public function testImgCreate(){
$htmlContent=<<
html>
h1{
color:red;
}
.hh{
color: aqua;
font-weight: bold;
}
title h1 我是标题 这是生成的图片
this is content
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh图片图片hhhhhhhhhhh
TOT;
$pdf = app('snappy.image.wrapper')->loadHTML($htmlContent);
$res = $pdf->save('aa.jpg',true);
$this->assertIsBool(true);
}
./vendor/bin/phpunit tests/Feature/PdfTest --filter testImgCreate
七、编写方法通过url形式生成pdf文件
使用接口的方式访问,返回生成对应pdf文件的路径
针对目录下的文件,开启脚本,对文件进行隔天删除,否则占用空间。
文件查找 推荐一个包: symfony/finder
我的博客另一篇文章:
安装 laravel-snappy 扩展包 生成pdf、图片文件
踩坑经验- 中文字体支持
http://www.xiaosongit.com/index/detail/id/865.html
pdf其他属性:
/**
* -options: array:132 [
* "collate" => null
* "no-collate" => null
* "cookie-jar" => null
* "copies" => null
* "dpi" => null
* "extended-help" => null
* "grayscale" => null
* "help" => null
* "htmldoc" => null
* "ignore-load-errors" => null
* "image-dpi" => null
* "image-quality" => null
* "license" => null
* "log-level" => null
* "lowquality" => true
* "manpage" => null
* "margin-bottom" => null
* "margin-left" => null
* "margin-right" => null
* "margin-top" => null
* "orientation" => null
* "page-height" => null
* "page-size" => null
* "page-width" => null
* "no-pdf-compression" => null
* "quiet" => null
* "read-args-from-stdin" => null
* "readme" => null
* "title" => null
* "use-xserver" => null
* "version" => null
* "dump-default-toc-xsl" => null
* "dump-outline" => null
* "outline" => null
* "no-outline" => null
* "outline-depth" => null
* "output-format" => null
* "allow" => null
* "background" => null
* "no-background" => null
* "bypass-proxy-for" => null
* "cache-dir" => null
* "checkbox-checked-svg" => null
* "checkbox-svg" => null
* "cookie" => null
* "custom-header" => null
* "custom-header-propagation" => null
* "no-custom-header-propagation" => null
* "debug-javascript" => null
* "no-debug-javascript" => null
* "default-header" => null
* "encoding" => null
* "disable-external-links" => null
* "enable-external-links" => null
* "disable-forms" => null
* "enable-forms" => null
* "images" => null
* "no-images" => null
* "disable-internal-links" => null
* "enable-internal-links" => null
* "disable-javascript" => null
* "enable-javascript" => null
* "javascript-delay" => null
* "keep-relative-links" => null
* "load-error-handling" => null
* "load-media-error-handling" => null
* "disable-local-file-access" => null
* "enable-local-file-access" => null
* "minimum-font-size" => null
* "exclude-from-outline" => null
* "include-in-outline" => null
* "page-offset" => null
* "password" => null
* "disable-plugins" => null
* "enable-plugins" => null
* "post" => null
* "post-file" => null
* "print-media-type" => null
* "no-print-media-type" => null
* "proxy" => null
* "proxy-hostname-lookup" => null
* "radiobutton-checked-svg" => null
* "radiobutton-svg" => null
* "redirect-delay" => null
* "resolve-relative-links" => null
* "run-script" => null
* "disable-smart-shrinking" => null
* "enable-smart-shrinking" => null
* "ssl-crt-path" => null
* "ssl-key-password" => null
* "ssl-key-path" => null
* "stop-slow-scripts" => null
* "no-stop-slow-scripts" => null
* "disable-toc-back-links" => null
* "enable-toc-back-links" => null
* "user-style-sheet" => null
* "username" => null
* "viewport-size" => null
* "window-status" => null
* "zoom" => null
* "footer-center" => null
* "footer-font-name" => null
* "footer-font-size" => null
* "footer-html" => null
* "footer-left" => null
* "footer-line" => null
* "no-footer-line" => null
* "footer-right" => null
* "footer-spacing" => null
* "header-center" => null
* "header-font-name" => null
* "header-font-size" => null
* "header-html" => null
* "header-left" => null
* "header-line" => null
* "no-header-line" => null
* "header-right" => null
* "header-spacing" => null
* "replace" => null
* "cover" => null
* "toc" => null
* "disable-dotted-lines" => null
* "toc-depth" => null
* "toc-font-name" => null
* "toc-l1-font-size" => null
* "toc-header-text" => null
* "toc-header-font-name" => null
* "toc-header-font-size" => null
* "toc-level-indentation" => null
* "disable-toc-links" => null
* "toc-text-size-shrink" => null
* "xsl-style-sheet" => null
*/