php 如何将一个富文本字符串生成word文档?

问题描述

我现在有一个富文本字符串,
比如$str="<p><span style="color: rgb(255, 0, 0);"></span></p><hr/><p><span style="color: rgb(255, 0, 0);">qq<span style="color: rgb(0, 176, 240);">q啊啊啊啊啊百度网址</span></span></p><hr/><p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD....(很长的图片的base64的编码)><span style="color: rgb(255, 0, 0);"><span style="color: rgb(0, 176, 240);"></span></span><br/></p>";
中间我省去了大量的图片base64的编码。

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

我在网上搜到相关方法,比如这个:
先创建一类类:
class Exportword
{

function start()
{
    ob_start();
    echo '<html xmlns:o="urn:schemas-microsoft-com:office:office"
    xmlns:w="urn:schemas-microsoft-com:office:word"
    xmlns="http://www.w3.org/TR/REC-html40">';
}
function save($path)
{

    echo "</html>";
    $data = ob_get_contents();
    ob_end_clean();

    $this->wirtefile($path, $data);
}

function wirtefile($fn, $data)
{
    $fp = fopen($fn, "wb");
    fwrite($fp, $data);
    fclose($fp);
}

}
然后实现的代码如下:
$exportWord = new Exportword();
$exportWord->start();
$fileName = '我的学习笔记' . date('Y-m-d H:i:s') . '.docx';
$wordPath = $save_path . $fileName;
echo $str;
$exportWord->save($wordPath);
ob_flush();//每次执行前刷新缓存 
flush();

你期待的结果是什么?实际看到的错误信息又是什么?

这样执行之后,文件是生成了,但是有两个问题。
问题1.生成的文件图片没有能展示出来(未能正常显示),其他的富文本信息都能正常写到word文档里面。
问题2.生成的文件使用office打开,会有报错,无法打开,但是使用wps能够打开。为什么?

求大神能帮我解决上面两个问题,或者不使用我上面的方法,是否还有其他方法能够实现将富文本转成word,并使用office能正常打开,内容都能正常显示。

阅读 4.4k
1 个回答

建议你还是找个插件去搞吧。doc和docx格式都是以zip打包封装起来的,不信你用word新建个文件,再拖到随便个解压缩软件里,就能看到结构了。你用office打不开因为你生成的东西格式压根不合法,用wps能开是因为金山在兼容性这块做的很强,各种结构通吃,但是不代表你的文件就是OK的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题