当前位置: 首页 > backend >正文

麒麟、UOS系统在线打开word文件并提取修订痕迹

麒麟、UOS系统在线打开word文件并提取修订痕迹

  •  查看本示例演示效果(Windows版)
  •  查看本示例演示效果(国产版)
  • 本示例关键代码的编写位置,请参考“开始 - 快速上手”里您所使用的开发语言框架的最简集成代码

注意

本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用。

在实际应用中,为了方便查找和定位当前页面的某个痕迹,通常采用将当前文档中的所有痕迹遍历,并以列表方式显示到当前页面某个位置。

一般需要显示的痕迹属性包括:痕迹的用户名,痕迹的内容,痕迹的日期时间等。PageOffice 客户端控件提供了 RevisionsAsJson 对象来实现对痕迹的遍历。

RevisionsAsJson

  • author 代表当前痕迹的用户名
  • date 代表当前痕迹的日期
  • type 代表痕迹的类型
  • GetTextFromRevision 代表痕迹的文本内容

后端代码

本示例无后端关键代码。

前端代码

//获取痕迹列表,返回一组痕迹的<li>标签
function  getRevisionList(){var revisionList = "";var revisionsJson=pageofficectrl.word.RevisionsAsJson;var revisionObj = JSON.parse(revisionsJson);//遍历痕迹for(var key in revisionObj){let str = '';let revisionAuthor = revisionObj[key].author; //author属性为当前痕迹的用户名let revisionDate = revisionObj[key].date; //date属性为当前痕迹的日期str = dateFormat(revisionDate, '[yyyy-MM-dd HH:mm]') + revisionAuthor + ':';if (revisionObj[key].type === 1) { //type代表当前痕迹的类型为“插入”类型let revisionType = '插入';let revisionTxt = pageofficectrl.word.GetTextFromRevision(parseInt(revisionObj[key].id));//获取当前痕迹的文本内容str = str + revisionType +':' + revisionTxt;}else if (revisionObj[key].type === 2) { //type代表当前痕迹的类型为“删除”类型let revisionType = '删除';let revisionTxt = pageofficectrl.word.GetTextFromRevision(parseInt(revisionObj[key].id));str = str + revisionType +':' + revisionTxt;}else {let revisionType = '调整格式或样式。';str = str + revisionType ;}revisionList += "<li><a href='#' onclick='goToRevision(" + key + ")'>" + str + "</a></li>";}return revisionList;
}
//定位到一个痕迹
function goToRevision(key) {pageofficectrl.word.SelectRevision(key);
}
function dateFormat(date, format) {date = new Date((date-25569)*86400*1000);date = roundTimeToSeconds(date);date.setHours(date.getHours() - 8);var o = {'M+': date.getMonth() + 1, //month'd+': date.getDate(), //day'H+': date.getHours(), //hour'm+': date.getMinutes(), //minute's+': date.getSeconds(), //second'q+': Math.floor((date.getMonth() + 3) / 3), //quarter'S': date.getMilliseconds() //millisecond};if (/(y+)/.test(format))format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));for (var k in o)if (new RegExp('(' + k + ')').test(format))format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));return format;
}
function roundTimeToSeconds(date) {var seconds = date.getSeconds();if (seconds < 30) {date.setSeconds(0);} else {date.setSeconds(0);date.setMinutes(date.getMinutes() + 1);}return date;
}
// 把所有痕迹的<li>标签放到一个<ul>中
function refreshList() {document.getElementById("ul_Comments").innerHTML = getRevisionList();
}

效果:

参考链接: https://www.pageoffice.cn/pages/a124a0/

http://www.xdnf.cn/news/3221.html

相关文章:

  • 机器视觉橡胶制品检测的应用
  • 【来自AI】RS485,Rs232,Modbus的区别和联系是什么
  • 小知识总结记录
  • 用Python构建自动驾驶传感器融合算法:从理论到实践
  • 第五届图像、视觉与智能系统国际会议(ICIVIS 2025)参会通知
  • Poco C++全面开发指南:网络应用开发
  • 综合开发-手机APP远程控制PLC1500柱灯的亮灭
  • 嵌入式开发高频面试题全解析:从基础编程到内存操作核心知识点实战
  • 基于UNet算法的农业遥感图像语义分割——补充版
  • Mysql数据库高可用解决方案-Mysql Router
  • 智能参谋部系统架构和业务场景功能实现
  • MCP Server 的 Stdio 与 SSE:两种通信方式的本质差异与技术选型指南
  • leetcode42-接雨水
  • OCR身份证识别(正反面)_个人证照OCR识别_开放API接口使用指南
  • iVX:数字化转型全场景技术革新与生态构建实践
  • 大连理工大学选修课——机器学习笔记(6):决策树
  • JCRQ1河马算法+消融实验!HO-CNN-LSTM-Attention系列四模型多变量时序预测,作者:机器学习之心
  • Linux架构篇、第1章_01架构的介绍HTTP HTTPS 协议全面解析
  • 【Axure教程】增删改饼图
  • PostgreSQL 中 VACUUM FULL 对索引的影响
  • 【TUST“码蹄杯”编程之星】4.30 每日一题
  • 抓取工具Charles配置教程(mac电脑+ios手机)
  • 算法四 习题 1.3
  • Vue 项目中运行 `npm run dev` 时发生的过程
  • 代码随想录算法训练营Day39
  • 数据科学与计算
  • Ecology中拦截jquery.ajax请求接口后的数据
  • 【Linux更新openSSH服务】
  • GNU gettext 快速上手
  • 论文公式根据章节自动编号教程