首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PHPWord导出提供损坏的Word文件

PHPWord导出提供损坏的Word文件
EN

Stack Overflow用户
提问于 2011-12-20 14:28:00
回答 7查看 21K关注 0票数 6

我使用了来自PHPWord网站的示例代码:http://phpword.codeplex.com/documentation,当我尝试用Word打开它时,我得到错误消息"The Office open XML file test.docx cannot be Open,因为内容有问题。“当我点击“详细信息”时,系统会简单地提示“该文件已损坏,无法打开”。它确实可以让我修复和打开它,但这对用户不是很友好……下面是我使用的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Create a new PHPWord Object
$PHPWord = new PHPWord();

// Every element you want to append to the word document is placed in a section. So you need a section:
$section = $PHPWord->createSection();

// After creating a section, you can append elements:
$section->addText('Hello world!');

// You can directly style your text by giving the addText function an array:
$section->addText('Hello world! I am formatted.', array('name'=>'Tahoma', 'size'=>16, 'bold'=>true));

// If you often need the same style again you can create a user defined style to the word document
// and give the addText function the name of the style>:
$PHPWord->addFontStyle('myOwnStyle', array('name'=>'Verdana', 'size'=>14, 'color'=>'1B2232'));
$section->addText('Hello world! I am formatted by a user defined style', 'myOwnStyle');

// You can also putthe appended element to local object an call functions like this:
$myTextElement = $section->addText('Hello World!');



header('Content-Type: application/vnd.ms-word');
header('Content-Disposition: attachment;filename="test.docx"');
header('Cache-Control: max-age=0');
// At least write the document to webspace:
$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007');
$objWriter->save('php://output');

如您所见,我确实使用了php://output作为保存。任何关于如何摆脱腐败的想法。我确实打开了压缩,并看到在document.xml的末尾似乎有一个空行。也许这是导致它的原因?

谢谢!

EN

回答 7

Stack Overflow用户

发布于 2014-03-26 09:22:44

在输出之前只需添加ob_clean();即可!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ob_clean();
$objWriter->save('php://output');

这将清理您的输出,现在您可以安全地生成docx文件:)

票数 15
EN

Stack Overflow用户

发布于 2011-12-29 12:23:36

您添加的任何文本都不应包含HTML字符。将所有适用的字符转换为HTML实体例如,如果您必须先添加以下"Me & my Code“,请执行此操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$Text_to_Add = htmlentities("Me & my Code");
$section->addText($Text_to_Add);

使用Builtin函数保存文件。docx文件是zip文件(您可以在winrar或winzip中打开它们),因此不应使用php://output

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$objWriter->save('helloWorld.docx');    
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=helloWorld.docx");
header("Content-Type: application/docx");
header("Content-Transfer-Encoding: binary");

这样,文件将被创建,然后由用户下载。

附注: docx文件实际上是XML文件。因此,任何xml保留字符都会损坏文件。一种解决方法是按如下方式转换文本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function xmlEntities($str)
{
    $xml = array('"','&','&','<','>',' ','¡','¢','£','¤','¥','¦','§','¨','©','ª','«','¬','­','®','¯','°','±','²','³','´','µ','¶','·','¸','¹','º','»','¼','½','¾','¿','À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','×','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','÷','ø','ù','ú','û','ü','ý','þ','ÿ');
    $html = array('"','&','&','<','>',' ','¡','¢','£','¤','¥','¦','§','¨','©','ª','«','¬','­','®','¯','°','±','²','³','´','µ','¶','·','¸','¹','º','»','¼','½','¾','¿','À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','×','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','÷','ø','ù','ú','û','ü','ý','þ','ÿ');
    $str = str_replace($html,$xml,$str);
    $str = str_ireplace($html,$xml,$str);
    return $str;
}


$Text_to_Add = htmlentities("Me & my Code");
$Test_to_Add_XML_Cleaned = xmlEntities($Text_to_Add);
$section->addText($Test_to_Add_XML_Cleaned);
票数 13
EN

Stack Overflow用户

发布于 2016-10-28 08:11:52

我知道这是一个老生常谈的问题,但我也遇到了同样的问题,并且找到了最简单的解决方案。我遇到的问题是我使用Symfony,并且在生成文件时,我必须使用Notepad++编辑文件,以查看内容后面是否有错误消息,说明控制器需要一个Response()。

因此,我最终在->save()之后添加了exit;,它工作得很好。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8576964

复制
相关文章
package-lock.json和package.json
package-lock.json就是锁定安装时的包的版本号,以保证其他人在npm install时大家的依赖能保持一致。
用户3258338
2019/09/04
2K0
package.json
复杂的模块依赖关系需要被记录,确保模块的版本和当前保持一致,否则会导致当前项目运行报错
Qwe7
2022/04/21
7000
package.json
每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install 命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。
奋飛
2019/08/15
7630
package.json 详解[每日前端夜话0xEF]
Node 项目在项目根目录中名为 package.json 的文件中跟踪依赖关系和元数据。这是你项目的核心。它包含名称、描述和版本之类的信息,以及运行、开发以及有选择地将项目发布到 NPM 所需的信息。
疯狂的技术宅
2019/12/11
2.3K0
npm脚本和package.json
  在创建node.js项目如一个vue项目,或一个react项目时,项目都会生成一个描述文件package.json 。
tandaxia
2019/12/31
1.8K0
package.json文件
项目描述文件,记录了当前项目信息,例如项目名称、版本、作者、github地址、 当前项目依赖了哪些第三方模块等。 package.json文件在项目根目录下使用npm init -y命令生成。
星辰_大海
2022/05/10
7620
package.json文件
package.json 知多少?
在 Node.js 中,模块是一个库或框架,也是一个 Node.js 项目。Node.js 项目遵循模块化的架构,当我们创建了一个 Node.js 项目,意味着创建了一个模块,这个模块必须有一个描述文件,即 package.json。它是我们最常见的配置文件,但是它里面的配置你真的有详细了解过吗?配置一个合理的 package.json 文件直接决定着我们项目的质量,本章就带大家了解下 package.json 的各项详细配置。
ConardLi
2019/12/02
1.9K0
【基础】package.json文件详解
每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息。
青年码农
2020/12/17
1.1K0
package.json文件的作用
项目描述文件,记录了当前项目信息,例如项目名称、版本、作者、github地址、 当前项目依赖了哪些第三方模块等。 package.json文件在项目根目录下使用npm init -y命令生成。
清出于兰
2020/10/26
2.1K0
package.json文件的作用
package.json文件知多少?
Version: 当前项目的版本,需要满足以下约定 x.x.x - major.minor.patches
用户7365393
2021/09/26
5450
全方位解读 package.json
允许不修改[major, minor, patch]元组中最左边的非零元素的更改 。换句话说,这允许版本1.0.0及以上版本的补丁和次要更新,版本的补丁更新0.X >=0.1.0,以及版本的不更新0.0.X。
@超人
2021/09/17
1.5K0
全方位解读 package.json
package.json 配置完全解读
package.json 是前端每个项目都有的 json 文件,位于项目的根目录。许多脚手架在搭建项目时也会自动帮我们自动初始化好 package.json。
Leecason
2022/12/16
2.8K0
package.json 配置完全解读
package.json文件快速入门详解
相信入门nodejs或者npm的同学会对package.json这个文件有疑惑,对这个文件的作用不是很清晰,但搭建自己的博客每每用到node,npm这个文件又必不可少。
wblearn
2018/08/27
9890
package.json文件快速入门详解
npm脚本获取package.json配置
在执行npm脚本时,可以通过**npm_package_**前缀环境变量获取package.json里的字段 例如:
路过君
2022/04/13
1.3K0
升级package.json中的包
npm-check-updates upgrades your package.json dependencies to the latest versions, ignoring specified versions.
周星星9527
2021/09/30
1.6K0
升级package.json中的包
npm 与 package.json 快速入门
张拭心 shixinzhang
2018/01/05
2.1K0
npm 与 package.json 快速入门
nodejs的package.json依赖dependencies中 ^ 和 ~ 的区别
nodejs的package.json定义了一个模块,包括其依赖关系的一个简单的JSON文件,该文件可以包含多个不同的指令来告诉Node包管理器如何处理模块。 dependencies则表示此模块依赖的模块和版本,其中常常可以看到类似 ^1.2.0 或 ~1.2.0 这样的版本范围指示。 首先,一个完整的版本号组表示为: [主要版本号,次要版本号,补丁版本号] 1. 用 ~ 指示范围 版本号中如果指定了主要版本、次要版本,则只允许补丁版本升级; 如果只指定了主要版本,则允许次要版本、补丁版本升级。 ~1.2
蓓蕾心晴
2018/04/12
1.3K0
npm 与 package.json 快速入门教程
npm 是前端开发广泛使用的包管理工具,之前使用 Weex 时看了阮一峰前辈的文章了解了一些,这次结合官方文章总结一下,加深下理解吧!
张拭心 shixinzhang
2019/05/29
2.3K0
npm 与 package.json 快速入门教程
package.json中script的生命周期
package.json 文件是我们每个项目当中必须指定的,我们就以下面的 package.json 为例进行测试
小小杰啊
2022/12/21
8900
package.json中script的生命周期
[译] 如何更新 package.json 中的依赖项
原文:https://medium.com/better-programming/how-to-upgrade-dependencies-in-package-json-e5546804187f
江米小枣
2020/06/15
5.2K0

相似问题

package.json修改包-lock.json

11

查找漏洞源(在package.json中)(包-lock.json)

12

有没有办法从-lock.json包中提取package.json?

248

有没有工具来验证/检查package.json和包-lock.json是否一致?

169

npm要从包中创建一个package.json文件-lock.json文件?

10
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文