如何将HTML和CSS添加到PDF中
技术背景
在开发过程中,有时需要将HTML和CSS内容转换为PDF文件。例如,生成报表、导出页面内容等。这就需要借助一些工具和库来实现HTML和CSS到PDF的转换。
实现步骤
工具和库选择
- wkhtmltopdf:开源、基于WebKit的免费工具。可通过命令行将HTML页面转换为PDF。
- PDFKit:适用于构建PDF的工具,可考虑剥离其Node.js依赖以在浏览器中运行。
- PrinceXML:强大的HTML/CSS转PDF转换器,但非免费。
- HTML2PDF:有一定的转换能力,但可能存在资源消耗大等问题。
- mPDF:易于使用,能处理动态、用户生成的数据,可生成PDF。
- DOMPDF:需要对HTML+CSS代码进行修改以适配其工作方式。
- TCPDF:免费且具有一定的HTML转PDF功能。
- Snappy:基于wkhtmltopdf的PHP5开源库,可用于生成PDF。
- DocRaptor:使用PrinceXML作为“引擎”。
部分工具的使用示例
mPDF
- 下载并解压mPDF到指定文件夹
yourfolder
。 - 在
yourfolder
中创建file.php
,并插入以下代码:
1 2 3 4 5 6 7
| <?php include('../mpdf.php'); $mpdf = new mPDF(); $mpdf->WriteHTML('<p style="color:red;">Hallo World<br/>Fisrt sentencee</p>'); $mpdf->Output(); exit; ?>
|
- 在浏览器中打开
file.php
。
pdfToHtml
- 将
pdftohtml.exe
提取到根文件夹。 - 在根文件夹的
anyfile.php
中添加以下代码(假设存在example.pdf
文件):
1 2 3 4 5 6 7 8 9 10
| <?php $source = "example.pdf"; $output_fold = "FinalFolder";
if (!file_exists($output_fold)) { mkdir($output_fold, 0777, true); } $result = passthru("pdftohtml $source $output_fold/new_filename", $log);
?>
|
- 进入
FinalFolder
,可找到转换后的文件。
核心代码
使用mPDF生成PDF
1 2 3 4 5 6 7
| <?php include('../mpdf.php'); $mpdf = new mPDF(); $html = '<html><body><h1>Hello, World!</h1></body></html>'; $mpdf->WriteHTML($html); $mpdf->Output('output.pdf', 'D'); ?>
|
使用wkhtmltopdf命令行转换
1
| wkhtmltopdf input.html output.pdf
|
最佳实践
- 选择合适的工具:根据项目需求、预算和性能要求选择合适的HTML转PDF工具。
- 优化HTML和CSS:确保HTML和CSS代码规范、简洁,避免复杂的布局和样式。
- 资源管理:对于资源消耗大的工具,合理设置PHP配置参数,如
pcre.backtrack_limit
、memory_limit
和max_execution_time
。 - 使用在线服务:如果对性能和兼容性有较高要求,可考虑使用在线服务,如PDFShift、Restpack等。
常见问题
- pcre.backtrack_limit问题:在使用HTML2PDF时,可能会遇到
pcre.backtrack_limit
限制,需要调整php.ini
中的pcre.backtrack_limit
值。 - 资源消耗大:部分工具如HTML2PDF资源消耗大,可考虑优化代码或选择其他工具。
- CSS支持问题:一些工具对CSS的支持不完全,需要对HTML+CSS代码进行修改以适配工具。
- 兼容性问题:不同工具对HTML和CSS的兼容性不同,可能需要进行测试和调整。