您现在的位置是:首页 > 技术教程 正文

前端实现word文档预览和内容提取

admin 阅读: 2024-03-30
后台-插件-广告管理-内容页头部广告(手机)

需求

上一篇写了excel文档解析,顺便就看看word文档。

解决问题

1.前端在浏览器预览word文档。

2.可以直接提取word文档内容

利用技术

预览文档--docx-preview

提取文档内容--mammoth

预览文档实现过程

  1. // HTML
  2. <div id="preview">div>

实现预览功能

renderAsync接收四个参数

1.document: 数据格式可以为Blob | ArrayBuffer | Uint8Array, // could be any type that supported by JSZip.loadAsync

2.bodyContainer: 渲染的区域

3.styleContainer: 通常用于指定一个HTML元素,该元素将用于包含和管理渲染文档所需的样式信息,包括字体、颜色、布局等。

4.options:{} 具体参数看文档

  1. // JavaScript
  2. const onWord = (event) => {
  3. let reader = new FileReader();
  4. let file = event.target.files[0];
  5. let options = { inWrapper: false, ignoreWidth: true, ignoreHeight: true }
  6. docx.renderAsync(file, document.getElementById("preview"), null, options)
  7. }

提取word文档实现过程

1.extractRawText--转文字;

2.convertToHtml--转HTML;

3.convertToMarkdown--转Markdown 文档

  1. const onWord = (event) => {
  2. let reader = new FileReader();
  3. let file = event.target.files[0];
  4. if (file) {
  5. reader.onload = function (e) {
  6. const data = e.target.result;
  7. // 转文字
  8. mammoth.extractRawText({ arrayBuffer: data }).then(function (displayResult) {
  9. wordData.value = displayResult.value
  10. }).done();
  11. // 转HTML
  12. mammoth.convertToHtml({ arrayBuffer: data }).then(function (displayResult) {
  13. console.log(displayResult);
  14. }).done();
  15. // 转Markdown 文档。
  16. mammoth.convertToMarkdown({ arrayBuffer: data }).then(function (displayResult) {
  17. console.log(displayResult);
  18. }).done();
  19. };
  20. reader.readAsArrayBuffer(file);
  21. }
  22. }

word预览

效果预览

完整代码如下

  1. html>
  2. <html lang="en">
  3. <head>
  4. <title>上传word文件title>
  5. <style>
  6. * {
  7. margin: 0;
  8. padding: 0;
  9. }
  10. .container {
  11. padding: 0 50px;
  12. }
  13. .operation {
  14. padding: 20px;
  15. }
  16. .btn {
  17. min-width: 50px;
  18. font-size: 20px;
  19. color: #fff;
  20. background: #118ee9;
  21. margin: 0 20px 0 0;
  22. padding: 8px;
  23. border: none;
  24. border-radius: 4px;
  25. box-sizing: border-box;
  26. }
  27. .item {
  28. width: 350px;
  29. box-sizing: border-box;
  30. padding: 4px 14px 4px 14px;
  31. color: #000;
  32. font-size: 12px;
  33. background: #fff;
  34. }
  35. style>
  36. <script src="https://unpkg.com/vue@3/dist/vue.global.js">script>
  37. <script src="https://cdn.bootcdn.net/ajax/libs/mammoth/1.6.0/mammoth.browser.min.js">script>
  38. <script src="https://cdn.jsdelivr.net/npm/jszip@3.10.1/dist/jszip.min.js">script>
  39. <script src="https://cdn.jsdelivr.net/npm/docx-preview@0.1.15/dist/docx-preview.js">script>
  40. head>
  41. <body>
  42. <div class="container" id="app">
  43. <div class="operation">
  44. <button class="btn" @click="uploadFile">上传word文件button>
  45. div>
  46. <br>
  47. <div v-if="wordData">{{wordData}}div>
  48. <br>
  49. <div id="preview">div>
  50. div>
  51. <script>
  52. const { createApp, ref, onMounted } = Vue
  53. createApp({
  54. setup() {
  55. let wordData = ref('')
  56. const uploadFile = (mark) => {
  57. let inputEle = document.createElement('input')
  58. inputEle.type = 'file'
  59. inputEle.accept = '.doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document'
  60. inputEle.click()
  61. inputEle.addEventListener('input', (event) => {
  62. onWord(event)
  63. })
  64. };
  65. const onWord = (event) => {
  66. let reader = new FileReader();
  67. let file = event.target.files[0];
  68. let options = { inWrapper: false, ignoreWidth: true, ignoreHeight: true }
  69. docx.renderAsync(file, document.getElementById("preview"),null, options)
  70. let fileName = file.name
  71. if (file) {
  72. reader.onload = function (e) {
  73. const data = e.target.result;
  74. // 转文字
  75. mammoth.extractRawText({ arrayBuffer: data }).then(function (displayResult) {
  76. wordData.value = displayResult.value
  77. }).done();
  78. // 转HTML
  79. mammoth.convertToHtml({ arrayBuffer: data }).then(function (displayResult) {
  80. console.log(displayResult);
  81. }).done();
  82. // 转Markdown 文档。
  83. mammoth.convertToMarkdown({ arrayBuffer: data }).then(function (displayResult) {
  84. console.log(displayResult);
  85. }).done();
  86. };
  87. reader.readAsArrayBuffer(file);
  88. }
  89. }
  90. return {
  91. wordData,
  92. uploadFile,
  93. onWord,
  94. }
  95. }
  96. }).mount('#app')
  97. script>
  98. body>
  99. html>

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索