【.com原创稿件】在一些特殊场景下,用户需要展示的数据不是手动输入的纯文本或手动编辑的富文本内容,而是生成上传的Word文件生成需要在APP上显示的HTML内容,即将上传的Word文件转换成最晚显示的HTML文件。那么,面对这样的需求,我们应该怎么做呢?业务场景应朋友要求,本次需要完成的功能如上图所示。从上图中我们可以看出,首先从管理后台上传WORD文件,然后后台脚本将WORD文件转换成HTML文件,然后将这个html文件保存到某个目录下,手机APP就可以直接显示这个html文件。也就是说,就是将一个WORD文件转换成一个HTML文件,而这个HTML文件是兼容HTML5标准的,这样可以让APP尽可能友好的显示这个HTML文件。目前主要的解决方案是有很多第三方库或软件可以将WORD文件转换为HTML,但最常用的有两种:ApacheOpenOffice和LibreOffice。这两个解决方案最大的优势就是比较跨平台,也就是都提供了Windows、Linux、MacOS操作系统的版本,让我们可以放心使用,降低移植代码的成本越多越好。这里,我选择了LibreOffice的解决方案。环境介绍本次开发本地环境如下:OS:Windows10PHP:7.1以上MySQL:5.6以上WEBSERVER:Apache2.4PHPFramework:LV框架IDE:PhpStormserver环境介绍:OS:UbuntuPHP:***版本MySQL:***VersionWEBSERVER:Nginx安装LibreOffice环境由于本地环境是Windows环境,所以我只需要下载Windows版本的软件包进行安装,而这个版本的软件是exe文件,所以安装非常简单,只需要和安装一般软件一样,点击下一步即可完成整个安装。使用命令行转换实际上是将Word文件转换为HTML文件。主要使用的是LibreOffice安装目录下的soffice.exe文件。下图显示了我的本地文件路径。下面我会新建一个测试转换的目录,新建一个目录,转换文件和转换命令,转换结果等,参考下面的截图。开头只有一个20170818.docx文件,下面我们在这个目录下生成一个html文件。经过以上操作,我们可以看到生成了一个20170818.html的HTML文件,主要应用命令为:“soffice.exe--convert-tohtml--outdirHTML文件存放目录待转换的文件名”.用PHP代码转换上面我们已经用命令行验证了我们可以成功地将Word文件转换成HTML文件。由于我们的环境是PHP脚本,所以需要用PHP调用soffice.exe文件进行转换。那么在PHP中调用这些执行程序的函数有:shell_exec、exec、system、passthru等。下面是我用LV转成HTML的代码片段。还有一个问题需要解决。虽然我已经成功使用PHP将后台上传的Word文件转换成HTML文件并保存了,但是还是有一个致命的问题,就是转换后的HTML文件不能自适应,这就导致了当这个页面是在APP中打开,显示效果很差,甚至会出现水平滚动条,文字会显示在图片的右下角,所以为了解决这个问题,只好看了下内容生成的HTML文件。然后在里面添加各种HTML标签和CSS属性,参考下面的代码。同时,还有一点需要说明。对于Word文件中的图片,在转换为HTML文件时,是经过base64编码的。潜在的性能问题。Word转HTML文件时,脚本执行时间可能会很长,所以如果Word文件很多,或者很多用户同时在转换Word文件,此时不建议先上传再转换。而是通过单独的主机或单独的进程进行转换,后端上传成功后,只将转换任务添加到消息队列中。一些附加注意事项由于转换时间可能较长,上传的Word文件可能较大,我们需要设置一些PHP配置选项,如脚本***执行时间、文件***上传大小、POST***上传大小和更多。【原创稿件,合作网站转载请注明原作者和出处为.com】
