IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHPWord通过docx模板替换标签,最终生成pdf文件 -> 正文阅读

[PHP知识库]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知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:07:16  更:2021-08-05 17:08:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 14:50:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码