background image

解析掌握 PHP 导出 Word 文档原理

  PHP 语言可以被我们用来实现很多功能。比如在网站建设中,我们经常会用到网页导出
数据的情况。今天就为大家介绍有关 PHP 导出 Word 文档的原理。

一般,有 2 种方法可以导出 doc 文档

一种是使用 com,并且作为 php 的一个扩展库安装到服务器上,然后创建一个 com,调用
它的方法。安装过 office 的服务器可以调用一个叫 word.application 的 com,可以生成 word
文档,不过这种方式我不推荐,因为执行效率比较低(我测试了一下,在执行代码的时候,
服务器会真的去打开一个 word 客户端)。理想的 com 应该是没有界面的,在后台进行数据
转换,这样效果会比较好,但是这些扩展一般需要收费。

另外一种方法,就是用 PHP 导出 Word 文档内容直接写入一个后缀为 doc 的文件中即可。
使用这种方法不需要依赖第三方扩展,而且执行效率较高。

word 本身的功能还是很强大的,它可以打开 html 格式的文件,并且能够保留格式,即使
后缀为 doc,它也能识别正常打开。这就为我们提供了方便。但是有一个问题,html 格式的
文件中的图片只有一个地址,真正的图片是保存在其他地方的,也就是说,如果将
HTML 格式写入 doc 中,那么 doc 中将不能包含图片。那我们如何创建包含图片的 doc 文
档呢?我们可以使用和 html 很接近的 mht 格式。

mht 格式和 html 很类似,只不过在 mht 格式中,外部链接进来的文件,比如图片 、
Javascript、CSS 会被 base64 进行编码存储。因此,单个 mht 文件就可以保存一个网页中的
所有资源,当然,相比 html,它的尺寸也会比较大。

mht 格式能被 word 识别吗?我将一个网页保存成 mht,然后修改后缀名为 doc,再用
word 打开,OK,word 也可以识别 mht 文件,并且可以显示图片。

好了,既然 doc 可以识别 mht,下面就是考虑如何将图片放入 mht 了。由于 html 代码中的
图片的地址都是写在 img 标签的 src 属性中,因此,只要提取 html 代码中的 src 属性值,
就可以获得图片地址。当然,有可能您获取到的是相对路径,没关系,加上 URL 的前缀,
改成绝对路径就可以了。有了图片地址,我们就可以通过 file_get_content 函数获取到图片
文件的具体内容,然后调用 base64_encode 函数将文件内容编码成 base64 编码,最后插入
到 mht 文件的合适位置即可。

最后,我们有两种 PHP 导出 Word 文档方法将文件发送给客户端,一种是先在服务器端
生 成 一 个 doc 文 档 , 然 后 将 这 个 doc 文 档 的 地 址 记 录 下 来 , 最 后 , 通 过
header("location:xx.doc");就可以让客户端下载这个 doc。还有一种是直接发送 html 请求,
修改 HTML 协议的 header 部分,将它的 content-type 设置为 application/doc,将 content-
disposition 设置为 attachment,后面跟上文件名,发送完 html 协议以后,直接将文件内容
发送给客户端,也可以让客户端下载到这个 doc 文档。