vue快速集成word在线编辑

word在线编辑

查看一些文档金格插件WebOffice2015、chrome浏览器插件、only-officeUEditorTinyMCECKEditorwangeditorcanvas-editor

最后选择了only-officecanvas-editor

only-office非常功能强大,word、ppt、excel都支持在线编辑预览,还支持协同,又有免费开源版。

附上本地运行demo:

一、安装docker

二、安装并启动 Onlyoffice 服务:

docker run -i -t -d -p 8701:80 onlyoffice/documentserver:版本号

如果是第 1 次执行这个命令,会先去下载 Onlyoffice,比较慢,约等待 3~10 分钟,网络畅通一点的会快一些。如果是已经安装过则直接进行启动。

三、启动内置服务

先执行 docker ps 查看 Onlyoffice 容器 ID:

# 注意这里要将 id 替换成自己的
docker exec -it f2a3eb675ad1 /bin/bash

然后执行 docker exec -it ID /bin/bash 进入容器,这里将获取到的 ID 替换一下:

# 启动所有的内置服务
supervisorctl restart all
# 退出容器
exit

最后访问 http://IP:8701/example 页面(这里要注意,IP 不能是 localhost 和 127.0.0.1,一定要用真实 IP 来访问)

因为开发周期,后端又比较懒不想花时间去看文档。这一方案被我放弃了

最后选择了canvas-editor

canvas-editor

为什么选它了,开发周期短,界面与word编辑器比较像,可以快速集成到vue,虽然作者没有开箱即用版。

在vue中主要实现方式就是采用开源项目代码。

在组件模块,新建vue文件,html采用开源项目代码,分3个部分,工具栏,侧边菜单,主要内容,底部工具,旁边批注。通过import引入开源样式,注意样式冲突。在onMounted,采用开源main.ts window.onload代码。

<div class="menu" editor-component="menu">
...
</div>
<div class="catalog" editor-component="catalog">
...
</div>
<div id="canvasEditor" class="canvas-editor"></div>
<div class="footer-canvas" editor-component="footer">
...
</div>
const instance = new Editor(
    document.querySelector('#canvasEditor'),
    {
      header: props.header,
      main: props.main,
      footer: props.footer
    },
    options
);
console.log('实例', instance);
editorRef.value = instance;

// 工具栏方法 例:
// 2. | 撤销 | 重做 | 格式刷 | 清除格式 |
const undoDom = document.querySelector('.menu-item__undo');
    undoDom.title = `撤销(${isApple ? '⌘' : 'Ctrl'}+Z)`;
    undoDom.onclick = function () {
    console.log('undo');
    instance.command.executeUndo();
};

<style lang="scss" scoped>
#canvasEditor {
  display: flex;
  justify-content: center;
  background: #f2f4f7;
}
@import url(@/assets/css/dialog.css);
@import url(@/assets/css/signature.css);
</style>

思路通过富文本编辑器实现在线编辑功能,通过插件提供的api获取图片base64和文本数据,通过接口保存至数据库,通过列表数据复显编辑,后端获取到图片数据转pdf或者其他格式都可以。自己转pdf则是通过html2canvas jspdf

使用方式

例:
<canvas-editor
  v-if="!loadingInit"
  :header="canvasEditor.header"
  :main="canvasEditor.main"
  :footer="canvasEditor.footer"
  :options="canvasEditor.options"
  @getCanvasEditorData="getCanvasEditorData"
/>
import CanvasEditor from '@/components/editor/index.vue';

components: {
  CanvasEditor
},

canvasEditor: {
  main: [],
  options: [],
  header: [],
  footer: []
},

// getCanvasEditorData 事件

主要获取富文本 main内容 image的base64 options配置项 用于数据保存

getCanvasEditorData: ({ value, imgage, options }) => {  
},

image.png

主要配置

    // 页眉配置
    header: {
      type: Array,
      default: []
    },
    // 主要编辑内容
    main: {
      type: Array,
      default: []
    },
    // 页脚信息
    footer: {
      type: Array,
      default: []
    },
    // 
    options: {
      type: Object,
      default: {}
    },
    // 批注 TODO
    commentList: {
      type: Array,
      default: []
    }

完整配置

interface IEditorOption {
  mode?: EditorMode // 编辑器模式:编辑、清洁(不显示视觉辅助元素。如:分页符)、只读、表单(仅控件内可编辑)、打印(不显示辅助元素、未书写控件及前后括号)。默认:编辑
  defaultType?: string // 默认元素类型。默认:TEXT
  defaultColor?: string // 默认字体颜色。默认:#000000
  defaultFont?: string // 默认字体。默认:Microsoft YaHei
  defaultSize?: number // 默认字号。默认:16
  minSize?: number // 最小字号。默认:5
  maxSize?: number // 最大字号。默认:72
  defaultBasicRowMarginHeight?: number // 默认行高。默认:8
  defaultRowMargin?: number // 默认行间距。默认:1
  defaultTabWidth?: number // 默认tab宽度。默认:32
  width?: number // 纸张宽度。默认:794
  height?: number // 纸张高度。默认:1123
  scale?: number // 缩放比例。默认:1
  pageGap?: number // 纸张间隔。默认:20
  underlineColor?: string // 下划线颜色。默认:#000000
  strikeoutColor?: string // 删除线颜色。默认:#FF0000
  rangeColor?: string // 选区颜色。默认:#AECBFA
  rangeAlpha?: number // 选区透明度。默认:0.6
  rangeMinWidth?: number // 选区最小宽度。默认:5
  searchMatchColor?: string // 搜索高亮颜色。默认:#FFFF00
  searchNavigateMatchColor?: string // 搜索导航高亮颜色。默认:#AAD280
  searchMatchAlpha?: number // 搜索高亮透明度。默认:0.6
  highlightAlpha?: number // 高亮元素透明度。默认:0.6
  resizerColor?: string // 图片尺寸器颜色。默认:#4182D9
  resizerSize?: number // 图片尺寸器大小。默认:5
  marginIndicatorSize?: number // 页边距指示器长度。默认:35
  marginIndicatorColor?: string // 页边距指示器颜色。默认:#BABABA
  margins?: IMargin // 页面边距。默认:[100, 120, 100, 120]
  pageMode?: PageMode // 纸张模式:连页、分页。默认:分页
  tdPadding?: IPadding // 单元格内边距。默认:[0, 5, 5, 5]
  defaultTrMinHeight?: number // 默认表格行最小高度。默认:42
  defaultColMinWidth?: number // 默认表格列最小宽度(整体宽度足够时应用,否则会按比例缩小)。默认:40
  defaultHyperlinkColor?: string // 默认超链接颜色。默认:#0000FF
  header?: IHeader // 页眉信息。{top?:number; maxHeightRadio?:MaxHeightRatio;}
  footer?: IFooter // 页脚信息。{bottom?:number; maxHeightRadio?:MaxHeightRatio;}
  pageNumber?: IPageNumber // 页码信息。{bottom:number; size:number; font:string; color:string; rowFlex:RowFlex; format:string; numberType:NumberType;}
  paperDirection?: PaperDirection // 纸张方向:纵向、横向
  inactiveAlpha?: number // 正文内容失焦时透明度。默认值:0.6
  historyMaxRecordCount?: number // 历史(撤销重做)最大记录次数。默认:100次
  printPixelRatio?: number // 打印像素比率(值越大越清晰,但尺寸越大)。默认:3
  maskMargin?: IMargin // 编辑器上的遮盖边距(如悬浮到编辑器上的菜单栏、底部工具栏)。默认:[0, 0, 0, 0]
  letterClass?: string[] // 排版支持的字母类。默认:a-zA-Z。内置可选择的字母表类:LETTER_CLASS
  contextMenuDisableKeys?: string[] // 禁用的右键菜单。默认:[]
  scrollContainerSelector?: string // 滚动区域选择器。默认:document
  wordBreak?: WordBreak // 单词与标点断行:BREAK_WORD首行不出现标点&单词不拆分、BREAK_ALL按字符宽度撑满后折行。默认:BREAK_WORD
  watermark?: IWatermark // 水印信息。{data:string; color?:string; opacity?:number; size?:number; font?:string;}
  control?: IControlOption // 控件信息。 {placeholderColor?:string; bracketColor?:string; prefix?:string; postfix?:string; borderWidth?: number; borderColor?: string;}
  checkbox?: ICheckboxOption // 复选框信息。{width?:number; height?:number; gap?:number; lineWidth?:number; fillStyle?:string; strokeStyle?: string;}
  radio?: IRadioOption // 单选框信息。{width?:number; height?:number; gap?:number; lineWidth?:number; fillStyle?:string; strokeStyle?: string;}
  cursor?: ICursorOption // 光标样式。{width?: number; color?: string; dragWidth?: number; dragColor?: string;}
  title?: ITitleOption // 标题配置。{ defaultFirstSize?: number; defaultSecondSize?: number; defaultThirdSize?: number defaultFourthSize?: number; defaultFifthSize?: number; defaultSixthSize?: number;}
  placeholder?: IPlaceholder // 编辑器空白占位文本
  group?: IGroup // 成组配置。{opacity?:number; backgroundColor?:string; activeOpacity?:number; activeBackgroundColor?:string; disabled?:boolean}
  pageBreak?: IPageBreak // 分页符配置。{font?:string; fontSize?:number; lineDash?:number[];}
  zone?: IZoneOption // 编辑器区域配置。{tipDisabled?:boolean;}
  background?: IBackgroundOption // 背景配置。{color?:string; image?:string; size?:BackgroundSize; repeat?:BackgroundRepeat;}。默认:{color: '#FFFFFF'}
  lineBreak?: ILineBreakOption // 换行符配置。{disabled?:boolean; color?:string; lineWidth?:number;}
  separator?: ISeparatorOption // 分隔符配置。{lineWidth?:number; strokeStyle?:string;}
}

页眉配置

interface IHeader {
  top?: number // 距离页面顶部大小。默认:30
  maxHeightRadio?: MaxHeightRatio // 占页面最大高度比。默认:HALF
  disabled?: boolean // 是否禁用
}

页码配置

interface IPageNumber {
  bottom?: number // 距离页面底部大小。默认:60
  size?: number // 字体大小。默认:12
  font?: string // 字体。默认:Microsoft YaHei
  color?: string // 字体颜色。默认:#000000
  rowFlex?: RowFlex // 行对齐方式。默认:CENTER
  format?: string // 页码格式。默认:{pageNo}。示例:第{pageNo}页/共{pageCount}页
  numberType?: NumberType // 数字类型。默认:ARABIC
  disabled?: boolean // 是否禁用
  startPageNo?: number // 起始页码。默认:1
  fromPageNo?: number // 从第几页开始出现页码。默认:0
}

水印配置

interface IWatermark {
  data: string // 文本。
  color?: string // 颜色。默认:#AEB5C0
  opacity?: number // 透明度。默认:0.3
  size?: number // 字体大小。默认:200
  font?: string // 字体。默认:Microsoft YaHei
}

占位文本配置

interface IPlaceholder {
  data: string // 文本。
  color?: string // 颜色。默认:#DCDFE6
  opacity?: number // 透明度。默认:1
  size?: number // 字体大小。默认:16
  font?: string // 字体。默认:Microsoft YaHei
}

canvas-editor官方文档
git地址

  • 20
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue 在线 Word 编辑器是一种基于 Vue 框架的在线文本编辑工具,可以像使用 Microsoft Word 一样在浏览器中编辑文档。它具有多种功能,如字体样式、文字颜色、段落格式、图片插入、表格创建等。此外,它还支持多人协作编辑,可以同时打开一个文档进行多人编辑、评论和共享。 Vue 在线 Word 编辑器采用实时更新技术,可以显示多个用户同时在编辑文档时的变化,并且每一次变化都可以自动保存到服务器,保证数据的安全性。同时,它还支持历史版本查看,可以查看和回退到之前的版本。这种在线 Word 编辑器在公共云端可以让不同的用户协作编辑,也可以在私有云端用于团队内的编辑和共享。 相对于其他在线文本编辑工具,Vue 在线 Word 编辑器具有更好的可扩展性和可定制性,开发者可以根据自己的需求进行二次开发和定制,以满足不同的业务场景。最后,Vue 在线 Word 编辑器的开源性使得开发者可以充分利用整个社区贡献的资源,快速搭建出自己的编辑器,进一步提升工作效率和用户体验。 ### 回答2: Vue 在线 word 编辑器是一种基于 Vue 框架的在线文档编辑器。它允许用户在浏览器中创建、编辑和保存 Word 文档。vue 在线编辑器具有可拓展性和高度的自定义能力,使其能够满足不同用户的需求。 在实现上,Vue 在线 word 编辑器使用了一些开源的 JavaScript 库,例如 Quill.js 和 jsZip 等,以及依赖于 Vue 框架内置的组件、指令等。其主要功能包括文本编辑、格式刷、插入图片、表格、插入链接、撤销、恢复等。 值得注意的是,Vue 在线 word 编辑器还提供了文件的导入和导出功能,用户可以将其编辑好的文档导出为 Word 文档格式(.docx),也可以将已有的 Word 文档导入到编辑器中进行编辑和保存。此外,该编辑器还支持文档的实时协同编辑,即多个用户可以同时编辑同一份文档,编辑结果将实时反映在其他用户的页面上。 总的来说,Vue 在线 word 编辑器具有易于使用的简洁界面、高效的编辑功能和多样化的可定制化选项,适合用于各种在线文档编辑场景。 ### 回答3: Vue 在线 Word 编辑器是一种基于 web 技术的应用程序,可以在浏览器中方便地编辑 Word 文档。此类编辑器基于 Vue.js 框架进行开发,使用了丰富的前端组件库,同时也集成了用于处理文本格式、排版等元素的第三方插件,使得用户可以轻松地实现 Word 文档的编辑和排版。 与传统的本地 Word 软件相比,Vue 在线 Word 编辑器具有很多优势。首先,它可以不受限制地在多个平台和设备上使用,用户只需通过一个支持现代浏览器的设备就可以实现在线编辑。其次,这种编辑方式避免了传统的繁琐的文件传输和共享方式,用户可以随时更新和共享文档。此外,与其他在线编辑器相比,Vue 在线 Word 编辑器的用户体验更好,支持实时文本输入,且加入了可视化的编辑器组件后,用户可以更快地完成标准化的文档制作。 总之,Vue 在线 Word 编辑器是一种前端技术的应用,依托 Vue.js 框架以及多种前端组件库和插件的支持,使用户可以轻松实现在线 Word 文档的编辑和排版。有了它,用户可以更加高效地制作文档和分享文件,同时也更加灵活地适应多设备使用和跨平台需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值