格式能被word识别吗?如何创建doc文档?
2021-06-28
原理
一般导出doc文档有两种方式,一种是使用com作为php的扩展库安装在服务器上,然后创建一个com并调用其方法。安装好的服务器可以调用一个名为word的com。生成word文档,但是我不推荐这种方式,因为执行效率比较低(我测试过php导出word格式数据的实现代码,在word客户端执行代码的时候服务端会实际打开一个)。理想的com应该没有接口,在后台进行数据转换。这个效果会好一些,但是这些扩展一般是需要收费的。
第二种方法是使用PHP将我们的doc文档的内容直接写入一个后缀为doc的文件中。使用该方法不需要依赖第三方扩展,执行效率高。
word本身的功能还是很强大的,可以打开html格式的文件,并且可以保留格式,即使后缀是doc也能正常识别和打开。这为我们提供了便利。但有一个问题。 html格式文件中的图片只有一个地址,真实图片保存在别处。也就是说,如果将 HTML 格式写入 doc,则 doc 将不包含图片。那么我们如何创建一个包含图片的doc文档呢?我们可以使用非常接近html的mht格式。
mht 格式与 html 非常相似,只是在 mht 格式中,来自外部链接的文件,例如图片和 CSS 会被编码和存储。因此,单个 mht 文件可以保存一个网页中的所有资源。当然,相比html,它的尺寸会更大。
mht格式可以用word识别吗?我把一个网页保存为mht,然后修改后缀为doc,然后用word打开,OK,word也能识别mht文件,显示图片。
好的,既然doc可以识别mht,接下来就是考虑如何将图片放入mht。由于html代码中图片的地址写在img标签的src属性中,所以只要提取html代码中的src属性值,就可以得到图片地址。当然有可能你得到的是相对路径,没关系,加上URL前缀,改成绝对路径即可。有了图片地址,我们就可以通过函数获取图片文件的具体内容,然后调用函数将文件内容编码成代码,最后插入到mht文件的合适位置。
最后,我们有两种方式将文件发送到客户端。一种是先在服务器端生成一个doc文档,然后记录doc文档的地址,最后通过(":xx.doc");就可以让客户端下载这个doc了。另一种是直接发送html请求,修改html协议部分,将其-type设置为/doc,set-to,后跟文件名,发送html协议后,直接将文件内容发送到 ,你也可以让客户端下载这个doc文件。
实现
通过以上原理的介绍,相信大家应该对实现过程有了初步的了解。下面我将给出一个导出功能。该函数可以将 HTML 代码导出为带有 3 个参数的 mht 文档。 2 为可选参数
:要转换的HTML代码
:如果HTML代码中的图片地址都是相对路径,那么这个参数就是HTML代码中缺失的绝对路径。
:是否去除HTML代码中的超链接
返回值为mht的文件内容,可以保存为后缀为doc的文件
PHP网页导出Word文档的方法分离实现代码
这个函数的主要作用其实就是分析HTML代码中的所有图片地址,依次下载。获取到图片内容后,调用类将图片添加到mht文件中。具体的添加细节封装在类中。
/**
* 根据HTML代码获取word文档内容
* 创建一个本质上是mht的文档php导出word格式数据的实现代码,这个功能会分析文件的内容并远程下载页面中的图片资源
* 这个函数依赖于类
* 该函数会分析img标签,提取src的属性值。但是src的属性值必须用引号括起来,否则无法提取
*
*@$HTML 内容
* @ $ 网页的绝对路径。如果HTML内容中的图片路径是相对路径,则需要填写该参数,使函数自动填写绝对路径。此参数需要以/结尾
* @bool $ 是否去除 HTML 内容中的链接
*/
($, $ = “”, $ = true )
{
$mht = new();
如果 ($)
$ = ('/(\s*.*?\s*)/i', '$1', $); //删除链接
$ = ();
$ = ();
$ = ();
//这个算法要求src后面的属性值必须用引号括起来
如果 (('/
/i’,$ ,$) )
{
$ = $[1];
对于 ($i=0;$i{
$path = $[$i];
$=trim($path);
if ($ != “” )
{
$[] = $;
if( ($,0,7) == ‘’)
{
//绝对链接,无前缀
}
其他
{
$ = $.$;
}
$[] = $;
}
}
}
$mht->("tmp.html",$mht->("tmp.html"),$);
对于 ($i=0;$i{
$ = $[$i];
if (@($, ‘r’) )
{
$ = @( $ );
如果 ($)
$mht->($[$i],$mht->($),$);
}
其他
{
echo "file:".$." not !
";
}
}
$mht->();
}
使用方法:
$ = ($,”//etc/”);
$fp = ("test.doc", 'w');
($fp, $);
($fp);
其中$变量应该是HTML源代码,下面的链接应该是可以在HTML代码中填写图片相对路径的URL地址
注意在使用这个函数之前,需要先包含这个类,这个类可以帮助我们生成Mht文档。