[phpword][laravel-admin]导入文档转html,并使用富文本编辑后导出

PHP   2024-05-31 14:10   292   0  

背景

提问 https://learnku.com/laravel/t/56162

环境

    laravel 8.0 
    laravel-admin 1.8 
    PHP 7.3 
    PHPword 0.18.1

安装就不赘述了

开发阶段

导入

  • 弹出表单使用

    • 【phpword】【laravel-admin】导入文档转html,并使用富文本编辑后导出
    • 【phpword】【laravel-admin】导入文档转html,并使用富文本编辑后导出
  • 文件上传转换

    • 这边测试了,doc文档确实不支持暂时只写了docx文件上传
      use Illuminate\Support\Facades\Storage; // laravel文件上传
      use App\Models; // 操作模型
      use PhpOffice\PhpWord\IOFactory; // PhpWord 初始化文件方法
      use PhpOffice\PhpWord; // PhpWord
  • 文件上传也不赘述了...

  • 替换zip服务

    PhpWord\Settings::setZipClass(PhpWord\Settings::PCLZIP);
  • 转HTML
    $wordfile = IOFactory::load($fileName); // 本地文件获取
    $xmlWriter = IOFactory::createWriter($wordfile, "HTML"); // 转换为html
    $html = $xmlWriter->getContent(); // html内容获取
    // 然后可以查入到数据库里了

导入结果测试

  • 【phpword】【laravel-admin】导入文档转html,并使用富文本编辑后导出
  • 【phpword】【laravel-admin】导入文档转html,并使用富文本编辑后导出

导出

  • 行操作 【phpword】【laravel-admin】导入文档转html,并使用富文本编辑后导出

  • 资源引入

    use PhpOffice\PhpWord\PhpWord;
    use PhpOffice\PhpWord\IOFactory;
    use PhpOffice\PhpWord\Shared\Html;
    use PhpOffice\PhpWord\Writer\Html as WriteHtml;
  • 导出下载

    $phpWord = new PhpWord();
    $section = $phpWord->addSection();
    $html = new Html();
    $doc = new \DOMDocument();
    $doc->loadHTML($model->content); // 内获取赋值
    $doc->saveXml(); // 格式设置 我这边试了只能保存xml格式,HTML会出格式问题
    $html::addHtml($section, $doc->saveXml(), true, false); // 转换
    $phpWord->save('word/'.$model->title.'.docx'); // 保存文件 注意权限问题
    $url = env('APP_URL').'/word/'.$model->title.'.docx'; // 保存链接
    return $this->response()->success('导出成功')->download($url); // 下载跳转

导出结果测试

  • 【phpword】【laravel-admin】导入文档转html,并使用富文本编辑后导出

关于编码问题更新

// 可以在```mb_convert_encoding()```第三个参数中设置编码:'UTF-8',''
$doc->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8'));
// 或者使用
$doc->loadHTML('<?xml encoding="utf-8" ?>'.$profile);

关于doc

// 可以使用```MsDoc```,尝试还有问题。待官方更新了...
IOFactory::load("word/word.doc","'MsDoc'"); //doc是MsDoc

end...