您的当前位置:首页>全部文章>文章详情

Thinkphp8通过PhpWord导出生成word文件,支持图片处理,富文本导出完整方案

发表于:2024-12-24 15:53:10浏览:144次TAG: #ThinkPHP #PHP #PhpWord #导出word #富文本导出

本文介绍如何使用Thinkphp8通过PhpWord从富文本编辑器中导出内容,并转换成Microsoft Word文档。通过解析富文本格式,转换为DOC或DOCX格式,实现编辑器中的文本、图片等元素在Word中完美呈现。
该方案实现富文本html内容转为word文档doc、docx格式不会乱码,如果富文本内容有图片的,图片地址需要添加域名才能导出。

use think\facade\Db;
use ZipArchive;
use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\Element\InlineImage;
use PhpOffice\PhpWord\SimpleType\Jc;
use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\Shared\Html;
class Export extends BaseController
{    
    public function index()
    {
        $param = get_params();
        $article = Db::name('Note')->where('id',2)->find();
        // 创建一个临时目录用于存储导出的Word文件
        $tmpPath = CMS_ROOT.'public/temp/';
        if (!is_dir($tmpPath)) {
            mkdir($tmpPath);
        }
        $phpWord = new PhpWord();
        $articleTitle = $article['title'];
        // 创建一个新的Word文档
        $sectionStyle = array('orientation' => null,
               'marginLeft' => 900,
               'marginRight' => 900,
               'marginTop' => 900,
               'marginBottom' => 900);
        $section = $phpWord->createSection($sectionStyle);
        //$section = $phpWord->addSection();
        //标题
        $section->addText($articleTitle, array('name' => '黑体', 'size' => 16), array('align'=>'center'));
        //正文处理
        $articleContent = $article['content'];
        //写入文档
        Html::addHtml($section, $articleContent);
        // 保存Word文档为文件
        $filename = $tmpPath . $articleTitle . '.docx';
        $phpWord->save($filename);
        // 创建一个临时压缩文件
        $zipPath = CMS_ROOT.'public/temp/export.zip';
        $zip = new ZipArchive();
        $zip->open($zipPath, ZipArchive::CREATE | ZipArchive::OVERWRITE);
        // 将所有导出的Word文件添加到压缩文件中
        $wordFiles = glob($tmpPath . '*.docx');
        foreach ($wordFiles as $wordFile) {
            $zip->addFile($wordFile, basename($wordFile));
        }
        // 关闭并保存压缩文件
        $zip->close();
        // 删除临时目录中的Word文件
        foreach ($wordFiles as $wordFile) {
            unlink($wordFile);
        }
        // 删除临时目录
        @rmdir($tmpPath);
        //返回数据
        /*
         * code 状态
         * msg 下载地址
         * name 下载后重命名
         * */
        return to_assign(['code'=>0,"msg"=>'http://www.gouguoa.com/temp/export.zip','name'=>time().'.zip']);
    }
}

另外,备注一下的phpword旧的中文文档地址:
https://phpword-zh.readthedocs.io/zh-cn/latest/intro.html