composer 版本切换到1.* 。否则安装phpword后,访问项目会出现重复命名错误
安装慢,切换镜像,自行百度
composer require phpoffice/phpword
composer require tecnickcom/tcpdf
//在public目录下创建docx格式模板(注意模板保存格式,保存类型一定要word的docx格式,不要选择Strict Open XML文档的docx格式,否则获取不到文件内容)
$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';
//生成新的docx文件
$phpWord->saveAs($wordPath);
//设置tcpdf路径
\PhpOffice\PhpWord\Settings::setPdfRendererPath(ROOT_PATH. 'vendor/tecnickcom/tcpdf');
//设置转换pdf的类库名(DomPDF、MPDF、TCPDF)需要下载对应的类库
\PhpOffice\PhpWord\Settings::setPdfRendererName('TCPDF');
//读取生成的docx文件
$wordPdf = \PhpOffice\PhpWord\IOFactory::load(ROOT_PATH . 'public\test.docx');
//创建pdf
$pdfWriter = \PhpOffice\PhpWord\IOFactory::createWriter($wordPdf , 'PDF');
//解决table外的中文全是问号问题
$pdfWriter->SetFont('stsongstdlight','', 18, '', true); //设置字体
//生成pdf文件
$pdfWriter->save(ROOT_PATH . "public/test.pdf");
注: 模板保存格式,保存类型一定要word的docx格式,不要选择Strict Open XML文档的docx格式,否则获取不到文件内容。因为这个问题卡了1天!!!
大概率是字体问题,我遇到的问题是模板中有文字,有表格(需要注意的是tcpdf中字体有些需要下载)
//解决table外的中文全是问号问题(这里的字体是tcpdf的)
$pdfWriter->SetFont('stsongstdlight','', 18, '', true); // 繁中
但是table中还是问号,需要设置phpword\src\PhpWord\Writer\HTML\Part\Head.php中的writeStyles()
//在table中添加'font-family' => 'stsongstdlight',
'table' => array(
'border' => '1px solid black',
'border-spacing' => '0px',
'width ' => '100%',
'font-family' => 'STSong', //添加字体
)
在vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/MPDF.php,73行后面加上$pdf->autoScriptToLang = true;
$pdf->autoLangToFont = true;
就可以解决乱码问题
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);