其他分享
首页 > 其他分享> > Extjs实现在线预览word文件,仅支持docx

Extjs实现在线预览word文件,仅支持docx

作者:互联网

实现思路参考vue的docx-preview的word在线预览。

注:引入polyfill.min.js、jszip.min.js、docx-preview.js文件;

js文件下载:

https://github.com/dimoGH/docx

废话不多说,上菜:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>预览docx</title>
    <link rel="stylesheet" type="text/css" href="public/css/ext-all.css"/>
    <link rel="stylesheet" type="text/css" href="public/css/ext-zh_CN.css"/>
    <script type="text/javascript" src="public/js/ext-all.js"></script>
    <script type="text/javascript" src="public/js/ext-lang-zh_CN.js"></script>
    <!--optional polyfill for promise-->
    <script src="public/js/polyfill.min.js"></script>
    <!--lib uses jszip-->
    <script src="public/js/jszip.min.js"></script>
    <!--docx-preview-->
    <script src="public/js/docx-preview.js"></script>

</head>
<body>
<script>
    Ext.onReady(function () {
        Ext.getBody().mask('加载中');//加载时页面遮盖

        var formPanel = Ext.create('Ext.form.Panel', {
            id: 'formPanel',
            layout: 'column',
            frame: true,
            border: false,
            defaults: {
                labelAlign: 'right',
                labelWidth: 100,
                inputWidth: 200,
                margin: '4,0,0,0'
            },
            items: [{
                xtype: 'filefield',//上传附件
                name: 'CONTENT_',
                fieldLabel: 'docx',
                buttonText: '请选择',
                inputWidth: 340,
                style: 'clear: both',//换行显示
                listeners: {
                    change: function (cmp, newValue, oldValue, eOpts) {//预览docx
                        var imageRegExp = new RegExp('^[^\\.]+(\\.)(docx)$');
                        var path = cmp.getValue();//获取附件本地路径
                        if (path != null && !Ext.isEmpty(path)) {
                            var url = "file://" + path;
                            console.log(imageRegExp.test(url));
                            if (imageRegExp.test(url)) {//正则校验,只能上传docx文件限制
                                var imagePreviewDom = Ext.getCmp('imagePreview').getEl().dom;//预览的docx框DOM对象
                                imagePreviewDom.src = Ext.BLANK_IMAGE_URL;//覆盖原来的文件
                                var file = cmp.fileInputEl.dom.files[0];//获取本地文件
                                //调用docx预览
                                docx.renderAsync(file, document.getElementById("imagePreview"), null, {
                                    ignoreHeight: false,// 禁止页面渲染高度
                                    ignoreWidth: false,// 禁止页面渲染宽度
                                    ignoreFonts: false,// 禁止字体渲染
                                    breakPages: true,// 在分页符上启用分页
                                    debug: false,// 启用额外的日志记录
                                    experimental: false,//启用实验性功能(制表符停止计算)
                                    className: "docx",// 默认和文档样式类的类名/前缀
                                    inWrapper: true,// 启用围绕文档内容渲染包装器
                                    trimXmlDeclaration: true,//如果为真,xml声明将在解析之前从xml文档中删除
                                    ignoreLastRenderedPageBreak: true,//禁用lastRenderedPageBreak元素的分页
                                    renderHeaders: true,
                                    renderFooters: true,
                                    renderFootnotes: true,
                                    renderEndnotes: true,
                                    useBase64URL: false,
                                    useMathMLPolyfill: false
                                }).then(x => console.log("docx: finished"));
                            } else {
                                Ext.MessageBox.alert('提示', '请选择docx格式文件', Ext.MessageBox.ERROR);
                            }
                        }
                    }
                }
            }]
        });

        var imagePreviewPanel = Ext.create('Ext.panel.Panel', {
            id: 'imagePreviewPanel',
            layout: 'column',
            frame: true,
            autoScroll: true,
            items: [{
                xtype: 'box',//预览图片框
                id: 'imagePreview',
                autoScroll: true
            }]
        });

        Ext.create('Ext.container.Viewport', {//整体布局
            layout: {
                type: 'border',//border布局
                regionWeights: {//四个角的归属
                    west: -1,
                    north: 1,
                    south: 1,
                    east: -1
                }
            },
            defaults: {
                border: false
            },
            items: [{
                region: 'north',
                items: [formPanel]
            }, {
                region: 'center',
                layout: 'fit',
                items: [imagePreviewPanel]
            }]
        });

        _init();
    });

    function _init() {//初始化。页面和所有自动加载数据全部加载完成后调用。
        for (var i = 0; i < Ext.data.StoreManager.getCount(); i++) {//检查是否所有自动加载数据已经全部加载完成
            if (Ext.data.StoreManager.getAt(i).isLoading()) {
                return;
            }
        }

        Ext.getBody().unmask();//取消页面遮盖
    }

</script>
</body>
</html>

效果图:

 

标签:docx,word,预览,Ext,var,false,true,Extjs
来源: https://www.cnblogs.com/mwd-banbo/p/16529107.html