npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

docxload

v1.0.6

Published

to generate .docx files on front-end by using tag template.

Downloads

14

Readme

docxload

NPM version

EN Doc

通过标签模板的配置来实现 .docx 文件的前端导出。

docxload 是基于 docx 包实现的 .docx 文件导出工具。docx 包拥有丰富的配置,能够实现绝大多数 docx 文档的样式需求。但其细致的配置也导致了配置代码相对复杂,当文档样式或内容过多时,其嵌套配置的方式会导致代码可读性降低,维护不方便。 docxload 简化了 docx 的配置,将一些基础配置封装,并以标签的形式暴露使用。docxload 通过标签的组合来完成配置,使配置工作更快,代码更易读;并且它支持 docx 的大多数配置,充分利用了 docx 的能力,详细配置请见下文。

安装

$npm install --save docxload

使用

import docxload from 'docxload'

// 标签属性值为 String 类型时,用双引号表示值
// 标签属性值为 js 表达式时,用大括号表示值
// 一个属性中,可以有多个子属性配置,形式为:"key1: value1; key2: value2;",如 underline 属性
let template = `
  <page>
    <p>
      <span 
        underline="type: single; color: #000;"
        color="#000"
      >Hello, </span>
      <span font-size={30}>docxload</span>
    </p>
  </page>
`

docxload(template).then(() => {
  console.log('done')
}).catch(err => {
  console.log('failed', err)
})

更多配置示例,见测试用例

API

function docxload(template: string, option?: object | string): Promise

方法参数:

docxload 方法支持两个参数: template:标签模板;option:配置选项,为可选参数;option 为 string 类型时,可配置导出文件的文件名;option 为 object 类型时,有以下配置选项: | 配置字段 | 描述 | 字段类型 | 默认值 | | - | - | :-: | - | | fileName | 导出文件的文件名,默认后缀名是 .docx | String | data.docx | | immediate | 是否立即导出文件; 若为 false, 程序将生成文档的二进制文件,但不导出 | Boolean | true |

返回值:

docxload 方法执行后将返回一个 Promise 对象,该 Promise 对象的 resolve 方法会传递一个数组 [blob, exportFile],用于扩展操作: | 数组成员 | 描述 | 值类型 | | - | - | - | | blob | 待导出文件的二进制对象 | Blob | | exportFile | 用于导出文件的方法 exportFile(blob, fileName)接收两个参数:blob为二进制对象,fileName为文件名 | Function |

使用示例:

let template = ...
function docxToPdf() { ... }

docxload(template, { immediate: false }).then(([blob, exportFile]) => {
  // 对 blob 对象进行处理,如转成 pdf 格式
  let pdfBlob = docxToPdf(blob)
  exportFile(pdfBlob, 'data.pdf')
}).catch(err => {
  console.log('failed', err)
})

标签类型

docxload 中的标签有两种类型: 一种是与 docx 包中的类相对应的标签,可支持对应类中的配置选项; 另一种是通过封装 docx 包中的一些配置而实现的标签。

| 标签 | 描述 | docx 中对应的类 | 是否可配置属性 | | :-: | - | :-: | :-: | | <page></page> | 文档中的一页 | - | √ | | <title></title> | 标题 | - | × | | <p></p> | 段落 | Paragraph | √ | | <span></span> | 文本 | TextRun | √ | | <img /> | 图片 | ImageRun | √ | | <table></table> | 表格 | - | √ | | <row></row> | 表格行 | - | √ | | <cell></cell> | 单元格 | - | √ | | <br /> | 换行 | - | × | | <template></template> | 占位标签,无实义 | - | × |

标签需按以下层级规则进行嵌套,同级标签不可嵌套:

page > title, p, table > span, img, br

table > row > cell

注意标签中的第二级必须是 title、p、table 之一

template 标签可嵌套在任意标签层级;在使用 jsx语法编写模板时,有些环境要求模板必须有根标签,此时<template>可作为根标签。

标签属性

以下属性简化了 docx 包的配置,其他属性配置见 docx 包中对应类的配置,部分属性配置与 docx 文档不一样时,以本文档为准。

page

| 属性名 | 描述 | 参数类型 | 可选值 | 默认值 | | - | - | - | - | - | | orientation | 页面方向 | String | vertical - 垂直方向 horizontal - 水平方向 | vertical | | header | 页眉,有多个子属性: alignment: 水平对齐;format: 字符串模板,该模板提供了模板变量,分别为:当前页码 $pageCurrent,总页数 $pageTotalarea: 规定允许显示表头的页面;支持 <span> 标签中的所有属性 | String | alignment:center, left, right, distribute, both, start, end;area:all - 所有页面,odd - 奇数页,even - 偶数页 | - | | footer | 页脚,配置规则与页眉相同 | String | - | - |

p

| 属性名 | 描述 | 参数类型 | 可选值 | 默认值 | | - | - | - | - | - | | alignment | 水平对齐 | String | center, left, right, distribute, both, start, end | left | | heading | 标题等级 | String | title, heading_1, heading_2, heading_3, heading_4, heading_5, heading_6 | - | | indent | 增加缩进,一个单位为一次Tab缩进 | Number | - | - | | spacing | 段落间距,有4个子属性:before: 段前间距,数值类型,单位:磅;after: 段后间距,数值类型,单位:磅;line-rule: 行距规则;line: 行距值,数值类型,单位由 line-rule 确定; | String | line-rule:multiple - 多倍行距,line 的单位为行atLeast - 最小行距,line 的单位为磅 | - |

span

| 属性名 | 描述 | 参数类型 | 可选值 | 默认值 | | - | - | - | - | - | | font-size | 文字大小 | Number | - | 20 | | bold | 文字加粗 | Boolean | - | false | | italics | 斜体文字 | Boolean | - | false | | color | 文字颜色,颜色名称 或者 16进制颜色 | String | - | - | | highlight | 高亮文字,颜色名称 | String | - | - | | all-caps | 全部大写字母 | Boolean | - | false | | small-caps | 小型大写字母 | Boolean | - | false | | strike | 删除线 | Boolean | - | false | | double-strike | 双删除线 | Boolean | - | false | | super-script | 上标 | Boolean | - | false | | sub-script | 下标 | Boolean | - | false | | underline | 下划线 当为Boolean类型,且值为true时,使用默认下划线样式;当为String类型时,有两个子属性:type: 下划线类型;color: 下划线颜色 | String, Boolean | 下划线类型 type:single, word, double, thick, dotted, dottedheav, dash, dashedheav, dashlong, dashlongheav, dotdash,dashdotheavy, dotdotdas, dashdotdotheavy, wave, wavyheavy, wavydouble; | false |

img

| 属性名 | 描述 | 参数类型 | 可选值 | 默认值 | | - | - | - | - | - | | width | 图片宽度 | Number | - | 100 | | height | 图片高度 | Number | - | 100 | | src | 图片资源,可以是网络地址,或是base64格式;当 src 值为网络地址时,docxload 将自动请求图片资源 | String | - | - |

table

| 属性名 | 描述 | 参数类型 | 可选值 | 默认值 | | - | - | - | - | - | | width | 表格总宽度,单位% | String | - | 100% |

row

| 属性名 | 描述 | 参数类型 | 可选值 | 默认值 | | - | - | - | - | - | | height | 行高,单位cm | String, Number | - | 1cm |

cell

| 属性名 | 描述 | 参数类型 | 可选值 | 默认值 | | - | - | - | - | - | | width | 单元格宽度,单位%,百分比相对于表格总宽度 | String | - | 默认平分单元格宽度 | | colspan | 合并列 | Number | - | - | | rowspan | 合并行 | Number | - | - | | align | 水平对齐 | String | center, left, right, distribute, both, start, end | center | | vertical-align | 垂直对齐 | String | center, bottom, top | center | | fontSize | 字体大小 | Number | - | 20 | | border | 单元格边框,有三个子属性配置: style: 边框类型 size: 边框宽度 数值 color: 边框颜色 16进制颜色 | String | style: single, dash_dot_stroked, dashed,dash_small_gap, dot_dash, dot_dot_dash, dotted, double, double_wave, inset, nil, none, outset, thick, thick_thin_large_gap, thick_thin_medium_gap, thick_thin_small_gap, thin_thick_large_gap, thin_thick_medium_gap, thin_thick_small_gap, thin_thick_thin_large_gap,thin_thick_thin_medium_gap, thin_thick_thin_small_gap, three_d_emboss, three_d_engrave, triple, wave | - | | border-top border-right border-bottom border-left | 单元格单边边框,参数与border属性相同 | String | - | - |