TP5 + PHPWord导出word文档中文出现乱码的问题

2023-05-16

场景:项目需要将html页面转word文档

1.下载安装phpword插件composer require phpoffice/phpword

2.安装成功在tp目录下的vendor会出现phpoffice文件夹,说明下载成功

3.新建一个控制器Patrolreport(任意取名)并引入 对应的类,我在该控制器中创建了两个个方法index(模本替换),test(代码直接生成word)

<?php
/**
 *
 * 巡检报告生成
 * Created by IntelliJ IDEA.
 * User: Administrator
 * Date: 2020/4/29
 * Time: 10:18
 */

namespace app\api\controller;

use think\Controller;
use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\TemplateProcessor;  // 模板替换只需要引入这个类
class Patrolreport extends Controller
{
    // 报告生成入口
    public function index(){
        $templateProcessor = new TemplateProcessor('./report/112.docx');
        $templateProcessor -> setValue('enterprise',' xxxxx ');
        $templateProcessor -> setValue('time',date("Y-m-d",time()));
        $templateProcessor -> setValue('name','李xx科');
        $templateProcessor -> setValue('cell','135xxxx884');
        $templateProcessor -> setValue('adminname','xx明');
        $dir = iconv("UTF-8", "GBK", "./report/".date('Y-m-d',time()).'/');//保存路径
        if (!file_exists($dir)){
            mkdir ($dir,0777,true);  // 如果保存目录不存在就创建新目录
        }
        $filename = $dir.date('YmdHis',time()).'.docx';
        $templateProcessor->saveAs($filename); //另存为新word文档,根据模板和变量生成了新的文档
        // 下载文档
        $file_dir = $filename; //下载文件存放目录
        //检查文件是否存在
        if (! file_exists ( $file_dir )) {
            header('HTTP/1.1 404 NOT FOUND');
        } else {
            $file = fopen ( $file_dir, "rb" );//以只读和二进制模式打开文件
            Header ( "Content-type: application/octet-stream" ); //告诉浏览器这是一个文件流格式的文件
            Header ( "Accept-Ranges: bytes" );  //请求范围的度量单位
            Header ( "Accept-Length: " . filesize ( $file_dir ) ); //Content-Length是指定包含于请求或响应中数据的字节长度
            //用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
            Header ( "Content-Disposition: attachment; filename=下载名称.docx" );
            echo fread ( $file, filesize ( $file_dir ) );   //读取文件内容并直接输出到浏览器
            fclose ( $file );
            exit ();
        }
    }
    // test
    public function test(){
        $PHPWord = new PhpWord();
        // New portrait section
        $section = $PHPWord->createSection();
        $arr['project_name'] = '云桥';
        $arr['buy_start_time'] = '20180515';
        $arr['buy_end_time'] = '20190825';
        $arr['start_s'] = '20190825';
        $arr['end_s'] = '20190825';
        $arr['total'] = 25;
        $arr['tfee'] = 2500;
        // Add text elements
        $str = "        ".$arr['project_name']."项目,与腾讯房产于".$arr['buy_start_time']."至".$arr['buy_end_time']."开展腾讯电商团购合作,".$arr['start_s']."至".$arr['end_s']."内,共计售出房屋". $arr['total']."套,成交明细见附件,收取服务费合计".$arr['tfee']."元,特此证明。";
        $str5 = "        本确认函中的房源均已通过网签为确认标准,经双方授权代表签字后生效作为收款确认依据。且一旦签字盖章,乙方将不再承担该房源后续的电商团购费的退款责任。";
        $str1 = "甲    方:                                                           乙    方:";
        $str2 = "授权代表签字:                                                 授权代表签字:";
        $str3 = "盖章:                                                                  盖章:";

        $str4 = "签约时间:20        年        月        日                                    签约时间:20         年        月        日";
        $title = '<h1>腾讯电商合作成交签约确认函</h1>';
        $section->addText($title,'rStyle','pStyle');
        $section->addTextBreak(2);
        $section->addText($str,'cOntent');
        $section->addTextBreak(2);
        $section->addText($str5,'cOntent');
        $section->addTextBreak(2);
        // $section->addText(iconv('utf-8','GB2312//IGNORE',$str1),'cOntent');
        // $section->addText(iconv('utf-8','GB2312//IGNORE',$str2),'cOntent');
        // $section->addText(iconv('utf-8','GB2312//IGNORE',$str3),'cOntent');
        // $section->addText(iconv('utf-8','GB2312//IGNORE',$str4),'cOntent');
        $section->addText($str1,'cOntent');
        $section->addText($str2,'cOntent');
        $section->addText($str3,'cOntent');
        $section->addText($str4,'cOntent');
        $section->addTextBreak(2);
//        $section->addText('I am inline styled.', array('name'=>'Verdana', 'color'=>'006699'));
        $section->addTextBreak(2);
        $PHPWord->addFontStyle('cOntent', array('bold'=>false, 'size'=>12));
        $PHPWord->addFontStyle('rStyle', array('bold'=>true, 'italic'=>false, 'size'=>16,'align'=>'center'));
        $PHPWord->addParagraphStyle('pStyle', array('align'=>'center', 'spaceAfter'=>100));
//        $section->addText('I am styled by two style definitions.', 'rStyle', 'pStyle');
//        $section->addText('I have only a paragraph style definition.', null, 'pStyle');
//         Save File
        $objWriter = IOFactory::createWriter($PHPWord, 'Word2007');
        /*header("Content-Type: application/doc");
        header("Content-Disposition: attachment; filename=".date("YmdHis").".doc");*/
        $path = './report/'.date("YmdHis").'.doc';
        $objWriter->save($path);
        $file1 = fopen($path, "r");
        // 输入文件标签
        Header("Content-type: application/octet-stream");
        Header("Accept-Ranges: bytes");
        Header("Accept-Length:".filesize($path));
        Header("Content-Disposition: attachment;filename=" . date("YmdHis").'.doc');
        ob_clean();     // 重点!!!
        flush();        // 重点!!!!可以清除文件中多余的路径名以及解决乱码的问题:
        //输出文件内容
        //读取文件内容并直接输出到浏览器
        echo fread($file1, filesize($path));
        fclose($file1);
        exit();
    }
}

4.index运行以后下载文件显示中文乱码

5.修改vendor->phpoffice->phpword->src->PhpWord->TemplateProcesssor.php,将

  $replace = static::ensureUtf8Encoded($replace);删除或者注释掉,新增

$replace =iconv('gbk', 'utf-8', $replace);如下图
 if (is_array($replace)) {
            foreach ($replace as &$item) {
                $item = static::ensureUtf8Encoded($item);
            }
            unset($item);
        } else {
//            $replace = static::ensureUtf8Encoded($replace);
            $replace =iconv('gbk', 'utf-8', $replace);
        }

6.运行结果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TP5 + PHPWord导出word文档中文出现乱码的问题 的相关文章

  • mac如何利用 applescript 批量将word转换成pdf

    没有更多的废话 直接上代码 代码的注释应该很清楚了 property word docs org openxmlformats wordprocessingml document com microsoft word doc propert
  • java 将pdf转word

    可以使用 Apache POI 库来实现将 PDF 转换为 Word 文档的功能 首先 需要将 Apache POI 库的依赖添加到项目中
  • 使用Microsoft Word2016无法正常对Latex文本转换的踩坑和解决方法

    相信很多人都遇到像我一样的问题 word2016中 有latex的按钮 按ALT 就可以开始写公式 复制粘贴latex公式之后 怎么就转换不了呢 就是如图这样的 左上角转换按钮为灰色 上网找呀找 找了很多资料 大多数都是介绍用法的 但是转换
  • C# VS2012操作word文档 (二).插入表格图片

    在上一篇文章 C VS2012创建word文档 一 中我们讲述了如何使用VS2012引用COM中Miscrosoft Word 14 0 Object Library实现创建文档 而这篇文章将讲述如何添加表格和图片 因为我在C 联系数据库做
  • Word中批量更新域的两个小方法

    一处域更新 如果只有一处需要更新 对着域右键选择 更新域 即可 多处域更新 很多需要更新的时候 可以如下操作 两种方法应该都可以 选择 打印预览 可以更新文档中的所有域 MOS认证的老师教的 CTRL A 全选 然后F9 更新 即可 自己觉
  • word:表格中的文字居中

    如 操作 如下图 选择布局 点击2就可以把表格居中了 居中结果
  • 常见文件预览实现

    一 word文档预览 1 使用文档预览服务预览 使用微软链接 https view officeapps live com op view aspx src 文档http地址 使用XDOC链接 http view xdocin com xd
  • POI 操作word

    关于POI 操作word的基础知识在这个博客 http elim iteye com blog 2049110 中有非常清晰的解释 在这里我就不多解释了 本文研究的内容就是 XWPFParagraph 代表一个段落 XWPFRun 代表具有
  • 关于TP5多语言BUG的解决办法(直接上代码)

    按照手册配置 默认语言没有反应 跳转页面之后 也没有检测当前的语言 很尴尬 最大的bug在这里 1 请用下面代码覆盖 thinkPhp library think Lang php 里面的detect 自动检测语言方法 自动侦测设置获取语言
  • 【精读系列】GloVe: Global Vectors for Word Representation

    本论文介绍了一种基于计数统计的词向量学习方法 GloVe 作者实验说明效果优于 Word2Vec 模型 阅读完成时间 20221109 一些预备知识或者是常用知识 GloVe 模型属于 count based method 所谓 count
  • word文件丢失怎么办?恢复Word文档的3个方案

    电脑里面有很多大大小小的文件数据 有时对我们可有可无 有时是很重要的 在清理电脑过程中 要是不小心误删了重要的文件 word文件丢失如何恢复 只需要下面的3个方案 就可以轻松找回Word文档 方案一 回收站恢复Word文档 要说电脑最容易误
  • Endnote 与word关联

    适用于endnotex7 endnotex8 endnotex9和office2019 office2021 第一步 打开Word 选择 选项 单击转到下一页 第二步 选择 加载项 COM加载项 转到 进入下一页 第三步 添加 可用加载项
  • 如何在word文档中添加两个目录

    由于需要在一个word文档中添加两个目录 第一个目录表示文章前半部分的内容 第二个目录表示后半部分的内容 对于word不太熟悉的我经过一番折腾之后终于搞定了 在此记录一下 原理 将word文本划分成两个域 而每个域里的标题可以看做是不同的书
  • 解决word中公式与右编号上下不居中的问题

    1 如图所示 选中右编号敲击公式后 公式与右编号上下不居中 2 在开始 样式 中找到如下图所示的样式 右击 修改 3 进入段落 修改如下图示 然后点击确定 在应用修改后的样式 就好了
  • word页码如何设置为章节加页码,例如第一章第一页1-1、第二章第一页2-1

    由于用到word页码分章节 页码的形式 从网上查了一下 质量真的很差 没有一篇文章讲清楚的 有的所答非所问 一怒之下 利用几个小时的时间解决问题并写下这篇文章 以供大家学习参考 1 word插入页码 选择包含章节号 1 1 双击页脚 点击插
  • PHPWord 转 PDF 无法加载库

    我一整天都在努力让它发挥作用 现在我可以将文档另存为 docx 文件 但我希望能够将文档另存为 PDF 我已尝试使用 DOMPDF 和 TCPDF 但我不断收到错误 无法加载 PDF 库 我确认路径是正确的 我错过了什么吗 感谢您的帮助 r
  • 【已解决】为什么Word文档里有部分内容无法编辑?

    小伙伴们是否遇到过这样的情况 打开Word文档进行编辑 发现部分内容可正常编辑 另外一部分内容却无法编辑 这是怎么回事 又要如何解决呢 出现以上情况 一般是Word文档被设置了 限制保护 使其部分内容被锁定 无法进行修改编辑 我们可以在文档
  • 通过Java编程提取Word文档的文本

    提取Word文档中的文本是一种常见的操作 便于单独获取Word文档中的内容以进行进一步的处理 分析等操作 我们可以直接复制并粘贴保存到指定文件中 但这一方法一般适用于文本内容较少时 除了费时费力地手动保存以外 我们也可以通过代码来一次性批量
  • PHPWord addTOC 不显示页码

    我在用着https github com PHPOffice PHPWord https github com PHPOffice PHPWord生成word文档 函数 addTOC 生成带有标题的页面索引 但由于某种原因 页码不显示 ad
  • 在 phpoffice/phpword 上添加图表

    我知道如何在 PHPExcel 上添加图表 但我还需要在 docx 文件上插入图表 是否可以使用 phpoffice phpword 操作图表 如果不可能 您知道适合这项工作的好库吗 实际上不可能在 PHPWord 文档中添加图表 但该功能

随机推荐

  • libuv笔记 (一)Threads

    Threads 线程在现代程序开发中会很常见 xff0c 当然Libuv也不能缺席这一块 xff0c 记得你在使用过程中要非常认真的处理 各种原始的同步问题 线程会在内部使用 xff0c 用来在执行系统调用时伪造异步的假象 libuv通过线
  • SLAM: SLAM基本流程—VSLAM扫盲之旅

    在很多机器人的论文和书籍里面 xff0c 劈头第一页即是 xff0c 经典的SLAM视觉框架是过去十几年前已经成熟的研究结果 xff0c 这个框架和算法本身已经没有太多理论可以操作的空间 封杀了很多人的SLAM科研之路 xff0c 把SLA
  • 三维重建:SLAM的尺度和方法论问题

    百度百科的定义 此文引用了其他博客的一些图像 xff0c 如有侵权 xff0c 邮件联系删除 作为算法的SLAM xff0c 被称为同步相机位姿确定和地图构建 作为一个工程的SLAM xff0c 有众多的算法 在计算机视觉中 三维重建是指根
  • 相机标定:PNP基于单应面解决多点透视问题

    利用二维视野内的图像 xff0c 求出三维图像在场景中的位姿 xff0c 这是一个三维透视投影的反向求解问题 常用方法是PNP方法 xff0c 需要已知三维点集的原始模型 本文做了大量修改 xff0c 如有不适 xff0c 请移步原文 xf
  • 三维重建7:Visual SLAM算法笔记

    VSLAM研究了几十年 xff0c 新的东西不是很多 xff0c 三维重建的VSLAM方法可以用一篇文章总结一下 此文是一个好的视觉SLAM综述 xff0c 对视觉SLAM总结比较全面 xff0c 是SLAM那本书的很好的补充 介绍了基于滤
  • 基于stm32c8t6的两轮平衡小车 第二篇——原理图及CubeMx配置

    目录 1 原理图 2 CubeMx配置 xff08 1 xff09 创建工程 xff08 2 xff09 配置时钟树 xff08 3 xff09 仿真模式选择 xff08 4 xff09 TIM2配置为PWM输出模式 xff08 5 xff
  • 解决Mac下安装Homebrew慢的问题

    一 方法一 国内安装Homebrew很慢 xff0c 可以使用下面的方法 xff1a span class token function curl span fsSL https gitee com xueweihan codes vfrg
  • 麻将和牌算法

    麻将牌有1 xff0d 9万 xff0c 1 xff0d 9条 xff0c 1 xff0d 9筒 xff0c 东南西北 xff0c 中发白各4张 xff0c 共34种136张牌 有些地方的麻将还有梅兰花竹 春夏秋冬各一张 一般将梅兰花竹 春
  • Springboot2中文件上传报java.io.FileNotFoundException: C:\Users\WIzarder\AppData\Local\Temp\tomcat.8080.589

    Springboot2文件上传中用MultipartFile接受文件 xff0c 上传报错java io FileNotFoundException C Users WIzarder AppData Local Temp tomcat 80
  • String为什么叫不可变字符序列,StringBuffer和StringBuild为什么是可变字符序列

    String为什么叫不可变字符序列 xff0c StringBuffer和StringBuild为什么是可变字符序列 xff1f 当我第一次学习JavaSE基础知识里 xff0c 学习String和StringBuffer和StringBu
  • Linux中xshell连接不上问题

    inux中Xshell连接失败 原因 xff1a 网络配置问题 xff0c 还有可能是防火墙问题 xff0c ssh未开启问题 xff0c 本人遇到的是网络配置问题 首先是配置Linux网络 cd etc sysconfig network
  • 项目迁移AndroidX

    什么是AndroidX 简单地说就是新的库可以在不同的Android版本上使用 比如之前我们如果使用support为27 1 1的相关依赖库时 可能需要所有相关的support 库都为27 1 1 如果其中有bug的话 xff0c 可能需要
  • Win11更新后电脑没有声音,声卡驱动失效,卸载重装依然无效

    win11更新后声卡驱动失效 xff0c 没有声音 原因 xff1a windows自动更新会更新你的声卡驱动 xff0c 声卡驱动冲突了 解决办法 xff1a 卸载重装声卡驱动依然无效走下面流程 右击电脑 gt 管理 gt 设备管理器 g
  • Docker Unbuntu容器里面运行apt-get update命令报错

    最近在尚硅谷学习docker命令 xff0c 学习到给ubuntu添加vim命令时候运行apt get update报错如下所示 搜索了半天发现很多人让配置dns啥的 xff0c 有一个博主推荐在运行容器的时候添加一个参数可以解决上述问题
  • 华为2288H服务器配置raid

    本次配置的服务器品牌型号为华为2288H 清除现有的raid重新设置就可以 xff0c 只有设备在uefi模式下才能看到配置raid xff0c 所以要先在bios下把传统模式改成uefi模式
  • MBR&/BOOT和GRUB三者关系总结

    做了一个大自然的搬运工 介绍的不错 备份下 MBR是硬盘上的一个扇区 包含三部分内容 xff08 引导程序 分区表及分隔标识 xff0c MBR总计512字节 xff1b 其中引导程序最多占446个字节 xff09 xff1b 为什么需要这
  • 寄存器映射与直接操作寄存器

    一 存储器映射 与重映射 存储器本身不具有地址信息 xff0c 它的地址是由芯片厂商或用户分配 xff0c 给 物理 存储器分配 逻辑 地址的过程就称为存储器映射 xff0c 通过这些逻辑地址就可以访问到相应的存储器的物理存储单元 如果给存
  • html+js翻页时钟

    html 43 js翻页时钟 index html lt doctype html gt lt html gt lt head gt lt meta charset 61 34 utf 8 34 gt lt title gt html5带翻
  • 云计算的主要部署模式

    云计算与大数据 云计算的最终目标是将计算 服务和应用作为一种公共设施提供给公众 xff0c 使人们能够像使用水 电 煤气和电话那样使用计算机资源 云计算技术都是基于3种特殊的云计算服务模式 xff0c 它们都具有流行 有效 灵活 用户友好等
  • TP5 + PHPWord导出word文档中文出现乱码的问题

    场景 xff1a 项目需要将html页面转word文档 1 下载安装phpword插件composer require phpoffice phpword 2 安装成功在tp目录下的vendor会出现phpoffice文件夹 xff0c 说