1. 程式人生 > >pageoffice 儲存修改痕跡列表(Java版)

pageoffice 儲存修改痕跡列表(Java版)

在oa辦公流程過程中,一份檔案會經過若干人的手中,也就意味著檔案會經歷多次修改,一次一次的修改,就應當記錄誰修改了哪些內容,因此,檔案的修改痕跡記錄就相當有必要。 在這裡為了區別於office文件自帶的修改痕跡列表,我自己添加了一個痕跡列表,使用起來更加方便。 主要用js方法控制記錄,程式碼如下(Word.jsp):


    <%@ page language="java"
    	import="java.util.*,java.awt.*,com.zhuozhengsoft.pageoffice.*,com.zhuozhengsoft.pageoffice.wordwriter.*"
    	pageEncoding="utf-8"%>
    <%
    	//******************************卓正PageOffice元件的使用*******************************
    	PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request);
    	poCtrl1.setServerPage(request.getContextPath()+"/poserver.zz"); //此行必須
    
    	//設定頁面儲存
    	//SaveFile.jsp頁面在pageoffice官網有
    	poCtrl.setSaveFilePage("SaveFile.jsp");
    	
    	//隱藏選單欄
    	poCtrl1.setMenubar(false);
    	poCtrl1.webOpen(request.getParameter("fileName"), OpenModeType.docNormalEdit, request.getParameter("user"));
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    	<head>
    		<title></title>
    	</head>
    <style>
    *{
    	margin:0;
    }
    #ul_Comments{
    	padding: 0;
    	border:none;
    	margin:0;
    }
    #ul_Comments li{
        background: #EDF1F7;
        border-bottom: 1px solid #eaeaea;
    }
    #ul_Comments li a{
        color: #97999D;
    	display: block;
    	padding:5px 0;
    	padding-left:8px;
    	font-size:16px;
    }
    #ul_Comments li a:hover{
    	color:#fff;
    	background:#11A5A9;
    }
    #Div_Comments{
    	position:absolute;
    	width:20%;
    	height:100%;
    	min-width:185px;
    	overflow: scroll;
    	overflow-x:hidden;
    }
    #office_box{
    	position:absolute;
    	width:80%;
    	height:100%; 
    	left:20%;
    	min-width:804px; 
    	min-height:700px; 
    }
    </style>
    <script type="text/javascript">
    
        function Save() {
            document.getElementById("PageOfficeCtrl1").WebSave();
            refresh_click();
        }
        
        function AfterDocumentOpened() {
            refreshList();
        }
        
          //獲取當前痕跡列表
         function refreshList() {
            var i;
            document.getElementById("ul_Comments").innerHTML = "";
            for (i = 1; i <= document.getElementById("PageOfficeCtrl1").Document.Revisions.Count; i++) {
                var str = "";
                str = str + document.getElementById("PageOfficeCtrl1").Document.Revisions.Item(i).Author;
                var  revisionDate=document.getElementById("PageOfficeCtrl1").Document.Revisions.Item(i).Date;
                 //轉換為標準時間
                 str=str+"<br/>"+dateFormat(revisionDate,"yyyy-MM-dd HH:mm:ss");
                  
                if (document.getElementById("PageOfficeCtrl1").Document.Revisions.Item(i).Type == "1") {
                    str = str+"<br/>" + ' 插入:' + document.getElementById("PageOfficeCtrl1").Document.Revisions.Item(i).Range.Text;
                }
                else if (document.getElementById("PageOfficeCtrl1").Document.Revisions.Item(i).Type == "2") {
                    str = str+"<br/>" + ' 刪除:' + document.getElementById("PageOfficeCtrl1").Document.Revisions.Item(i).Range.Text;
                }
                else {
                    str = str+"<br/>" + ' 調整格式或樣式。';
                }
                document.getElementById("ul_Comments").innerHTML += "<li><a href='#' onclick='goToRevision(" + i + ")'>" + str + "</a></li>"
            }
    
        }
         //GMT時間格式轉換為CST
          dateFormat = function (date, format) {
            date = new Date(date); 
            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 goToRevision(index)
        {
         var sMac = "Sub myfunc() " + "\r\n"
                     + "ActiveDocument.Revisions.Item("+index+").Range.Select " + "\r\n"
                     + "End Sub ";
    
         document.getElementById("PageOfficeCtrl1").RunMacro("myfunc", sMac);
         
        }
    
        //重新整理列表
       function refresh_click(){
    		refreshList();    
    	}
    </script>
    	<body style="width:100%; height:100%; position: absolute;">
        <div style="width:auto; height:100%;">
           <div id="Div_Comments">
    	        <h3 style="text-align: center; font-style: '微軟雅黑'; font-weight: normal; margin-bottom:8px;">痕跡列表</h3>
    	        <a href="javascript:;" name="refresh" onclick=" return refresh_click()" style="float: right; margin:0 6px 6px 0;">重新整理</a>
    	        <div style="clear: both;"></div>
    	        <ul id="ul_Comments">
    	            
    	        </ul>
           </div>
           
    		<div id="office_box">
    		 <%=poCtrl1.getHtmlCode("PageOfficeCtrl1")%>
    		</div>
    		
        </div>
        <div style="clear: both;"></div>
    </body>
    </html>

效果圖如下: 在這裡插入圖片描述 圖片左側即是痕跡列表,樣式可以自行修改。