`
yangpanwww
  • 浏览: 621288 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

dsoframer.ocx 实现在线的word编辑

阅读更多

关于 dsoframer.ocx 的资料和API 我这里就不多说了。。百度 google 有很多

 

但是都是简单的介绍api 对于刚刚接触的人还是很难入手的。

 

所以我这里主要讲下如何来具体的使用,分享给大家,希望对大家帮助啊:

 

经过几天的研究,嘎嘎。。战果如下:

 


 

 

 

这里说明下 各个文件

dsoframer.ocx

大家都认识吧,微软提供的

 

dsoframer.js

封装了对 dsoframer.ocx 的操作

 

dsoframer.jsp

显示word的业务界面

 

dsoframer.CAB

 

这个是重头戏啊,引用这个文件,

可以在让 dsoframer.ocx 在浏览器中自动下载并注册 当初可弄了老半天的)

 

至于如何签名自己的 ocx,使其下载并注册,网页也有很多资料。

 

我这里也提供一个:http://blog.csdn.net/xjzdr/article/details/5991585 

 

流程都好看。最要命的是 里面的 inf 安装文件别写错了,否则就安装失败了,所以要千万记着。

这里偷偷的告诉你们一个秘密: 我是把别人公司的 CAB 安装解压,让回一步一步的模仿写出来的。。嘎嘎

具体是哪个公司,嘿嘿,,不好说。。秘密!  你们可以拷贝我的就好了啊。。

 

还有一点就是要注意  写版本 FileVersion=2,0,0,0  的时候 是逗号而不是点,不然报错!

 

下面看具体代码 

 

dsoframer.jsp  界面:

<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
String id = "1";
%>
<html>
	<head>
		<title>调查报告</title>
		<script language="javascript" src="dsoframer.js"></script>
		<script type="text/javascript">
			/*用法说明:
			  1,创建 word对象
			  2,设置文件上传url
			  3,在页面加载时,打开word文档,根据是否传人docUrl参数,决定是本地新建,还是从服务器端获取
			  4,在页面关闭时,执行上传操作。
			*/
             var word = new word();
             //决定路径
		     word.setUploadUrl("http://127.0.0.1:8070/word/upload_handle.jsp");
		     
		     var docurl = "";
		     function load(){
		         //方法:openDoc(docName, docUrl)
		         // docName:必填,本地保存的文件名, 也为上传到服务器上时的文件名
		         // docUrl: 填时,为从服务器端获取doc文档的路径, 不填时,表示本地新建doc文档 
		         
		         word.openDoc('1.doc',"http://127.0.0.1:8070/word/upload/1.doc");
		         
		         /**
		          //这里实现读取服务器的模板,并保存到服务器的业务路径中
		         $.post("/ZsytpServlet",{type:"ajaxWord",id:<%=id%>},function(result){
		 			  	var dataObj=eval("("+result+")");//转换为json对象 
		 			  	
		 			  	docurl = dataObj.docurl;
						if(docurl == ""){
							word.openDoc('<%=id%>.doc',"<%=basePath%>/webapps/zsytp/templ/"+dataObj.fhtk+".doc");
						
							document.getElementById('oframe').SetFieldValue("f_name",dataObj.f_name,"");
							document.getElementById('oframe').SetFieldValue("m_name",dataObj.m_name,"");
							document.getElementById('oframe').SetFieldValue("town",dataObj.town,"");
							document.getElementById('oframe').SetFieldValue("f_name1",dataObj.f_name,"");
							document.getElementById('oframe').SetFieldValue("m_name1",dataObj.m_name,"");
							document.getElementById('oframe').SetFieldValue("sqsj",dataObj.sqsj,"");
							document.getElementById('oframe').SetFieldValue("f_name2",dataObj.f_name,"");
							document.getElementById('oframe').SetFieldValue("f_birthday",dataObj.f_birthday,"");
							document.getElementById('oframe').SetFieldValue("f_hjdz",dataObj.f_hjdz,"");
							document.getElementById('oframe').SetFieldValue("m_name2",dataObj.m_name,"");
							document.getElementById('oframe').SetFieldValue("m_birthday",dataObj.m_birthday,"");
							document.getElementById('oframe').SetFieldValue("m_hjdz",dataObj.m_hjdz,"");
						}else{
						//实现读取业务路径的内容,并修改
							word.openDoc('<%=id%>.doc',"<%=basePath%>/webapps/zsytp/word/"+docurl);
						}		
			 	 });
			 	 **/
		         
		     }
		     
		     //为了简化,我定义关闭窗口的时候,保存到服务器上面,并且删除本地的临时文件
		     function unload(){
		         word.saveDoc();
		         word.close();
		     }
		     
		     //给书签赋值
		     function setFileVal(){
		     	document.getElementById('oframe').SetFieldValue("dm","2006-03-16 22:22:22","");
		     }
		     
		     //插入红头文件
		     
		     //等等。。网上都有 API
		     
		      
		     //真正开发的时候,,需要用到的方法,保存文件到服务器上
		     //可以查看里面的 document.getElementById('oframe').HttpAddPostString("id",id); 等向后台穿参数
		     function uploadFile(){
		     	//word.saveDocAndParm('1',docurl);
		     }
		</script>
	</head>
	<body onload="load();" onunload="unload();">  
	   <input  type="button" value="保存文件到服务器" onclick="uploadFile()" >
	   <hr/>
       <!-- 
       <object classid="clsid:00460182-9E5E-11d5-B7C8-B8269041DD57" codebase="dsoframer.ocx" id="oframe" width="100%" height="100%">
         <param name="BorderStyle" value="1">
         <param name="TitlebarColor" value="52479">
         <param name="TitlebarTextColor" value="0">  
       </object>
      -->
      <object classid="clsid:00460182-9E5E-11d5-B7C8-B8269041DD57" codebase="dsoframer.CAB#Version=2.0.0.0" id="oframe" width="100%" height="100%">
	         <param name="BorderStyle" value="1">
	         <param name="TitlebarColor" value="52479">
	         <param name="TitlebarTextColor" value="0">
       </object> 
	</body>
</html>

 

  
 upload_handle.jsp 上传的业务代码。。可以自己修改吧。。嘎嘎

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="java.io.File"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.io.BufferedInputStream"%>
<%@page import="java.io.BufferedOutputStream"%>
<%@page import="java.io.FileOutputStream"%>
<%@page import="org.apache.commons.fileupload.util.Streams"%>
<%
	try{
		// 解析 request,判断是否有上传文件   
		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
		System.out.println("---------"+isMultipart);
		if (isMultipart) {
	
			Date date = new Date();//获取当前时间
			SimpleDateFormat sdfFolder = new SimpleDateFormat("yyMM");
			String fileRealPath = "";//文件存放真实地址
			
			String fileRealResistPath = "";//文件存放真实相对路径
			String id="1";//id
			String docUrl=""; //路径
			String firstFileName="";
			
			String yyMM = sdfFolder.format(date);
			
			//上传文件夹绝对路径
			String physicsPath = request.getRealPath("")
					+ "\\upload\\" + yyMM + "\\";
	
			File file = new File(physicsPath);
			if (!file.isDirectory()) {
				file.mkdir();
			}
	
			// 创建磁盘工厂,利用构造器实现内存数据储存量和临时储存路径 
			DiskFileItemFactory factory = new DiskFileItemFactory();
			// 设置最多只允许在内存中存储的数据,单位:字节   
			// factory.setSizeThreshold(4096);   
			// 设置文件临时存储路径   
			// factory.setRepository(new File("D:\\Temp"));   
			// 产生一新的文件上传处理程式   
			ServletFileUpload upload = new ServletFileUpload(factory);
			// 设置路径、文件名的字符集   
			upload.setHeaderEncoding("UTF-8");
			// 设置允许用户上传文件大小,单位:字节   
			upload.setSizeMax(-1);
			//upload.setSizeMax(1024 * 1024);
			// 解析请求,开始读取数据   
			// Iterator<FileItem> iter = (Iterator<FileItem>) upload.getItemIterator(request);   
			// 得到所有的表单域,它们目前都被当作FileItem  
			BufferedInputStream in = null;
			List fileItems = upload.parseRequest(request);
			// 依次处理请求   
			Iterator iter = fileItems.iterator();
			while (iter.hasNext()) {
				FileItem item = (FileItem) iter.next();
				if (item.isFormField()) {
					// 如果item是正常的表单域   
					String name = item.getFieldName();
					String value = item.getString("UTF-8");
					if(name.equals("id"))
						id=value;//附件标题赋值
					else if(name.equals("docUrl"))
						docUrl=value;//附件ID赋值
				} else {
					// 如果item是文件上传表单域   
					// 获得文件名及路径   
					String fileName = item.getName();
					if (fileName != null) {
						firstFileName=item.getName().substring(item.getName().lastIndexOf("\\")+1);
						in = new BufferedInputStream(item.getInputStream());// 获得文件输入流
					}
				}
			}
			String formatName = firstFileName.substring(firstFileName.lastIndexOf("."));//获取文件后缀名	
			if(docUrl != null && !"".equals(docUrl.trim())){
				fileRealPath = request.getRealPath("") + "\\word\\" + docUrl;//文件存放真实地址
			}else{
				fileRealPath = physicsPath + id+ formatName;//文件存放真实地址
				docUrl = yyMM + "/" + id + formatName;
			}
			BufferedOutputStream outStream = new BufferedOutputStream(new FileOutputStream(new File(fileRealPath)));// 获得文件输出流
			Streams.copy(in, outStream, true);// 开始把文件写到你指定的上传文件夹			
	 
			//上传成功,则插入数据库
			if (new File(fileRealPath).exists()) {
				//虚拟路径赋值
				fileRealResistPath=sdfFolder.format(date)+"/"+fileRealPath.substring(fileRealPath.lastIndexOf("\\")+1);
				//DB db=new DB();
				//System.out.println("!!!"+(String) session.getAttribute("fpsssn")+"&&"+v07.can.myname(session));
				//int count = db.executeUpdate("update   zy_zsytp  set  docurl ='"+docUrl+"'  where  id ='"+id+"'");
				//if(count>0){
				//	response.setContentType("text/html;charset=UTF-8");
				//	out.print("<script>alert('上传成功!');</script>");
				//}
				//db.destroy();
				
				//保存到数据库
			}
		}
	}catch(Exception e){
		e.printStackTrace();
		//response.setContentType("text/html;charset=UTF-8");
		//out.print("<script>window.alert('上传失败!文件大小超过1MB!');</script>");
	}
	
%>

 

效果图:



 

 

哈哈。。下面就是  demo 咯。。。

 

本人的是 word 2003 。。至于 2007 我没测试过啊。。。你们看着办办。。。。

 

  • 大小: 27.9 KB
  • 大小: 81.9 KB
分享到:
评论
19 楼 wxfcgzht 2016-04-26  
   
qq_26333595 写道
我下载部署运行后提示:
1、TypeError: word.saveDoc is not a function
2、ReferenceError: ActiveXObject is not defined
   fso = new ActiveXObject("Scripting.FileSystemObject");
3、TypeError: word.openDoc is not a function
   word.openDoc('1.doc',"http://localhost:8080/word/upload/1.doc");

到家都没有遇到过这个问题吗  

    
遇到了,请问你是怎么解决的?谁知道给说下。
18 楼 qq_26333595 2016-03-31  
我下载部署运行后提示:
1、TypeError: word.saveDoc is not a function
2、ReferenceError: ActiveXObject is not defined
   fso = new ActiveXObject("Scripting.FileSystemObject");
3、TypeError: word.openDoc is not a function
   word.openDoc('1.doc',"http://localhost:8080/word/upload/1.doc");

到家都没有遇到过这个问题吗  
17 楼 jatqiq 2015-11-25  
楼主,问一下,现在这个dsoframer.ocx支持office 2010吗?有没有最新版了??急需。
16 楼 yangpanwww 2015-11-03  
kakarottoz 写道
楼主有个问题请教下,使用dsoframer.ocx必须要求本机安装有office word吗?


服务器 必须安装。。本机不需要。。。
15 楼 kakarottoz 2015-10-19  
楼主有个问题请教下,使用dsoframer.ocx必须要求本机安装有office word吗?
14 楼 u010702861 2015-08-06  
楼主你好,你的这个demo中的“保存文件到服务器”的功能可以用吗?
13 楼 cl13142006 2014-06-20  
下载完之后,在新创建区域写值,上传磁盘是对的,上传服务器为0kb
12 楼 nitaishan 2014-01-12  
先下载来试一下。
11 楼 yangpanwww 2013-12-27  
itoao 写道
请问一下楼主,这浏览器访问的时候安装不上啊,是不是还要再弄一个证书啊?


不需要的,已经弄成 cba 包,可以自动下载安装的....如果不可以,你先手动注册试试看
10 楼 itoao 2013-12-25  
请问一下楼主,这浏览器访问的时候安装不上啊,是不是还要再弄一个证书啊?
9 楼 lghjbxc 2013-07-01  
楼主。那个dsoframer.js怎么不起作用的,写法应该也不对,你确定你的项目能跑起来?
8 楼 hufangxian 2013-06-06  

} else {
// 如果item是文件上传表单域  
// 获得文件名及路径  
String fileName = item.getName();
if (fileName != null) {
firstFileName=item.getName().substring(item.getName().lastIndexOf("\\")+1);
in = new BufferedInputStream(item.getInputStream());// 获得文件输入流
}
}         
}

我的问题在于最后获取的文件输入流中没有数据。

我的操作系统是win7旗舰版
7 楼 yangpanwww 2013-06-06  
hufangxian 写道
while (iter.hasNext()) {
num++;
System.out.println("num:"+num);
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
// 如果item是正常的表单域  
String name = item.getFieldName();
String value = item.getString("UTF-8");
if(name.equals("id")){
id=value;//附件标题赋值

}

else if(name.equals("docUrl")){
docUrl=value;//附件ID赋值

}

} else {
// 如果item是文件上传表单域  
// 获得文件名及路径  
String fileName = item.getName();
if (fileName != null) {
firstFileName=item.getName().substring(item.getName().lastIndexOf("\\")+1);
in = new BufferedInputStream(item.getInputStream());// 获得文件输入流
}
}         
}

我的问题在于最后获取的文件输入流中没有数据。



看看你的操作系统,如果是普通的PC XP 系统,应该是可以的。。如果是service系统。。是传不上去的。。。具体原因也没弄清楚我。。。
6 楼 hufangxian 2013-06-04  
while (iter.hasNext()) {
num++;
System.out.println("num:"+num);
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
// 如果item是正常的表单域  
String name = item.getFieldName();
String value = item.getString("UTF-8");
if(name.equals("id")){
id=value;//附件标题赋值

}

else if(name.equals("docUrl")){
docUrl=value;//附件ID赋值

}

} else {
// 如果item是文件上传表单域  
// 获得文件名及路径  
String fileName = item.getName();
if (fileName != null) {
firstFileName=item.getName().substring(item.getName().lastIndexOf("\\")+1);
in = new BufferedInputStream(item.getInputStream());// 获得文件输入流
}
}         
}

我的问题在于最后获取的文件输入流中没有数据。
5 楼 yangpanwww 2013-05-24  
cenjun615 写道
请问,我修改服务器上文件,保存后,参数传递不到后台是怎么问题,request中没有值,ServletFileUpload.isMultipartContent(request) 也为false



嗯。。如果你的服务器的操作系统 是 service 版本的。。好像是不行..普通的PC XP 系统好像是可以。。。这个我也发现过。。没找出问题所在。。也许是服务器的操作系统的安全策略比较高吧。。。
4 楼 cenjun615 2013-05-22  
请问,我修改服务器上文件,保存后,参数传递不到后台是怎么问题,request中没有值,ServletFileUpload.isMultipartContent(request) 也为false
3 楼 yangpanwww 2013-03-30  
liulangdeyu999 写道
楼主,那个dsoframer.js怎么不起作用, 要是把js写到dsoframer.jsp页面中就好用了,这个是什么情况



  

估计是你的自动注册失败了。。要不你手动注册下
2 楼 liulangdeyu999 2013-02-28  
楼主,那个dsoframer.js怎么不起作用, 要是把js写到dsoframer.jsp页面中就好用了,这个是什么情况
1 楼 liulangdeyu999 2013-02-27  
楼主,我这个程序运行起来 什么也没看到啊,什么情况

相关推荐

    DsoFramer.ocx接口及说明

    word在线编辑,加密,书签,等2. HRESULT Open([in] VARIANT Document, [in, optional] VARIANT ReadOnly, [in, optional] VARIANT ProgId, [in, optional] VARIANT WebUsername, [in, optional] VARIANT ...

    dsoframer.ocx源码与列子

    dsoframer.ocx是由微软官方推出的一款在线编辑word、excel、powerpoint的activeX控件,含使用列子与源码

    dsoframer2.3.ocx.rar

    DSOFramer在线word编辑,ocx控件可以嵌入桌面软件和web网页,文件包含dsoframer.ocx 2.3.0.2和dsoframer.ocx 2.2.1.2两个合集

    DSOframer.ocx

    office控件,能在程序中实现word、excel、powerpoint等office文件的显示、编辑等功能,支持c#、c++、vb等语言。 使用前需先注册dsoframer.ocx控件,在未注册的电脑上程序可能无法正常运行。

    dsoframer.ocx

    dsoframer是微软提供一款开源的用于在线编辑、调用Word、 Excel 、PowerPoint等的ActiveX控件。国内很多著名的OA中间件,电子印章,签名留痕等大多数是依此改进而来的。 该dsoframer.ocx的版本号为1.3。使用方法见包...

    dsoframer.ocx使用指南

    使用NTKO Office文档控件,能够在浏览器窗口中直接编辑Word,Excel等Office文档并保存到Web服务器。实现文档和电子表格的统一管理。同时支持痕迹保留,手写签名,电子盖章等办公自动化系统必备的功能。是OA系统开发的...

    DSOFramer.ocx

    DSOframer 是微软提供一款开源的用于在线编辑 Word、 Excel 、PowerPoint 的 ActiveX 控件。国内很多著名的 OA 中间件,电子印章,签名留痕等大多数是依此改进而来的。 该控件为修改后的DSOFramer,经验证,解决了...

    DsoFramer V2.3.0.2

    dsoframer.ocx 2.3.0.0 Release comments: 1、增加对OFFICE2007的支持 2、删除2个文件:msword9.h/msword9.cpp ///////////////////////////////////////////////////// Issued by jiangzuixian on sep 19,2009 ...

    dsoframer.ocx 2.3.0.0(源码,支持Office2007)

    dsoframer.ocx 在线文档编辑控件源码,OA开发必备,支持Office2007

    DSOframer嵌入OFFICE二次开发.rar_DsoFramer_dsoframe_dsoframer.ocx_web o

    DSOFramer在线word编辑,ocx控件可以嵌入桌面软件和web网页

    DSOFramer-For-office2016.zip

    DSOframer 是微软提供一款开源的用于在线编辑 Word、 Excel 、PowerPoint 的 ActiveX 控件。 https://github.com/stone0090/OfficeTools.OnlineEditWord 这边版本不更新了,未支持Office2016, 网上也找了好久,这个...

    DSOframer操作office实例.zip

    DSOframer操作office实例.dsoframer是微软提供一款开源的用于在线编辑、调用Word、 Excel 、PowerPoint等的ActiveX控件。国内很多著名的OA中间件,电子印章,签名留痕等大多数是依此改进而来的。

    基于activex的dsoFramer在线编辑控件加证书

    最新的dsoframer.ocx打包cab加证书步骤详解,支持打开服务器端word、在线编辑、正常保存,不会出现保存空文档问题。

    Word编辑控件(支持在线保存)v2.3.0.1修正版

    修正微软Word编辑控件Dsoframer.ocx 解决Web在线保存后导致的IE8浏览器崩溃的BUG 提供源码

    源码DsoFramerOffice:在桌面程序(winform)中内嵌office功能的Demo

    采用vs2017+C#进行开发,调用dsoframer.ocx控件(ActiveX),实现在winform桌面程序中“内嵌office”的功能。能够对办公文件(Excel/ Word/ PPT/ Visio)进行常见的查看、编辑、保存等操作。对于有相关业务需求的同仁...

    DSO Framer ActiveX

    控件 (Dsoframer.ocx) 轻量和灵活的并提供开发人员有关使用 Office 自定义解决方案中新的目标。 该控件旨在处理特定的问题使用难,一个非Exchange 顶级主机窗口和提供的 ActiveX 文档作为一个起点构建您自己的...

    推荐免费好用的Web在线Office(Word)编辑控件

    s += "classid=clsid:00460182-9E5E-11D5-B7C8-B8269041DD57 codeBase=DSOFramer.ocx#Version=2,2,0,0' &gt;" s += "&lt;/OBJECT&gt;" document.write(s) ----------------------------------------------------------------...

    DSOFramer2.3源码

    已编译过的DSOFramer2.3源码,含OCX文件(在Debug目录下),支持Excel,Word和PPT文件的在线编辑和上传到服务器

Global site tag (gtag.js) - Google Analytics