将word转换为html的方法研究
因为最近有需求,有可能通过word转html,所以初步调查后整理如下。
问题的描述
不把问题说清楚就谈解决方案是不明智的,所以先把问题说清楚:
目前网上有一套word文件,后台提供上传入口。上传后,您必须分析内容并支持在富文本编辑器中编辑。word文档中有一个空白处,可以在编辑器中填充生成新的数据。原始单词和新生成的单词最终将保持pdf格式。
我是这样分析的:
第一个方案
Word必须上传,并且可以在编辑器中编辑,所以word必须迁移到html。
最终的word必须生成为pdf,第一步生成的html必须生成为pdf,以保证格式。
第二个方案
因为我之前就知道那个word会生成pdf,所以我很自然的就想能不能不用html直接转换成pdf。这可以减少代码的复杂性和错误。本来机器切换次数越多,误差越大。
但是根据问题的描述,导入的单词其实就像一个模板。我们需要能够编辑它,但是这个方法可能无法调整内容,所以保留了这个方法。
word到html
所有方法仅描述具体实现,详情可在官网查询。
Unoconv工具依赖于LibreOffice或者OpenOffice,两者都是基于开源软件,通常是LibreOffice(可能是针对protocol,Debian等的分发视图。)
我的环境是Centos。解压缩后,使用以下命令安装下载的rpm软件包:
cd目录
美味安装。/*.每分钟转数
Rpm -ivh。/*.这里没有使用rpm,因为rpm命令不能解决依赖性问题。百胜会解决的。
Unoconv安装
下面有链接,直接下载解压。目录中有unoconv命令,请直接执行。
处理问题:
运行unoconv命令后:
/opt/libre office 6.2/program/python。平静的边缘:/lib64/libc.so.6:找不到版本“glibc _ 2.14”(必需)
看来LibreOffice要依赖更高版本的glibc了。注意:glibc是整个系统的基础,请不要轻易动。这里是带备份的docker环境,所以我简单地试了一下:
检查当前的glibc版本:
strings/lib 64/libc . so . 6 grep glibc _
请看yum源代码的版本:
rpm -qa grep glibc
没有GLIBC_2.14的版本。从此链接下载,下载并按照以下步骤安装。(没有备份。请小心。) :
cd目录
建设。/configure-prefix=/usr/local/glibc-2.14
生成-j4
sudo make安装
导出LD _ library _ path=/usr/local/glibc-2.14/lib 3360 $ LD _ library _ path
注意:由于此安装非常慢,这些步骤没有完全执行。
Glibc很难升级,只好降级LibreOffice。我的系统glibc最高版本是2.12,所以又下载了5.4.7。找不到官方说明。完全是感情用事。
安装完成后,启动office服务。没必要开始。基于c/s架构的性能更好。
cd目录。/soffice-no logo-headless-accept= socket,host=127.0.0.1,port=8100urpStarOffice。服务管理器
启动后,可能会出现以下问题。
/opt/libre office 5.4/program/Soffice。平静的边缘:error while加载共享库3360 libcairo.so.23360不能打开共享库
解决方案:
yum安装ibus
在这一点上,我的想法有点无知。看看yum源码里有没有这个软件(4.3.7版)安装。之后,只需卸载之前安装的版本。
之后,在启动命令中,遇到了一些问题,以及相应的解决方法:
问题
Java ldx:找不到ajavaruntimeenvironment!
警告:失败
从javaldx读取路径
解决方案:
Yum -y安装libreoffice-base问题
/usr/lib 64/libre office/program/soft fice。平静命运X11错误:无法打开显示
解决方案:
安装libreoffice-headless pdf乱码,然后想直接转换成pdf使用。这个时候,我已经很焦虑了。看看下面这个命令就知道了,哈哈。
yum -y安装libreoffice*
百胜集团安装中文-支持
到目前为止,所有可能的问题都已解决,或者说转换仍在进行:
cd目录。/unoconv - connection socket,host=127.0.0.1,port=8100urpStarOffice。组件上下文-f html-o a.html a . docx
生成html后,我迫不及待地想看看它是什么样子。样式基本都有,但是源文件太乱了。在富文本编辑器中显示它们是可以的,但是tcpdf生成的pdf基本上是不可读的。至于为什么用tcpdf生成pdf,首先,项目中目前使用的是tcpdf,切换是有一定成本的。其次,我们不能为了解决这个问题而容忍杂乱的html代码,从数据存储或者后期维护都做不到这一点。
如果自动生成的代码不行,会根据文本进行清理。但是,考虑到源word文档的多样性,可能会有各种小问题,所以这个方案也就不了了之了。
安装:
yum -y安装pandoc
执行命令转换:
pandoc ZZ . docx-o a.html
错误报告:
pandoc: zz.docx: hGetContents:无效参数(无效的UTF-8字节序列)
这个问题还没解决,可能是版本问题,我试着下载了最新版本。这里可以直接执行解压后的平静命运目录中的命令,结果正常。
在mac下,我也尝试了安装:
安装:
brew安装pandoc
brew安装pandoc-citeproc
执行上面同样的转换命令,结果是一致的。
您也可以执行此命令来添加自定义标题:
pandoc-s ZZ . docx-o a.html
发生了以下错误:
[警告]此文档格式需要非空的
元素。请在元数据中指定“标题”或“页面标题”,
例如通过使用元数据页面标题= . 在命令行上。
退回到“zz”
根据提示,你应该添加一个标题。使用以下命令解决它:
pandoc -s zz.docx -元数据标题:“标题”-a.html
成功了,我等不及了。与unoconv相比,输出结果代码要少得多,代价是损失了一些样式,比如字体大小。左右页都没了,一般还是用不了。
3.phpword
尝试了上面两种命令式的方法,都解决不了问题,所以尝试用php扩展直接处理。
PHP默认安装了composer,但是我们的项目不使用composer环境。你可以通过这个链接下载完整的require文件包,并直接在项目中引用它。
下面的php代码:
需要一次应用程序路径。/classes/PHP word/vendor/autoload . PHP ;
$ PHP word= PHP office PHP word io factory:load( a . docx );
$ XML writer= PHP office PHP word io factory:create writer($ PHP word, HTML );
$ xmlWriter-save( a . html );
执行完上面的代码,就可以生成html了。我还是等不及了。生成的html类似于unoconv,代码很多,转换成pdf格式也不完善,所以lmdjzg并不是一个好的解决方案。
摘要
所以我们在尝试了unoconv,pandoc,phpword之后,还是得不到相对简洁的tcpdf友好的html。目前还没有尝试付费方案。如果有必要,可以考虑再研究一下。
其他想法
我也想到了直接从word转换成pdf。首先,对于word模板文档,我们可以用phpword读出空白处(空白处有专门的logo),配置一个表单单独填写空白处。用户添加后,由phpword写入,最后由unoconv生成pdf。
这样,可以删除富文本编辑器。当填写的内容被删除后,直接更改表单内容即可。
这似乎是一个解决办法。
人是活着的,人的需求是可以沟通的。在投入与产出成正比的条件下,各种方案都值得交流和尝试。
(完)
发表回复