PHPWord通过docx模板替换标签,最终生成pdf文件

PHPWord生成pdf文件

环境依赖

	composer 版本切换到1.* 。否则安装phpword后,访问项目会出现重复命名错误
安装慢,切换镜像,自行百度

安装

1、安装phpword
    composer require phpoffice/phpword
2、安装tcpdf
	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天!!!

中文乱码

1、TCPDF

大概率是字体问题,我遇到的问题是模板中有文字,有表格(需要注意的是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', //添加字体
            )
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);

你可能感兴趣的:(php,php)