前端在线预览pdf、word、excel方案(写给自己看的)

一、pdf

浏览器是支持直接预览pdf的,但是很多时候我们直接通过打开新窗口或放到iframe中,都会变成下载而不是预览,这可能是因为后端返回的blob type对不上号,只要对返回的blob稍加修改就可以在浏览器进行预览了。

<iframe id="myIframe"></iframe>
// 根据接口获取文件 blob 对象
let res = await fetch(fileUrl)
let data = await res.blob()

// 创建一个新的blob并且设置blob的type
const blob = new Blob([data], { type })

// 生成本地地址
let fileUrl = URL.createObjectURL(blob)

// 渲染到iframe
let iframeDoc = document.getElementById('myIframe')
iframeDoc.src = fileUrl;

二、word

浏览器是不支持直接显示word的,其他方案可以选择用插件,如果插件用不了,或者无法与自己的工程结合,就让后端写个接口,把word转成pdf,然后再用上面的方式进行预览。

三、excel

浏览器是不支持直接显示word的,其他方案可以选择用插件,本次示范的是js-xlsx插件,该插件可以直接读取excel文件返回html,但是不带样式,不过样式可以自己写。最终结果展示的只是普通的表格,无法还原excel原本的样式。

<iframe id="myIframe"></iframe>
// 把文件对象传进来即可
function getExcelData(file) {
    const reader = new FileReader()
    reader.onload = (e) => {
        const data = e.target.result;
        const workbook = XLSX.read(data, {
            type: 'binary'
        })
        // 取第一张表
        const wsname = workbook.SheetNames[0] 
        // 生成json表格内容
        const ws = XLSX.utils.sheet_to_html(workbook.Sheets[wsname]) 

        if (ws) {
            let doc = document.getElementById('myIframe').contentDocument
            doc.write(ws)

            let table = doc.querySelector('table')
            table.border = 1
            // 修改表格样式
            const styleElement = doc.createElement('style');
            styleElement.textContent = `
                /* 在这里写入你的CSS样式 */
                table {
                    border-collapse: collapse;
                    border-color: #ccc;
                    color: #333;
                }
                td {padding: 8px 12px}
                tr {background: #f3f3f3}
            `;
            doc.head.appendChild(styleElement);
        }
    }

    reader.readAsBinaryString(file)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值