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

背景

承接上次提问 问答:[不懂就问]phpword中 IOFactory::load($paths)初始化doc文件失败
也不知道各位需不需要,算小弟的记录吧

环境

    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… :blue_heart: :purple_heart: :heart: :green_heart: :sparkling_heart:

本作品采用《CC 协议》,转载必须注明作者和本文链接
it_cwc
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 26

你试试内容加个超链接试试,你会发现问题的

2年前 评论

那不知道是不是PHPword版本的问题了,我之前用的是0.17,内容加超链接会丢失内容

2年前 评论
it_cwc (楼主) 2年前

乱码了,TemplateProcessor 中也修改了不管用

2年前 评论
it_cwc (楼主) 2年前
MadeInChina (作者) 2年前
it_cwc (楼主) 2年前
MadeInChina (作者) 2年前

@MadeInChina 不保存文件

打印一下这三句
        $doc->loadHTML(iconv("utf-8","gbk",$template_list['template']));
        $doc->saveXml();
        $html::addHtml($section, $doc->saveXml(), true, false);

dd()

2年前 评论

哎,导出word图片和英文都没问题,中文全是乱码

2年前 评论
it_cwc (楼主) 2年前

html中的中文全都乱码了,其他不受影响,网上说的方法好像都没啥用 :sob:

1年前 评论
it_cwc (楼主) 1年前
it_cwc (楼主) 1年前
Yolver (作者) 1年前
it_cwc (楼主) 1年前
Yolver (作者) 1年前
it_cwc (楼主) 1年前
Yolver (作者) 1年前
Yolver (作者) 1年前
it_cwc (楼主) 1年前

word转html后缩进还有吗啊,还有页眉页脚,我这边段落缩进和页眉页脚都没法显示呀

1年前 评论

@aaccbb

html无法保存页眉页页脚,建议导出时候添加

$header->addPreserveText('页眉');
$footer->addPreserveText('页脚 - 页数 {PAGE} - {NUMPAGES}.');
1年前 评论
aaccbb 1年前
it_cwc (作者) (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!