网站首页 > 开源技术 正文
方案一:laravel框架下安装laravel-snappy 直接使用html页面生成PDF 。
静态页面样式容易控制,扩展包底层使用wkhtmltopdf可完美生成pdf 。
1.安装wkhtmtopdf
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
2.复制文件到系统的可执行目录中,并赋予可执行权限
cp vendor/h4cc/wkhtmltoimage-amd64/bin/wkhtmltoimage-amd64 /usr/local/bin/
cp vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64 /usr/local/bin/
//并使其可执行:
chmod +x /usr/local/bin/wkhtmltoimage-amd64
chmod +x /usr/local/bin/wkhtmltopdf-amd64
3.安装laravel-snappy。安装过程可参考GitHub - barryvdh/laravel-snappy: Laravel Snappy PDF。或者参考扩展包目录下的readme.md文件
composer require barryvdh/laravel-snappy
4.给系统安装中文字体,生成PDF时才不会产生乱码。
function pdf(){
$unitWidth = '1000px';
$unitHeight = '500px';
$html = '<div style="font-size:50">wkhtmltopdf生成PDF</div>';
$pdf = app()->make('snappy.pdf.wrapper');
$pdf->setOption('no-header-line',true);
$pdf->setOption('no-footer-line',true);
$pdf->setOption('disable-smart-shrinking',true);
$pdf->setOption('page-width',$unitWidth);
$pdf->setOption('page-height',$unitHeight);
$pdf->setOption('orientation','Portrait'); //Landscape | Portrait
$pdf->setOption('encoding','utf-8');
$pdf->setOption('margin-top','0');
$pdf->setOption('margin-bottom','0');
$pdf->setOption('margin-left','0');
$pdf->setOption('margin-right','0');
$pdf->setOption('dpi',96);
$pdf->loadHtml($html);
return $pdf->stream('preview');
}
方案二:使用tcpdf扩展生成PDF
composer require tecnickcom/tcpdf
为了能正常显示中文字体,我们可以安装自己需要的字体。
下载SourceHanSansCN-Normal.ttf字体,拷贝到扩展目录vendor\tecnickcom\tcpdf\tools中
php ./tcpdf_addfont.php -t TrueTypeUnicode -i SourceHanSansCN-Normal.ttf
function pdf(){
$html = '<div style="font-size:50px">TCPDF生成PDF</div>';
require_once app_path('Libs/Tecnickcom/tcpdf/tcpdf.php');
$pdf = new \TCPDF(PDF_PAGE_ORIENTATION, 'px', PDF_PAGE_FORMAT, true, 'UTF-8', true);
$pdf->setFontSubsetting(false);
$pdf->setAutoPageBreak('off');
$pdf->setMargins(0,0,0,true);
//自定义PDF页面尺寸大小。同一个PDF文件里可以有不同尺寸的页面。
$page_format = array(
'MediaBox' => array ('llx' => 0, 'lly' => 0, 'urx' => 1000, 'ury' =>400),
);
$pdf->AddPage('L', $page_format, false, false);
$pdf->writeHTMLCell(600,0,20,50,$html,1,1,0,true,'center');
echo $pdf->Output('preview.pdf', 'I');
}
注:字体安装建议使用ttf格式字体。
方案三:使用dompdf生成PDF文件
使用dompdf相对比较简单了。这里也是直接用html页面生成PDF
function pdf()
{
$filename = 'test.pdf';
$html = view('users.order_download', compact('info'));
$dompdf = new \Dompdf\Dompdf();
$dompdf->setOptions((new \Dompdf\Options(['enable_remote' => true, 'font_dir' => storage_path('app/public')])));
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
//将PDF保存到服务器文件
@file_put_contents(public_path($path), $dompdf->output());
return $dompdf->stream($filename, ['Attachment' => 1]); // 0输出到浏览器 1输出下载响应
}
dompdf如果需要中文字体可以在html文件中使用 css的font-face定义
@font-face {
font-family: 'SourceHanSansCN';
font-style: normal;
font-weight: normal;
/*这里需要使用完整的url地址*/
src: url("{{config('app.url').'/fonts/SourceHanSansCN-Normal.ttf'}}") format('truetype');
}
以上就是我在php项目开发中使用的三种生成PDF的方案。选择不同方案的理由也很简单:
- 借着项目开发每个方案都试试
- wkhtmltopdf真的是样式稳定好控制。
- tcpdf完全就是冲着可以有不同尺寸的页面去的,解决中文字体走了好多弯路。
- dompdf直接安装就能用,中文字体引入就可以,主要为了试试它对html支持度如何。结论是还不错,生成个产品参数手册很好用。
- 上一篇: EPUB转TXT方法有哪些?我来教你几招
- 下一篇: 怎么将PDF转网页格式?这篇文章教会你
猜你喜欢
- 2024-12-05 pdf是什么格式?超详细介绍
- 2024-12-05 Acrobat Pro DC 教程,如何将文件合并为 PDF?
- 2024-12-05 将网页转换为PDF的两个方法
- 2024-12-05 在 .NET 中使用 JsReport 将 HTML 转换为 PDF
- 2024-12-05 pdf怎么转换为ofd格式?pdf转ofd用什么软件?
- 2024-12-05 NetCore实战:基于html生成pdf文件案例讲解
- 2024-12-05 终于找到了一款免费又好用的pdf转换工具,支持多种格式转换。
- 2024-12-05 HTML转换成PDF,这样就搞定了
- 2024-12-05 pdf怎么转其他格式-几步快速学会pdf文件格式的转换方法
- 2024-12-05 牛逼!40行Python代码把html网页保存为pdf,太方便了
你 发表评论:
欢迎- 05-16东契奇:DFS训练时喷了我很多垃圾话 我不懂他为什么比赛不这么干
- 05-16这两球很伤!詹姆斯空篮拉杆不中 DFS接里夫斯传球空接也没放进
- 05-16湖人自媒体调查:89%球迷希望DFS回归79%希望詹姆斯回归
- 05-16Shams:湖人得到全能球员DFS 节省了1500万奢侈税&薪金空间更灵活
- 05-16G5湖人胜率更高!詹姆斯不满判罚,DFS谈5人打满下半场:这很艰难
- 05-16DFS:当东契奇进入状态 所有防守者在他面前都像个圆锥桶
- 05-16上一场9中6!DFS:不能让纳兹-里德这样的球员那么轻松地投三分
- 05-16WIDER FACE评测结果出炉:滴滴人脸检测DFS算法获世界第一
- 最近发表
-
- 东契奇:DFS训练时喷了我很多垃圾话 我不懂他为什么比赛不这么干
- 这两球很伤!詹姆斯空篮拉杆不中 DFS接里夫斯传球空接也没放进
- 湖人自媒体调查:89%球迷希望DFS回归79%希望詹姆斯回归
- Shams:湖人得到全能球员DFS 节省了1500万奢侈税&薪金空间更灵活
- G5湖人胜率更高!詹姆斯不满判罚,DFS谈5人打满下半场:这很艰难
- DFS:当东契奇进入状态 所有防守者在他面前都像个圆锥桶
- 上一场9中6!DFS:不能让纳兹-里德这样的球员那么轻松地投三分
- WIDER FACE评测结果出炉:滴滴人脸检测DFS算法获世界第一
- 湖人自媒体调查:89%球迷希望DFS回归 79%希望詹姆斯回归
- 一觉醒来湖人苦盼的纯3D终于到位 DFS能带给紫金军多少帮助
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)