使用PhpOffice的PhpWord生成Word文件损坏,提示:很抱歉,无法开test.docx,因为内容有问题The file is corrupt and cannot be opened

2023-05-16

先说一下我的环境:
客户端:
操作系统:Windows 10 专业版20H2(64 位)内部版本:19042.870
浏览器:Microsoft Edge版本 89.0.774.75 (官方内部版本) (64 位)
服务器:
操作系统:CentOS 8.3.2011
Nginx版本:1.14.1
PHP版本:7.2.24
Yii2版本:2.0.14
phpoffice/phpword版本:0.18.1

今天,在Yii2下面用PhpWord生成了Word文件。
打开文件后提示:很抱歉,无法开test.docx,因为内容有问题。
点击详细信息后显示:The file is corrupt and cannot be opened
点击确定后显示:Word在"test.docx"中发现无法读取的内容。是否恢复此文档的内容?如果您信任此文档的来源,请点击"是"。
点击是以后显示:使用Microsoft Word无法打开此文件。是否搜索Office.com来查找可打开文件的转换器?
选择打开:即可正常打开文件。
本来这样也能正常使用,但是不解决这个问题,总感觉心里不舒服。
上次用phpexcel生成的excel文件能正常打开使用,看看那段代码咋弄的,直接拿过来试试。
这里直接给出答案:

ob_end_clean();
ob_start();
header('Content-Type : application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Disposition:attachment;filename="test.docx"');
$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($PHPWord, 'Word2007');
$xmlWriter->save("php://output");
//直接生成文件用这个
//$xmlWriter->save('test.docx');

完整的利用phpoffice/phpword生成word文档的代码示例(这是在生产环境下用的代码,确保可以正常使用,但是要注意phpword版本一定要一致):


        $PHPWord = new \PhpOffice\PhpWord\PhpWord();
        $PHPWord->setDefaultFontName('SimSun'); // 全局字体
        $PHPWord->setDefaultFontSize(11);     // 全局字号为:11pt

        // 设置文档的属性,这些在对文档右击属性可以看到,也可以省去这些步骤
        $properties = $PHPWord->getDocInfo();
        $properties->setCreator('张三');   // 创建者
        $properties->setCompany('公司'); // 公司
        $properties->setTitle('文档'); // 标题
        $properties->setDescription('描述'); // 描述
        $properties->setLastModifiedBy('张三'); // 最后修改
        $properties->setCreated( time() );      // 创建时间
        $properties->setModified( time() );     // 修改时间

        //添加字体样式字体留着下面使用
        $PHPWord->addFontStyle('titleStyle', ['size' => 16, 'bold' => true]);
        $PHPWord->addFontStyle('fStyle15', ['size' => 15]);
        $PHPWord->addFontStyle('fStyle14', ['size' => 14]);
        $PHPWord->addFontStyle('fStyle12', ['size' => 12]);
        $PHPWord->addFontStyle('fStyle11', ['size' => 11]);

        // 添加段落样式到以备下面使用
        // Normal会被默认调用
        $PHPWord->addParagraphStyle('Center', ['align' => 'center']);
        $PHPWord->addParagraphStyle(
            'Normal', [
                'align' => 'both',
                'spaceBefore' => 0,
                'spaceAfter' => 0,
                'spacing' => 56,
                'lineHeight' => 1.19,  // 行间距
                'indentation' => [ // 首行缩进
                    'firstLine' => 0
                ]
            ]
        );
        $PHPWord->addParagraphStyle(
            'firstLine', [
                'indentation' => [ // 首行缩进
                    'firstLine' => 500
                ]
            ]
        );
        // Section样式:
        $sectionStyle = [
            'orientation' => null,
            'marginLeft' => 1799,   //3.17cm  左边距
            'marginRight' => 1799,   //3.17cm 右边距
            'marginTop' => 1442,   //2.54cm   上边距
            'marginBottom' => 1442,   //2.54cm 下边距
            'pageNumberingStart' => 1, // 页码从1开始
            'headerHeight' => 851,   //1.5cm  页眉高度
            'footerHeight' => 993,   //1.75cm 页脚高度
       ];
        // 添加一页
        $section = $PHPWord->addSection($sectionStyle);

        // 下面这句是输入文档内容,注意这里用到了刚才我们添加的
        // 字体样式FangSong16pt和段落样式Normal
        $section->addText('服务合作协议', 'titleStyle', 'Center');
        $section->addTextBreak(1, 'fStyle15'); // 新起一个空白段落
        $section->addText('甲方:*****有限公司', 'fStyle15');
        $section->addText('乙方:张三', 'fStyle15');
        $section->addTextBreak(1);
        $section->addText('上述各方经平等自愿协商,签订本合同以共同遵守。');
        $section->addTextBreak(1);
        $section->addText('合作范围', 'fStyle14');
        $section->addText('甲方委托乙方进行****服务');
        $section->addText('合作期限', 'fStyle14');
        $section->addText('委托期2021年4月14日至2022年4月13日。本协议所拟合作期届为壹年,经双方协商同意,双方可续签协议。', 'fStyle11', 'firstLine');
        $section->addText('双方责任与权力', 'fStyle14');
        $section->addText('甲方应积极配合乙方,提供合法的、真实的、准确的、完整的资料,如因甲方提供的资料而引起的法律纠纷,由甲方负责。', 'fStyle11', 'firstLine');
        $section->addText('甲方应按照本协议的规定及时付款。', 'fStyle11', 'firstLine');
        $section->addText('乙方应积极配合甲方的工作,按时、保质、保量完成甲方委托的各项工作,并为甲方资料保密。', 'fStyle11', 'firstLine');

        $section->addText('收款条例', 'fStyle14');
        $section->addText('结算方式与时间:自双方合同结束之7日期内甲方将服务费用100.00元汇至乙方指定的账户。乙方收款后将开具普通发票给甲方,费用自付。', 'fStyle11', 'firstLine');
        $section->addText('如在协议执行过程中产生的争议,双方协商解决,若协商不成,任何一方可向签约地的法院提起申诉。', 'fStyle11', 'firstLine');
        $section->addText('本协议一式两份,甲、乙双方各一份,自签约日期起生效。', 'fStyle11', 'firstLine');
        $section->addTextBreak(5);

        $section->addText('甲方:********有限公司', 'fStyle12');
        $section->addText('乙方:', 'fStyle12');
        $section->addText('日期:2021年4月14日                     日期: 2021年4月14日', 'fStyle12');


        $filename = 'test.docx"';
        ob_end_clean();
        ob_start();
        header('Content-Type : application/vnd.openxmlformats-officedocument.wordprocessingml.document');
        header('Content-Disposition:attachment;filename=' . $filename);
        $xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($PHPWord, 'Word2007');
        $xmlWriter->save("php://output");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用PhpOffice的PhpWord生成Word文件损坏,提示:很抱歉,无法开test.docx,因为内容有问题The file is corrupt and cannot be opened 的相关文章

  • matlab---s函数讲解之二连杆动力学仿真

    matlab虽然后simulink xff0c 但是再复杂系统的仿真的时候简单的simulink中模块不能满足要求 xff0c 因此需要自己建立s函数 xff0c 作为仿真中的一个模块 在控制系统中分为控制器和被控对象 matlab s函数
  • 全球定位系统的组成

    一 空间部分 1 GPS卫星 Block xff08 试验卫星 xff09 Block xff08 以下均为工作卫星 xff09 14天导航电文 xff0c 实施SA和AS的能力 Block A 180天导航电文 xff0c 卫星互相通信能
  • 前端疑难杂症集锦

    一 webpack打包时Cannot resolve module 39 fs 39 在webpack config js中添加 node fs 34 empty 34 二 typescript找不到fs模块 code npm instal
  • 基于ROS的语音控制机器人(二):上位机的实现

    文章目录 目录 文章目录 前言 一 准备工作 1 python工作环境 2 ros环境 3 QT designer 二 界面程序设计 1 界面设计 2 ui文件转py文件 三 上位机程序编写 1 具体思路 2 具体实现 3 遇到的问题 1
  • "指定的文件格式无法识别或为不支持的二进制"

    次奥 xff0c 你没有正确设置启动项目 转载于 https www cnblogs com tupx p 3701598 html
  • Linux安装MySQL8.0.16

    1 下载安装包 https www mysql com 2 安装MySQL 将下载好的安装包上传到服务器 然后解压 tar xvf mysql 8 0 16 el7 x86 64 tar gz 然后将解压目录重命名为mysql 8 0 16
  • 硬件中断和软件中断的区别

    中断 中断指当出现需要时 xff0c CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程 即在程序运行过程中 xff0c 系统出现了一个必须由CPU立即处理的情况 xff0c 此时 xff0c CPU暂时中止程序的执行转而处理这
  • 嵌入式C语言自我修养笔记1-ARM体系结构与编译运行

    目录 ARM 体系结构ARM 体系结构ARM 汇编指令ARM 寻址方式ARM 伪指令C 与汇编混合编程 程序编译链接与安装运行预处理过程编译过程链接过程程序安装apt get链接静态库动态链接共享库插件工作原理Linux 内核模块运行机制L
  • Renode应用:在RISC-V核上运行FreeRTOS

    本篇记录通过Renode在RISC V核上运行FreeRTOS demo的情况 本来不准备写这一篇 xff0c 但是发现近期工作学习密度实在太大 xff0c 上周工作的中间结果这周竟然完全想不起来了 xff0c 不得不又花了一些时间从头摸索
  • VideoStream流媒体(VOD视频点播)系统平台

    软件介绍 xff1a VideoStream是集流媒体视频服务和流媒体应用管理为一体的综合流媒体服务系统 xff0c 本产品通过宽带IP网络为教育系统 各类运营商 政府企业等用户提供音视频服务的应用 系统特点 xff1a 1 采用WEB端口
  • c语言实现模拟FTP服务器项目

    下载源码后 xff0c 直接可以在ubuntu中编译运行 xff1a FTP服务器程序功能 xff1a 客户端 xff1a 1 输入命令 xff1a help 查看FTP服务器所支持的所有命令 2 输入名 xff1a ls 查看服务器上可以
  • 基于ArUco的视觉定位

    参考如下 博客 基于ArUco的视觉定位 1 3 https www freesion com article 4265319144 基于ArUco的视觉定位 4 https www pianshen com article 2491452
  • 伺服电机和步进电机的区别

    硬件型号 xff1a 三菱伺服电机HG KR43J 系统版本 xff1a 电机系统 1 控制的方式不同 步进电机 xff1a 通过控制脉冲的个数控制转动角度的 xff0c 一个脉冲对应一个步距角 伺服电机 xff1a 通过控制脉冲时间的长短
  • ubutnu更换国内源后,更新一直出现404,Not Found的问题

    1 问题 题主系统是ubuntu16 04 64位系统 尝试更换国内各种源 连ubuntu官方源都尝试了 sudo vim etc apt sources list修改为 deb https mirrors tuna tsinghua ed
  • Python+Flask实现股价查询系统。Python绘制股票k线走势

    文章目录 一 实现效果图二 实现思路1 获取数据 2 可视化数据三 源码获取 一 实现效果图 打开默认显示半年线 xff0c 可以通过可视化类型选择可视化k线图 高低点等 xff08 目前只完成了初版 xff0c 当查询的股票数据返回为空时
  • Failed to fetch http://mirrors.tuna.tsinghua.edu.cn/ubuntu/pool/main/g/gcc-5/g++-5_5.4.0-6ubuntu1~16

    今天在ubutun中在安装redis过程中 xff0c 安装gcc时遇到了Failed to fetch http mirrors tuna tsinghua edu cn ubuntu pool main g gcc 5 g 43 43
  • 切换日语输入法找不到MicrosoftIME键盘选项了

    去微软官方下载一个 Microsoft IME office 2010后 xff0c 安装解决 转载于 https www cnblogs com tupx p 3816026 html
  • msgid 属性

    Android源码中的String xml文件 xff0c msgid这个属性是干嘛的 xff1f 全局资源 xff0c 方便引用 比如在布局的text和activity中用到 转载于 https www cnblogs com Ph on
  • 2017年09月23日普级组 数列

    Description 小S今天给你出了一道找规律题 xff0c 题目如下 xff1a 有如下的数列1 xff0c 11 xff0c 21 xff0c 1211 xff0c 111221 xff0c 312211 xff0c 小S问你这个数
  • python 机器学习实战:信用卡欺诈异常值检测

    今晚又实战了一个小案例 xff0c 把它总结出来 xff1a 有些人利用信用卡进行诈骗等活动 xff0c 如何根据用户的行为 xff0c 来判断该用户的信用卡账单涉嫌欺诈呢 xff1f 数据集见及链接 xff1a 在这个数据集中 xff0c

随机推荐

  • Virtual Serial Port Driver 虚拟串口工具软件 使用介绍

    一般来说 xff0c 电脑的外部设备可以用过各种端口和电脑连接 常见的有USB xff0c VGA xff0c DVI等等 在工业领域或者是软件开发领域 xff0c 我们常常需要用简单低成本快捷的方式 xff0c 完成电脑和设备的连接 那么
  • Freertos 源码分析 队列queue

    队列queue xff08 零 xff09 队列的基础概念和形态 xff08 一 xff09 Freertos 队列 queue c FreeRTOS Kernel 10 4 6 include queue h Freertos队列模块包含
  • Freertos 任务TASK(一) 任务创建

    任务的创建 Freertos 的任务创建难点 1 xff09 堆栈生长的方向 2 xff09 64字节的对齐 3 xff09 任务堆栈初始化 Freertos 的任务使用任务控制块来进行管理 xff0c 是对任务的抽象 任务本身就是一段可执
  • Freertos Cortex-M3上下文切换

    上下文切换是操作系统实现虚拟化的核心功能 xff0c 操作系统对任务的管理通过上下文切换完成 Freertos 在STM32F103上的上下文切换是本文介绍的内容 STM32F103 采用 Cortex M3 内核 上下文切换的本质是对现场
  • STM32CubeMX配置freertos配置任务(一)

    使用STM32CubeMX 配置Freertos 生成一个任务点亮LED stm32cubemx STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具 xff0c 允许用户使用图形化向导生成C 初始化
  • STM32 精准采集ADC电压,误差分析

    ADC模块采集电压流程 数字世界和模拟世界的桥梁 xff0c 对于嵌入式软件而言 xff0c 大家止于采集功能的实现 本文目的在于深入理解ADC xff0c 积累技术做出更加稳定优秀的产品 STM32 大部分系列都是使用SAR 逐次逼近型电
  • STM32 编码器驱动/旋转编码器旋钮encoder

    本文已比较纯粹的方式介绍编码器和驱动的编写 编码器最少有两个输出信号 xff0c 一种典型的结构如上图所示 AB是编码器的输出引脚 当触点和黄色的金属片接触的时候信号发生跳变沿 xff0c 可以上上升沿也可以是下降沿 xff0c 具体根据A
  • UTC 转 LocalTime

    使用unsigned const char 纯碎是为了配合项目 xff0c 改成char 会比较通用些 BOOL CDllSuiteEngine Time StrToType unsigned const char lpszValue SY
  • CubeMX 图形配置工具 (UART) H743

    本文分两部分 1 图形操作步骤 2 自动生成代码结构分析 3 自动代码生成的坑 一 xff1a 使用CubeMX 配STM32H743 串口模块LPUSART 1 使能调试口 xff0c 以免使用SWD下载需要手动复位 2 配置 时钟树 x
  • LWIP (1.1) ETH Module以太网模块

    STM32 以太网 ETH模块说明 1 overview 2 ETH module in stm32h743 STM32H743 为例 开局一张图 ETHER 模块 红框所示 以STM32H743为例 32 BIt AHB为内部高速总线 D
  • UML(二)component 组件图

    组件图即是用来描述组件与组件之间关系的一种UML图 组件图在宏观层面上显示了构成系统某一个特定方面的实现结构 组件图适用于基于组件的开发模式 xff08 Component Based Development CBD xff09 xff0c
  • xilinx ZYNQ 7000 AXI GPIO

    0AXI GPIO 第一部分 PS 和 PL之间的通讯有一个接口称为AXI AXI总线具体的内容这边不去深究 xff0c 可以理解为一种特殊协议的通讯方式 AXI GPIO是什么意思 xff1f PL是FPGA它可以做成任何你想要的东西 x
  • xilinx ZYNQ 7000 XADC 片上模拟转数字模块

    上图所示 xff0c XADC 属于 PL部分的资源 XADC是一种硬逻辑实现 xff0c 位于PL功率域 PS xadc接口是PS的一部分 xff0c 可以被PS APU访问 xff0c 而不需要对PL进行编程 PL必须上电才能配置PS
  • XILINX FPGA OV5640 摄像头驱动(一)

    影像行业是一个值得深耕的方向 xff0c 废话不多说 先看输入和输出 输入是光照 xff0c 输出是光照的数字信号 image area xff1a 说的是感光矩阵 xff0c CMOS图像传感器的最核心部分 xff0c 接收光照产生电信号
  • Xilinx ZYNQ 7000 HDMI

    High Definition Multimedia Interface HDMI 参考xilinx application note XAPP460 HDMI来自High Definition Multimedia Interface 高
  • CAN协议与CANOpen协议

    这里详细介绍了CAN协议中数据通信帧每位的含义 xff0c 有图片 xff0c 值得一看 xff1a https www cnblogs com pejoicen p 3986587 html 这里介绍了CanOpen协议 xff0c ht
  • 标准的 C++ 由三个重要部分组成

    标准的 C 43 43 由三个重要部分组成 xff1a 核心语言 xff0c 提供了所有构件块 xff0c 包括变量 数据类型和常量 xff0c 等等 C 43 43 标准库 xff0c 提供了大量的函数 xff0c 用于操作文件 字符串等
  • 【转】每个程序员应该阅读的10本经典书籍

    如果你是一个程序员 xff0c 除了编码之外 xff0c 你还需要大量的阅读 今天我要为大家介绍几本值得一读的书 xff0c 包括 The Pragmatic Programmer xff0c The Mythical Man month
  • 解决Sqlite Developer过期的最简单办法(转自百度经验)

    第一种方法是 xff1a 打开注册表 开始 gt 运行 gt 输入regedit 依次打开目录 HKEY CURRENT USER SharpPlus SqliteDev 找到右侧的StartDate项 xff0c 删除 第二种方法更简单
  • 使用PhpOffice的PhpWord生成Word文件损坏,提示:很抱歉,无法开test.docx,因为内容有问题The file is corrupt and cannot be opened

    先说一下我的环境 xff1a 客户端 xff1a 操作系统 xff1a Windows 10 专业版20H2 64 位 内部版本 xff1a 19042 870 浏览器 xff1a Microsoft Edge版本 89 0 774 75