前端开发中如何在页面加载时自动读取并转换指定的 .docx 文件

前端开发中如何在页面加载时自动读取并转换指定的 .docx 文件,并实现在线预览功能。我在这里分享通过 mammoth.min.js 插件来实现docx在线预览功能

第1:下载地址,大家可以任意选取下面其中一种方式下载

(1)GitHub - mwilliamson/mammoth.js: Convert Word documents (.docx files) to HTML

(2)mammoth (v1.8.0) - Convert Word documents from docx to simple HTML and Markdown | BootCDN - Bootstrap 中文网开源项目免费 CDN 加速服务 铂特优选

第2:在html中引入mammoth.min.js

在你的 HTML 文件中,使用 <script> 标签引入 mammoth.min.js 文件

第3:编写 JavaScript 代码来读取和转换 DOCX 文件

示例代码:docx中出现表格,如何通过mammoth.min.js成功实现在线预览

mammoth 库在转换 DOCX 文件时,默认情况下可能不会完全保留所有的格式和表格结构。为了更好地处理这些问题,styleMap 可以帮助你定义如何将 Word 样式映射到 HTML 样式

<!DOCTYPE html>
<html class="x-admin-sm" lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <script type="text/javascript" th:src="@{/js/mammoth.browser.js}"></script>
    <style>
    body {
        font-family: Arial, sans-serif;
    }
    table {
        width: 100%;
        border-collapse: collapse;
    }
    th, td {
        border: 1px solid #ddd;
        padding: 8px;
    }
    th {
        background-color: #f2f2f2;
        text-align: left;
    }
    </style>
</head>
<body>
<div id="content"></div>
<script>
    async function loadAndConvertDocx() {
        const url = 'http://localhost:8080/document.docx?id='+Math.random()
        try {
            // 读取 DOCX 文件
            const response = await fetch(url);
            const arrayBuffer = await response.arrayBuffer();

            // 定义 styleMap 以更好地处理表格和格式
            const styleMap = `                    p => p
                    p[style-name='Heading 1'] => h1:fresh
                    p[style-name='Heading 2'] => h2:fresh
                    p[style-name='Heading 3'] => h3:fresh
                    p[style-name='Heading 4'] => h4:fresh
                    p[style-name='Heading 5'] => h5:fresh
                    p[style-name='Heading 6'] => h6:fresh
                    p[style-name='Normal'] => p:fresh
                    table => table
                    tr => tr
                    td => td
                    th => th
                    table[style-name='Table Normal'] => table
                    tr[style-name='Table Normal'] => tr
                    td[style-name='Table Normal'] => td
                    th[style-name='Table Normal'] => th
                    table[style-name='Table Grid'] => table
                    tr[style-name='Table Grid'] => tr
                    td[style-name='Table Grid'] => td
                    th[style-name='Table Grid'] => th
                `;

            // 使用 Mammoth 转换 DOCX 文件为 HTML
            const result = await mammoth.convertToHtml({arrayBuffer, styleMap: styleMap});
            const html = result.value; // The generated HTML
            const messages = result.messages; // Any messages, such as warnings during conversion

            // 将生成的 HTML 插入到页面中
            document.getElementById('content').innerHTML = html;
        } catch (error) {
            console.error('Error:', error);
        }
    }

    // 页面加载时调用 loadAndConvertDocx 函数
    window.addEventListener('load', loadAndConvertDocx);
</script>
</body>
</html>

第4:如果你后端使用springboot(版本:2.7.5)框架,可以将某个存放docx文件的目录映射到 http://localhost:8080。这里只需要在application.yml配置 static-locations

spring:
  web:
    resources:
      static-locations: classpath:/META-INF/resources/, classpath:/resources/, classpath:/static/, classpath:/public/, file:D://upload//nursing

 

posted @ 2024-11-06 17:03  子墨老师  阅读(9)  评论(0编辑  收藏  举报