在日常工作中,很多人需要把网页内容或数据库信息整理成PDF文件,比如生成订单单据、用户报表或者课程资料。这时候,用PHP脚本生成PDF就成了一个很实用的技能。虽然听起来像是程序员才做的事,但其实只要会点基础代码,普通人也能搞定。
为什么选择PHP来生成PDF
PHP作为老牌的Web开发语言,和服务器配合紧密,特别适合处理动态内容导出。比如你开了个小网店,客户下单后想自动出一张PDF格式的发票,就可以让服务器跑一段PHP脚本,把订单数据抓出来,直接生成文件下载。
常用的工具库:TCPDF 和 DomPDF
自己从零写PDF结构太麻烦,好在有现成的开源库可用。TCPDF功能强,支持中文和各种编码;DomPDF更贴近HTML习惯,写个网页就能转成PDF,上手快。
比如用DomPDF,先通过Composer安装:
composer require dompdf/dompdf
然后写一段简单的PHP脚本:
<?php
require_once 'vendor/autoload.php';
use Dompdf\Dompdf;
$html = '<h1>我的购物清单</h1>\n<ul>\n <li>大米 2公斤</li>\n <li>鸡蛋 10个</li>\n <li>牛奶 1升</li>\n</ul>';
dompdf = new Dompdf();
dompdf->loadHtml($html);
dompdf->setPaper('A4', 'portrait');
dompdf->render();
dompdf->stream('shopping_list.pdf', ['Attachment' => 0]);
?>
这段代码运行后,浏览器就会弹出一个名为 shopping_list.pdf 的文件预览。设置 Attachment => 1 就变成强制下载,适合做归档用。
中文显示问题怎么解决
默认情况下,有些字体不支持中文,导出后会出现方块或乱码。解决方法是引入支持中文的字体,比如思源黑体,并在CSS中指定。
<style>
body { font-family: SimSun, serif; }
</style>
<p>订单编号:20241012001</p>
<p>客户姓名:张伟</p>
同时确保服务器上有对应字体,或者使用内联的Google字体(需网络环境支持)。如果用TCPDF,还可以手动注册TTF字体文件。
结合硬件设备的实际应用
有些小型打印设备,比如超市的小票打印机或自助终端,后台就是基于Linux服务器跑PHP程序。当用户在触摸屏上完成操作后,系统自动生成PDF存档,同时打印一份纸质版。这种场景下,PHP生成PDF不仅减轻人工负担,还能保证格式统一。
甚至一些智能售货机的月度销售汇总,也会通过定时任务(cron job)每天执行一次PHP脚本,把数据库里的交易记录打包成PDF,发到管理员邮箱。
性能与资源消耗要注意
生成PDF会占用内存,尤其是大文件或多图片内容。建议避免一次性导出上千条数据。可以分批处理,或者压缩图片后再嵌入。另外,生产环境记得关闭错误提示,防止敏感路径泄露。