word文档,做编辑预览功能,sdk打开之后中间莫名其妙多出空白页

阅读次数 8
2 Answers

您好,未能复现您的问题,在线打开文档后是否有其它操作呢。

我现在把 ready 的回调函数都去掉了,也就是说现在是只做了初始化操作,预览还是有空白页

你好,我这边 sdk 是 2.0.7 的,整个自己写的 demo 代码都放到了下边,方便用我的 demo 测试一下吗?

const replaceList = []
window.onload = function () {
    const cancelBtn = document.getElementById('cancel');
    const saveBtn = document.getElementById('save');
    const submitBtn = document.getElementById('submit');
    const webOfficeInstance = WebOfficeSDK.init({
        fileId: '13',
        officeType: 'w',
        appId: 'SX20241015NREVZW',
        mount: document.querySelector('#app'),
        token: 'asdjkhfkjsad',

    })
    const ApiEvent = webOfficeInstance.ApiEvent
    const fileOpen = async () => {
        console.log('fileOpen');
        // webOfficeInstance.ready().then(readyCbs)
    }
    ApiEvent.AddApiEventListener('fileOpen', fileOpen)
    // ready 回调
    async function readyCbs() {
        const app = webOfficeInstance.Application
        await customizationToolbar(app) // 定制化工具栏

        replaceAllInfo(app, replaceList)
        await startProject(app) // 开启限制编辑模式
        // await openTrackRevisions(app) // 强制开启修订模式
        // 绑定提交事件
        submitBtn.addEventListener('click', async () => {
            // 1、导出一个修订版的 pdf
            const pdfUrl1 = await saveAsPdf(app, {
                Item: app.Enum.WdExportItem.wdExportDocumentWithMarkup, // 指定导出过程是只包括文本还是包括文本和标记
                IncludeDocProps: true, // 指定在最新导出的文件中是否包括文档属性
            })
            console.log('pdfUrl1: ', pdfUrl1);
            // 取消限制编辑模式
            await closeProject(app)
            // 2、接受所有修订
            await acceptAllRevisions(app)
            // 3、导出一个正常版的 pdf
            const pdfUrl2 = await saveAsPdf(app)

            // await startProject(app)
            console.log('带批注的 pdfUrl1: ', pdfUrl1);
            console.log('原版 pdfUrl2: ', pdfUrl2);
            // 保存文件
            await webOfficeInstance.save()
        })
    }
    // 设置工具栏
    async function customizationToolbar(app) {
        const moreMenus = await app.CommandBars('MoreMenus')
        moreMenus.Visible = false // 更多按钮隐藏
        // const tabReviewWord = await app.CommandBars('TabReviewWord')
        // tabReviewWord.Visible = false // 审阅按钮
        const contextMenuConvene = await app.CommandBars('ContextMenuConvene')
        contextMenuConvene.Visible = false // 右键-召唤在线协助者 隐藏
        const reviewTrackChanges = await app.CommandBars('ReviewTrackChanges')
        reviewTrackChanges.Visible = false // 修订开关按钮 隐藏
        const revisionSetting = await app.CommandBars('RevisionSetting')
        revisionSetting.Visible = false // 修订设置功能 隐藏
    }
    // 开启限制编辑为修订模式
    async function startProject(app) {
        console.log('startProject');
        // 获取限制编辑模式
        const mode = await app.ActiveDocument.RestrictEditMode
        if (mode != 2) {
            // 开启限制编辑
            await app.ActiveDocument.Protect('test', app.Enum.WdRestrictEditMode.wdEditModeTrackedChanges)
        }
    }
    // 取消限制编辑模式
    async function closeProject(app) {
        console.log('closeProject');
        // 获取限制编辑模式
        const mode = await app.ActiveDocument.RestrictEditMode
        if (mode != 0) {
            // 停止限制编辑
            await app.ActiveDocument.Unprotect('test')
        }
    }
    // 开启修订模式
    async function openTrackRevisions(app) {
        // 获取页面是否处于修订模式
        const TrackRevisions = await app.ActiveDocument.TrackRevisions // true - 在修订模式下,false - 不在修订模式下
        if (!TrackRevisions) {
            // 不处于修订模式,则设置为修订模式
            // 将当前文档的编辑状态切换成修订模式
            app.ActiveDocument.TrackRevisions = true
        }
    }
    // 全文替换
    async function replaceAllInfo(app, queryList = []) {
        console.log('replaceAllInfo');
        // 检测需要替换的内容是否存在
        let findReplaceList = []
        for (let i = 0; i < queryList.length; i++) {
            const item = queryList[i]
            const findList = await app.ActiveDocument.Find.Execute(item.key, false)
            console.log(item.key, findList);
            if (findList.length > 0) {
                findReplaceList.push(item)
            }
        }
        console.log(findReplaceList.length);
        // 如果检测到了要替换的内容,则执行替换操作,否则不执行替换操作
        if (findReplaceList.length > 0) {
            await closeProject(app) // 关闭保护模式
            // 获取当前文档
            const ActiveDocument = await app.ActiveDocument
            // 全文替换
            await ActiveDocument.ReplaceText(findReplaceList)
            await acceptAllRevisions(app)// 接受所有修订
            await webOfficeInstance.save() // 保存一下
        }
    }

    // 接受所有修订
    async function acceptAllRevisions(app) {
        console.log('acceptAllRevisions');

        // 获取修订对象
        const revisions = await app.ActiveDocument.Revisions

        // 获取全文修订内容
        const revisionData = await revisions.Json()
        if (revisionData.length > 0) {
            // 获取第 1 个代表已修订过的文档的单个审阅者
            const reviewer =
                await app.ActiveDocument.ActiveWindow.View.Reviewers.Item(1)
            console.log('reviewer', reviewer);
            // 控制接受文档中指定审阅者的所有修订
            reviewer.Visible = true

            // 接受文档中指定审阅者的所有修订
            await app.ActiveDocument.AcceptAllRevisionsShown()
        }
    }

    // 导出 PDF,并获取导出后的 url
    async function saveAsPdf(app, option = null) {
        console.log('saveAsPdf: ', option);
        const pdfUrl = await app.ActiveDocument.ExportAsFixedFormat(option) // 默认导出 PDF,所以可以不传参
        return pdfUrl
    }
}