资讯专栏INFORMATION COLUMN

node 使用第三方api 生成 word 文档之修改源码实现需求

luckyyulin / 511人阅读

摘要:使用了第三方实现生成文档,但是发现下划线无法满足需求。修改源码以便后人踩坑以下是我的一个,通过传参数设置下划线颜色以及高度。

使用了 officegen 第三方 api 实现生成word 文档,但是发现下划线无法满足需求。修改源码以便后人踩坑,以下是我的一个demo,通过传参数设置下划线颜色以及高度。本demo 通过json 配置方式,还有api 调用方式实现方式,详细可以参考git 的例子
GITHUB Api地址: https://github.com/Ziv-Barber/officegen

var officegen = require("officegen");
var fs = require("fs");
var path = require("path");
var docx = officegen("docx");

var header = docx.getHeader().createP({
    align: ("center")
});

console.log("路徑為" + __dirname);

var table = [
    [{
        val: "No.",
        opts: {
            cellColWidth: 4261,
            b: true,
            sz: "48",
            shd: {
                fill: "7F7F7F",
                themeFill: "text1",
                themeFillTint: "80"
            },
            fontFamily: "Avenir Book"
        }
    }, {
        val: "Title1",
        opts: {
            b: true,
            color: "A00000",
            align: "right",
            shd: {
                fill: "92CDDC",
                themeFill: "text1",
                themeFillTint: "80"
            }
        }
    }, {
        val: "Title2",
        opts: {
            align: "center",
            cellColWidth: 42,
            b: true,
            sz: "48",
            shd: {
                fill: "92CDDC",
                themeFill: "text1",
                themeFillTint: "80"
            }
        }
    }],
    [1, "All grown-ups were once children", ""],
    [2, "there is no harm in putting off a piece of work until another day.", ""],
    [3, "But when it is a matter of baobabs, that always means a catastrophe.", ""],
    [4, "watch out for the baobabs!", "END"]
]

var tableStyle = {
    tableColWidth: 4261,
    tableSize: 24,
    tableColor: "ada",
    tableAlign: "left",
    tableFontFamily: "Comic Sans MS"
}

var data = [
    [{
            align: "right"
        },
        {
            type: "text",
            val: "Simple"
        },
        {
            type: "text",
            val: " with color",
            opt: {
                color: "000088"
            }
        },
        {
            type: "text",
            val: "  and back color.",
            opt: {
                color: "00ffff",
                back: "000088"
            }
        },
        {
            type: "linebreak"
        },
        {
            type: "text",
            val: "Bold + underline",
            opt: {
                bold: true,
                underline: true
            }
        }
    ],
    {
        type: "horizontalline",
        opt: {
            height: "2",
            fillcolor: "FF0000"
        }
    },
    [
        {
            type: "text",
            val: "  backline text1.",
            opt: {
                bold: true
            }
        },
        {
            type: "text",
            val: "  backline text2.",
            opt: {
                color: "000088"
            }
        }
    ],
    {
        type: "text",
        val: "Left this text.",
        lopt: {
            align: "left"
        }
    },
    {
        type: "text",
        val: "Center this text.",
        lopt: {
            align: "center"
        }
    },
    {
        type: "text",
        val: "Right this text.",
        lopt: {
            align: "right"
        }
    },
    {
        type: "text",
        val: "Fonts face only.",
        opt: {
            font_face: "Arial"
        }
    },
    {
        type: "text",
        val: "Fonts face and size.",
        opt: {
            font_face: "Arial",
            font_size: 40
        }
    },
    {
        type: "table",
        val: table,
        opt: tableStyle
    },
    {
        type: "pagebreak"
    },
    [{},
        {
            type: "numlist"
        },
        {
            type: "text",
            val: "numList1."
        },
        {
            type: "numlist"
        },
        {
            type: "text",
            val: "numList2."
        }
    ],
    [{},
        {
            type: "dotlist"
        }, {
            type: "text",
            val: "dotlist1."
        }, {
            type: "dotlist"
        }, {
            type: "text",
            val: "dotlist2."
        }
    ],
    {
        type: "pagebreak"
    }
]

docx.createByJson(data)

//var pObj = docx.createTable(table, tableStyle);
var out = fs.createWriteStream("out.docx"); // 文件写入
out.on("error", function(err) {
    console.log(err);
});
var result = docx.generate(out);

找到源码修改

修改代码部分如下:gendocx.js 部分

 else if ( objs_list[i].data[j].horizontal_line ) {
                        console.log(objs_list[i].data[j]);
                        var height=typeof objs_list[i].data[j].options.height=="string"?objs_list[i].data[j].options.height:".75";
                        var fillcolor=typeof objs_list[i].data[j].options.fillcolor=="string"?objs_list[i].data[j].options.fillcolor:"e0e0e0";
                        //outString += ``;
                        outString += ``;
                    // Bookmark start support:
                    }

docx-p.js 部分

MakeDocxP.prototype.addHorizontalLine = function (opt) {
    var newP = this;
    newP.data[newP.data.length] = { "horizontal_line": true, options:opt||{} };
};

修改为传参数设置其下滑线颜色跟高度最后附上效果图:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/101062.html

相关文章

  • Node.js中通过单元测试为API自动生成文档

    摘要:我在单元测试中主要用的库有和,框架为。如果运行单元测试不想生成文档,直接用就可以了,相应的配置如下如果不想为某个生成文档,就不要调用的,直接按原生的写法就可以了。生成的文档内容形式如下原文地址通过单元测试为自动生成文档 在开发中,为项目生成文档是很常见的需求,很多第三方库(如jsdoc、swagger等)的做法是为需要生成文档的函数编写相应的符合规范的注释,然后运行相应的命令,生成一个...

    smallStone 评论0 收藏0
  • nodejs(officegen)+vue(axios)在客户端导出word文档

    摘要:方式请求的数据只能存放在内存空间,可以通过访问,但是无法保存到硬盘,因为不能直接和硬盘交互,否则将是一个安全问题。是第一个第三方的库,所以同理。这里是返回的对象这里表示类型创建下载的链接下载后文件名点击下载下载完成移除元素释放掉对象 前言 我的项目中有一个需求:点击按钮生成可编辑的word文档订单详情的信息我使用的前端框架是Vue.js、后台使用的是node.jsnode.js生成和导...

    Julylovin 评论0 收藏0
  • 24 个实例入门并掌握「Webpack4」(三)

    摘要:继个实例入门并掌握二后续配置配置配置使用加快打包速度多页面打包配置编写编写编写十七配置源码地址本节使用的代码为基础我们来模拟平时开发中,将打包完的代码防止到服务器上的操作,首先打包代码然后安装一个插件在中配置一个命令运 继 24 个实例入门并掌握「Webpack4」(二) 后续: PWA 配置 TypeScript 配置 Eslint 配置 使用 DLLPlugin 加快打包速度 多...

    mindwind 评论0 收藏0
  • GitHub 值得收藏的前端项目[每月更新...]

    摘要:也是一款优秀的响应式框架站点所使用的一套框架为微信服务量身设计的一套框架一组很小的,响应式的组件,你可以在网页的项目上到处使用一个可定制的文件,使浏览器呈现的所有元素,更一致和符合现代标准。 GitHub 值得收藏的前端项目 整理与收集的一些比较优秀github项目,方便自己阅读,顺便分享出来,大家一起学习,本篇文章会持续更新,版权归原作者所有。欢迎github star与fork 预...

    maxmin 评论0 收藏0

发表评论

0条评论

luckyyulin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<