PHPWord生成pdf文件
环境依赖
composer 版本切换到1.* 。否则安装phpword后,访问项目会出现重复命名错误
安装慢,切换镜像,自行百度
安装
1、安装phpword
composer require phpoffice/phpword
2、安装tcpdf
composer require tecnickcom/tcpdf
代码
$phpWord=new \PhpOffice\PhpWord\TemplateProcessor(ROOT_PATH . 'public\template.docx');
$phpWord->setValue('name','李四');
$phpWord->setValue('phone','18888888888');
$phpWord->setValue('code','faerfawef23423');
$phpWord->setValue('addr','中国吉林省长春市');
$phpWord->setValue('boy','□');
$phpWord->setValue('girld','?', ENT_COMPAT, 'UTF-8');
$wordPath = ROOT_PATH . 'public\test.docx';
$phpWord->saveAs($wordPath);
\PhpOffice\PhpWord\Settings::setPdfRendererPath(ROOT_PATH. 'vendor/tecnickcom/tcpdf');
\PhpOffice\PhpWord\Settings::setPdfRendererName('TCPDF');
$wordPdf = \PhpOffice\PhpWord\IOFactory::load(ROOT_PATH . 'public\test.docx');
$pdfWriter = \PhpOffice\PhpWord\IOFactory::createWriter($wordPdf , 'PDF');
$pdfWriter->SetFont('stsongstdlight','', 18, '', true);
$pdfWriter->save(ROOT_PATH . "public/test.pdf");
注: 模板保存格式,保存类型一定要word的docx格式,不要选择Strict Open XML文档的docx格式,否则获取不到文件内容。因为这个问题卡了1天!!!
中文乱码
1、TCPDF
大概率是字体问题,我遇到的问题是模板中有文字,有表格(需要注意的是tcpdf中字体有些需要下载)
$pdfWriter->SetFont('stsongstdlight','', 18, '', true);
但是table中还是问号,需要设置phpword\src\PhpWord\Writer\HTML\Part\Head.php中的writeStyles()
'table' => array(
'border' => '1px solid black',
'border-spacing' => '0px',
'width ' => '100%',
'font-family' => 'STSong',
)
2、MPDF
在vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/MPDF.php,73行后面加上$pdf->autoScriptToLang = true; $pdf->autoLangToFont = true; 就可以解决乱码问题
PHP的PDF扩展库TCPDF将中文字体设置为内嵌字体的方法
1.下载要设置的字体,如名为simfang.ttf,放在./vendor/tecnickcom/tcpdf/tools目录中
2.在tools目录中按住shift,点击鼠标右键,点击“在此处打开命令行窗口”,执行语句
php ./tcpdf_addfont.php -b -t simfang -i simfang.ttf
便会在./vendor/tecnickcom/tcpdf/fonts/文件夹下面会生成simfang.ctg.z , simfang.php和simfang.z几个文件
3.在调用TCPDF的方法中设置仿宋字体
$pdf = new \Tcpdf(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// 设置字体
$pdf->SetFont('simfang', '', 14, '', false);
|