天问

go语言实现word转换为html,并实现docker部署

word转换为html,在诸如word在线预览需求的时候会用到,那么怎么实现呢?

wordtohtml

其实可以通过 libreoffice 来实现转换, libreoffice 是linux中最常用的office,并且提供命令行给用户调用。为此我们只需要在go语言调用 libreoffice 命令即可转化为html文件:

convert.go:

package main

import (
	"os/exec"
)

// exec command
func doCommand(cmd string) {
	_ = exec.Command("sh", "-c", cmd).Run()
	
}

func main() {
	// if diretory not exist, create it
	doCommand("mkdir -p output")
	doCommand("libreoffice --headless --convert-to \"html:XHTML Writer File:UTF8\" *.doc --outdir output")
	doCommand("libreoffice --headless --convert-to \"html:XHTML Writer File:UTF8\" *.docx --outdir output")
}

注意这里的参数:

\"html:XHTML Writer File:UTF8\" 表示转为为xhtml格式,文件编码为utf8,这个很重要!

打包docker镜像

由于 libreoffice 依赖不容易安装,为此这里打包为docker镜像,实现一键部署,一键转换 Dockerfile:

FROM kfwkfulq.mirror.aliyuncs.com/library/ubuntu:20.10 as dev
LABEL Name=wordtohtml Version=1.0.5
EXPOSE 5000

ENV LANG     C.UTF-8
# ENV LANGUAGE en_US.UTF-8
# ENV LC_ALL   en_US.UTF-8

# Install requirements
RUN apt update && \
    apt install -y libreoffice

# FROM jianboy/libreoffice:v1.0.5 as prod
WORKDIR /app
RUN mkdir -p /opt/wordtohtml
COPY convert /opt/wordtohtml/convert
RUN adduser -u 1000 --disabled-password --gecos "" lyq && chown -R lyq /app && chown -R lyq /opt/wordtohtml
USER lyq

VOLUME [ "/app" ]
CMD ["/opt/wordtohtml/convert"]

最后执行docker build 打包,我们便可以执行如下命令,一键word转换为html:

docker run -it --rm -v /data/wordtohtml:/app ccr.ccs.tencentyun.com/jianboy/wordtohtml:v1.0.5

博客地址:http://blog.yoqi.me/?p=17609
扫我捐助哦
喜欢 4

这篇文章还没有评论

发表评论