五分钟速成!用nodejs将doc文件转成html

五分钟速成!用nodejs将doc文件转成html,第1张

经常有一些将doc文件转换成HTML的需求,比如说明、协议之类的。虽然有 https://word2cleanhtml.com/ 这种神器,像下图这样可以直接将doc内容粘贴到剪贴板上,即可得到对应的html。但是,复制粘贴也是个体力活,如果一天突然要做10个这样的文档,可能真的要抓狂了。基于此目的,一起来做个脚本一键傻瓜式生成HTML吧。 首先,我们脚本的主角是 mammoth ,这个东西可以读取doc文档,并把内容给转换出来。 准备工作就是安装示例文档里的两个依赖 文档里给的转换html的示例是这样的。 可以试一试,会发现做出来的html效果会生成strong、p、tr、td这种标签,套上head、body、css之后页面就非常完整了,可是一些特殊的效果,比如说下划线u就没有。 怎么让他们出现呢?可以直接在文档里搜下划线的英文Underline,找到这条说明 原来在转换的过程中,下划线被忽略了,文档里也给了解决方法。可以显式地设置下划线转换成的标签去让下划线生效,像这样。 然后,我发现,生成的页面没有带class样式。其实在doc文档里面,有些行是居中效果的,如何做到居中效果在页面里也生效呢? 我们在template里写一个.center样式,然后options里试一试这个功能。 以下是完整的生成脚本。 这样一来,就算一天十个文档也是分分钟的事情了。

既然是返回的HTML,那么直接获取肯定是获取不到的,但是可以通过 加载顺序来解决这个问题。在返回的数据中加一个标识码,如果获取到这个标识码则代表已经正常返回 html , 这个时候再通过 获取dom 的方法去获取dom 就可以了。

var http = require("http")var path = require("path")var url = require("url")var fs = require("fs")var ejs = require("ejs")var server = http.createServer(function (req, res) {    if (req.url == "/favicon.ico") {        return

    }    var pathname = url.parse(req.url).pathname    var fileUrl = path.normalize("./public/" + pathname)    var extname = path.extname(pathname)

    fs.readFile(fileUrl, function (err, fileData) {

        getMime(extname, function (mime) {

            res.writeHead(200, { "context-type": mime })

            res.end(fileData)

        })

    })    if (pathname == "/") {        var _thisUrl = "./public"

        var fileArry = []//存储各个文件data的一些数据

        var a = {}        var data = {}//存储file(是否事文件,1是,0不是)fileName:文件(夹)名url:文件实际地址

        fs.readdir(_thisUrl, function (err, files) {            var length = files.length

            (function iterator(i) {                var show = 0                if (i >= files.length) {

                    data = { "fa": fileArry, "length": length }

                    fs.readFile("./views/index.ejs", function (err, fileData) {                        var template = fileData.toString()                        var html = ejs.render(template, data)                        console.log(html)

                        res.end(html)

                    })                    return

                }

                fs.stat(_thisUrl + "/" + files[i], function (err, stats) {                    if (stats.isDirectory()) {

                        a = { "file": 0, "fileName": files[i], "url": _thisUrl + "/" + files[i] }

                    }                    else {                        if (path.extname("/" + files[i]).toLocaleLowerCase() == ".jpg") {

                            show = 1

                        }

                        a = { "file": 1, "fileName": files[i], "url": _thisUrl + "/" + files[i], "show": show }

                    }

                    fileArry.push(a)                    //console.log(fileArry)

                    iterator(i + 1)

                })

            })(0)

        })

    }

})

server.listen(3000, "127.0.0.1")function getMime(extname, fn) {

    fs.readFile("./public/mime.json", function (err, data) {        var mimeList = JSON.parse(data)        var mime = mimeList[extname]

        fn(mime)

    })

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8370189.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存