amis/docs/zh-CN/components/office-viewer.md
吴多益 3a7daf0f90
feat: office-viewer Word 文档渲染 (#6412) (#6415)
* init

* theme

* 基础文本渲染

* 基础文本样式

* 支持简单链接和图片

* 修复 jc 解析不正确问题

* 解析和渲染分离

* 初步支持列表渲染

* 完善样式表的实现

* 表格解析初步

* 避免解析顺序不一致

* 避免解析顺序不一致导致的问题

* 基于 DOMParser 来实现解析; 初步实现表格渲染

* 修复行高解析不正确问题

* 修复变量替换不正确问题

* 补充注释

* 用 fflate 替换 jszip, 支持同步使用

* 支持渲染 tab

* 支持表格条件渲染

* 优化表格样式适配

* 完善背景色支持

* 支持 ruby

* 支持简单 inserttext

* 修复表格合并不正确问题

* amis 渲染初步

* 整合 amis 初步

* 支持 input-file 上传预览

* styles: 优化button组件单icon情况的样式 (#6269)



* fix: Badge设置overflowCount不生效问题修复 (#6267)



* feat: InputGroup报错展示优化 (#5803)

* feat:增加DATETOWEEK表达式

* feat:增加DATETOWEEK表达式

* feat:增加WEEKDAY和WEEK表达式

* feat:增加WEEKDAY和WEEK表达式

* feat:增加WEEKDAY和WEEK表达式

* feat:增加WEEKDAY和WEEK表达式

* feat:增加WEEKDAY和WEEK表达式

* chore: 2.7.3版本改为2.8.0 (#6272)

* styles: 输入框附加组件样式 (#6271)



* styles: 优化checkbox组件选中态样式 (#6277)



* feat:增加判断日期范围的表达式BETWEENRANGE&&优化STARTOF和ENDOF

* docs:表达式文档 (#6282)

* fix: Nav样式问题、性能优化 (#6280)



* chore: 还原几个 antd 导航及表格的颜色 (#6276)

* chore: Action倒计时key添加id避免冲突 (#5943)

* fix: nav同层拖拽问题修复 (#6285)



* v2.8.0

* chore: 删除在 ts 编译后永远都不会成立的代码 (#6291)

* styles: 将组件透明背景颜色改为白色 (#6289)

* styles: 将组件透明背景颜色改为白色

* styles: 将组件透明背景颜色改为白色

---------



* fix: Select组件overlay属性在popOverContainer时宽度错误问题 (#6284)

* fix:Select组件overlay属性在popOverContainer时宽度错误问题

* 问题修改

* styles: 优化link组件svg图标样式 (#6292)



* chore: Tree 组件中使用 value 替换 key (#6194)

* fix: 单选选项值包含逗号时获取选项错误问题 (#6258)

* fix: 单选选项值包含逗号时获取选项错误问题

* 加个单测

* 单测问题

* 在WrapControl 中使渲染器默认 multiple 生效

* 修改

* fix: select 各种模式支持 checkAll (#5941)

* feat(页面交互行为跟踪): 新增pageLoaded事件 (#6299)

* fix: nav拖拽卡顿、更多操作打开定位等问题修复 (#6304)



* fix: toast组件css变量拼错 (#6302)



* fix: CRUD2 加载更多时接口page传参始终为1 (#6298)

* fix: 日期范围底部按钮居中 (#6301)

* 调整 saveAs  fileName 优先级

* feat: 移动端人员选择增加确定按钮

* Update UserSelect.tsx

* fix: 人员选择ts 类型错误

* fix: 城市选择组件移动端回显问题

* fix: 移动端级联选择器选中值bug修复

* Update Cascader.tsx

* fix: 城市选择香港、澳门不能选择市

* fix: 删除错误城市数据

* feat: 移动端人员选择支持字段配置

* feat: 人员选择组件支持字段配置

* Update UserSelect.tsx

* fix: 移动端人员选择静态展示头像url回显

* fix: 日期时间选择器底部按钮居中

---------



* fix: table2全选、嵌套展开等问题修复 (#6313)



* docs(API 适配器): 调整文档细节 (#6314)

* styles: 优化清除图标样式 (#6312)



* fix: 修复 Tree 在传入 pathSeparator 时,非根节点无法选中 (#6315)

* Update README.md

* fix: 解决因部分组件默认配置,导致编辑器配置面板宽度溢出问题 (#6328)



* chore: svg 瘦身 (#6320)

* chore: svg 瘦身

* chore: svg 瘦身

* chore: svg 瘦身

* feat: mapping 的 source 接口支持 select 选项类接口 (#6326)

* fix: 调整 spinner-overlay 和 dialog 的 z-index,使关闭按钮不会被 spinner 遮挡 (#6321)

* feat: 新增 number 组件用来展示数字 (#6330)

* feat: 新增 number 组件用来展示数字

* feat: 新增 number 组件用来展示数字

* chore: tableCell 内部属性换个名字,以免跟已有其他组件组合使用时冲突

* fix: 注销renderer问题 (#6327)



* feat: InputExcel支持placeholder (#6295)

* feat: button-group-select支持角标 (#6309)



* chore: 暴露 InputBoxWithSuggestion (#6337)

* fix: 注销renderer问题 (#6338)



* docs: 补充trackExpression用法示例 (#6286)

* fix: 解决monaco环境变量和monaco插件的冲突 (#6283)



* fix: Cards嵌套List组件时, props透传导致Schema不生效问题 (#6110)

* styles: 优化带单位的number组件样式 (#6054)

* styles: 优化待单位的number组件样式

* 更新快照

---------



* fix(Table): #2978 嵌套表格如何设置默认全部展开 (#6028)

* fix(Table): #2978 嵌套表格如何设置默认全部展开

* fix(Table): #2978 更改函数命名

* fix: now表达式作为form组件默认值时,增加特殊逻辑,处理数据更新 (#5783)

* fix: 解决公式编辑器 搜索变量失效bug (#6345)



* fix: nav角标、悬浮展开子菜单、更多操作不可点击等问题修复 (#6346)



* feat:config动作优化

* fix: 修复卡片的 checkOnItemClick 配置问题 (#6365)

* fix: 修复弹窗中 form 配置 closeDialogOnSubmit 无效的问题 (#6368)

* fix: Transfer tree mode 支持 onlyChildren;两个值为undefined的Option不相等 (#6342)

* fix:transfer tree 支持 onlyChildren;两个值为undefined的Option不相等

* 修改

* 修改

* feat:carousel支持卡片动画模式 (#6354)

* feat:carousel支持多图配置

* Update carousel.md

---------




* fix: inputTable 组件value依赖别的字段时,不同步数据域的问题 (#6360)

* fix: inputTable 组件value依赖别的字段时,不同步数据域的问题

* 修改

* 修改

* feat: 添加input-table子表单校验 (#6357)

* feat: 添加input-table子表单校验

* feat: 添加input-table snapshots更新

* feat: 添加input-table子表单校验

* feat: 添加input-table子表单校验

* feat: 添加input-table子表单校验

* feat: input-table snapshots更新

* feat: 添加input-table子表单校验

* feat: 添加input-table子表单校验

* feat: Steps source支持动态获取value status (#6370)

* fix: 修复 drawer reload 目标可能找不到的问题 (#6373)

* fix: 修复 crud 嵌套会触发多次快速保存接口问题 (#6374)

* fix: 修复 this.model.validated 可能读取不到的报错 (#6375)

* chore: alert 支持多个实例

* feat: Tag支持事件动作 (#6325)

* feat: reload 支持动态目标, 解决目标在循环中场景 (#6372)

* chore: Select组件checkAllBySearch默认为true (#6347)

* fix: Nav切换数据源实时更新、点击分组卡顿、横向模式排序等问题修复 (#6371)



* fix: table单元格支持自定义样式、crud支持本地数据快速过滤 (#6353)



* fix: 修改角标样式 (#6383)



* fix: 图标选择器,如果图标不属于saas项目中的,则默认显示schema配置的内容 (#6394)



* feat: icon支持自定义样式 (#6379)



* fix: 解决input-table某些场景下无法新增的bug (#6400)



* fix: 解决input-table某些场景下无法新增的bug (#6404)



* fix: input-table内columns为下拉框时,删掉下拉框的选中值,发现input-table的数据域更新错误 (#6402)

* fix: input-table内columns为下拉框时,删掉下拉框的选中值,发现input-table的数据域更新错误

* fix: input-table内columns为下拉框时,删掉下拉框的选中值,发现input-table的数据域更新错误

* 修复示例文档错误

* 修复用例报错

* 修复 fis 报错

---------

Co-authored-by: qkiroc <30946345+qkiroc@users.noreply.github.com>
Co-authored-by: qinhaoyan <30946345+qinhaoyan@users.noreply.github.com>
Co-authored-by: wanglinfang2014 <w.l.fang@foxmail.com>
Co-authored-by: wanglinfang <wanglinfang@baidu.com>
Co-authored-by: RUNZE LU <36724300+lurunze1226@users.noreply.github.com>
Co-authored-by: lvxiaojiao <lvxiaojiao@baidu.com>
Co-authored-by: hsm-lv <80095014+hsm-lv@users.noreply.github.com>
Co-authored-by: lurunze1226 <lurunze1226@foxmail.com>
Co-authored-by: liaoxuezhi <2betop.cn@gmail.com>
Co-authored-by: sansiro <sansiro@sansiro.me>
Co-authored-by: meerkat <kit_hack@outlook.com>
Co-authored-by: 刘丹 <365533093@qq.com>
Co-authored-by: backpast <agileago@gmail.com>
Co-authored-by: renjianhua <renjianhua@zuoshouyisheng.com>
Co-authored-by: ls <1769057083@qq.com>
Co-authored-by: zhangxulong <zhangxulong@baidu.com>
Co-authored-by: zhangzhulei <30931358+DynaZhang@users.noreply.github.com>
Co-authored-by: zhangzhulei <zhangzhulei@baidu.com>
Co-authored-by: gooolh <57032082+gooolh@users.noreply.github.com>
Co-authored-by: liujintao03 <liujintao03@baidu.com>
Co-authored-by: Dora <53067150+Dora-boots@users.noreply.github.com>
Co-authored-by: yanglu19 <yanglu19@baidu.com>
Co-authored-by: TommyShao <tomieric@gmail.com>
Co-authored-by: pianruijie <13522335863@163.com>
Co-authored-by: xiangwaner <1186355501@qq.com>
Co-authored-by: zhaowenli <zhaowenli@baidu.com>
Co-authored-by: zhou999 <zhousq809@163.com>
Co-authored-by: Allen <yupeng.fe@qq.com>
Co-authored-by: sarding <37691952+sarding@users.noreply.github.com>
Co-authored-by: sarding <hongfuquan@baidu.com>
2023-03-20 22:54:42 +08:00

6.0 KiB

title description type group menuName icon order
Office Viewer 0 ⚙ 组件 OfficeViewer 文档渲染 23

用于渲染 office 文档,目前只支持 docx 格式,通过前端转成 HTML 的方式进行渲染,支持以下功能:

  • 基础文本样式
  • 表格及表格样式
  • 内嵌图片
  • 列表
  • 注音
  • 链接

不支持的功能:

  • 分页符
  • 形状
  • 艺术字
  • 对象

基本用法

{
  "type": "office-viewer",
  "src": "/examples/static/example.docx"
}

渲染配置项

目前只支持 Word 文档,所以只有 word 的配置项,放在 wordOptions

word 渲染配置属性表

{
  "type": "office-viewer",
  "wordOptions": {
    "padding": "8px",
    "classPrefix": "docx"
  }
}
属性名 类型 默认值 说明
classPrefix string 'docx-viewer' 渲染的 class 类前缀
bulletUseFont boolean true 列表使用字体渲染,请参考下面的乱码说明
fontMapping object 字体映射,是个键值对,用于替换文档中的字体
forceLineHeight string 设置段落行高,忽略文档中的设置
padding string 设置页面间距,忽略文档中的设置
enableReplaceText boolean true 是否开启变量替换功能

列表符号出现乱码问题

默认情况下列表左侧的符号使用字体渲染,这样能做到最接近 Word 渲染效果,但如果用户的系统中没有这些字体就会显示乱码,为了解决这个问题需要手动在 amis 渲染的页面里导入对应的字体,比如

<style>
  @font-face {
    font-family: Wingdings;
    src: url(./static/font/wingding.ttf);
  }

  @font-face {
    font-family: Symbol;
    src: url(./static/font/symbol.ttf);
  }
</style>

目前已知会有 WingdingsSymbol 两个字体,可能还有别的

如果不想嵌入这两个字体,就只能在前面的 wordOptions 里设置 bulletUseFont: false

变量替换

文档可以预先定义变量,通过配置 enableVar 来开启这个功能,在实际渲染时根据上下文数据来渲染变量,比如

{
  "type": "form",
  "title": "",
  "mode": "inline",
  "wrapWithPanel": false,
  "body": [
    {
      "type": "input-text",
      "name": "name",
      "value": "amis",
      "label": "姓名"
    },
    {
      "type": "input-email",
      "name": "email",
      "label": "邮箱"
    },
    {
      "type": "input-text",
      "name": "phone",
      "label": "手机号"
    },
    {
      "type": "office-viewer",
      "id": "office-viewer",
      "src": "/examples/static/info.docx",
      "wordOptions": {
        "enableVar": true,
        "padding": "8px"
      }
    }
  ]
}

如果关闭将显示原始文档

{
  "type": "office-viewer",
  "id": "office-viewer",
  "src": "/examples/static/info.docx",
  "wordOptions": {
    "padding": "8px"
  }
}

变量详细说明

目前变量使用的写法是 {{name}},其中 name 代表变量名,另外这里可以是 amis 表达式,比如前面示例的 {{DATETOSTR(TODAY(), 'YYYY-MM-DD')}}

为了避免 Word 自作主张添加额外标签,对于复杂的变量建议先在记事本之类的纯文本编辑器里编辑,再粘贴进 Word 里。

不渲染模式

通过配置 display: false 可以让文档不渲染,虽然不渲染,但还是可以使用后面的下载及打印功能

下载文档

基于事件动作实现

[
  {
    "type": "action",
    "label": "下载文档",
    "onEvent": {
        "click": {
          "actions": [
            {
              "actionType": "saveAs",
              "componentId": "office-viewer-download"
            }
          ]
        }
      }
  },
  {
    "type": "office-viewer",
    "id": "office-viewer-download",
    "display": false,
    "src": "/examples/static/example.docx"
  }
]

打印文档

基于事件动作实现

[
  {
    "type": "action",
    "label": "打印",
    "onEvent": {
        "click": {
          "actions": [
            {
              "actionType": "print",
              "componentId": "office-viewer-print"
            }
          ]
        }
      }
  },
  {
    "type": "office-viewer",
    "id": "office-viewer-print",
    "display": false,
    "src": "/examples/static/example.docx"
  }
]

配合文件上传实现预览功能

配置和 input-file 相同的 name 即可

{
  "type": "form",
  "title": "",
  "wrapWithPanel": false,
  "body": [
    {
      "type": "input-file",
      "name": "file",
      "label": "File",
      "asBlob": true,
      "accept": ".docx"
    },
    {
      "type": "office-viewer",
      "id": "office-viewer",
      "name": "file"
    }
  ]
}

属性表

属性名 类型 默认值 说明
src Api 文档地址
enableVar boolean 是否开启变量替换功能
wordOptions object Word 渲染配置

动作表

当前组件对外暴露以下特性动作,其他组件可以通过指定actionType: 动作名称componentId: 该组件id来触发这些动作,动作配置可以通过args: {动作配置项名称: xxx}来配置具体的参数,详细请查看事件动作

动作名称 动作配置 说明
saveAs name?: string 文件名 下载文档
print - 打印文档