汇知百科
白蓝主题五 · 清爽阅读
首页  > 系统软件

用PHP脚本生成PDF:实用技巧与常见方案

在日常开发中,经常需要将网页内容、订单信息或报表数据导出为PDF格式。比如电商后台要生成发货单,学校系统要打印成绩单,这些场景下用PHP脚本生成PDF就成了一个刚需。

为什么选择PHP来生成PDF

PHP作为Web开发的老牌语言,生态成熟,配合HTML模板可以快速构建结构化的文档内容。虽然它本身不支持直接输出PDF,但借助第三方库,能轻松实现从字符串、数据库数据到完整排版PDF的转换。

常用的PDF生成库有哪些

目前最流行的两个库是TCPDF和DomPDF。前者纯PHP编写,无需依赖外部环境,适合基础需求;后者能解析CSS样式,更贴近现代前端习惯。

比如用DomPDF,安装只需要一条Composer命令:

composer require dompdf/dompdf

然后就可以在脚本里调用:

<?php
  require_once 'vendor/autoload.php';

  use Dompdf\Dompdf;

  $dompdf = new Dompdf();
  $html = '<h1>订单详情</h1><p>客户:张三</p><p>金额:¥299</p>';
  $dompdf->loadHtml($html);
  $dompdf->setPaper('A4', 'portrait');
  $dompdf->render();
  $dompdf->stream("order.pdf", ["Attachment" => true]);
?>

这段代码会把简单的HTML内容转成一张A4纸大小的PDF,并让浏览器自动下载。

处理中文乱码问题

很多人第一次跑的时候发现中文变成方块,这是因为默认字体不支持。解决方法是引入支持中文的字体,比如微软雅黑或思源黑体。可以在CSS里指定:

<style>
  body { font-family: SimSun, serif; }
</style>

同时确保服务器上有对应字体文件,或者使用DomPDF内置的字体子集功能打包进文档。

提升生成效率的小技巧

如果要批量生成发票,每次都重新渲染页面会很慢。可以先把HTML模板缓存起来,只替换动态数据部分。另外避免在PDF里加载远程图片,容易因网络延迟导致超时,最好先下载到本地再嵌入。

对于复杂布局,比如表格跨页断行错乱,建议用table标签而不是div+float,DomPDF对传统表格的支持更稳定。

有些项目要求更高的性能和控制力,会选择调用外部工具,比如wkhtmltopdf。它是基于WebKit的命令行工具,能把HTML精准转成PDF。PHP只需执行exec()触发即可:

exec('wkhtmltopdf http://localhost/report.html report.pdf');

这种方式速度快,样式还原度高,适合对排版要求严格的场景。

当然也要注意安全,不能让用户随意传入URL执行,否则会有命令注入风险。参数必须严格过滤。