用jacob做word留痕功能

因要做托盘的留痕功能,因此此篇文章做一下探讨,首先从阮航开始看,然后在看金格,最后再来看一下托盘怎么传参的问题

研究阮航留痕

打开一个阮航的文档,从连接上

拿取USERNAME为用户名称

var USERNAME = '<%=user.getName()%>';

是否留痕功能

TANGER_OCX_OBJ.ActiveDocument.TrackRevisions = true;

截图
在这里插入图片描述
这里的用户也是wander
在这里插入图片描述
在这里插入图片描述

研究金格留痕

金格的功能也是类似的,要传一个userName进去

WebOfficeObj.UserName = username;

然后把修定弄成true

WebOfficeObj.WebSetRevision(true,true,true,false);

显示或隐藏痕迹

this.obj.ActiveDocument.ShowRevisions = Show; // 显示痕迹或隐藏

也是设置了vba调用对象

this.WebObject = this.obj; // 设置VBA调用对象

阮航打开的界面,一开始修订默认是开启的,
在这里插入图片描述
点击隐藏痕迹,
在这里插入图片描述
本来是想参考iwebOffice2015的VBA文件
C:\Program Files (x86)\iWebOffice2015\x86
在这里插入图片描述
但发现反编译不到文件,估计是加密了。
金格从这里通过exe加载了

regsvr32.exe "%~dp0X64\StockVBAs.dll"   /s

regsvr32.exe更加看不到内容,看不到源代码,黑盒子操作的确挺麻烦的,想了又想,开源的代码还是很伟大的,大家都可以看到思路。热爱开源,鄙视黑盒子。

看jacob的留痕传参的问题(猜测是调VBA去写的)

针对wps,简单来说,留痕功能是当开启wps,默认开启修订功能,然后状态为最终状态,当点显示痕迹的时候,会变为显示"显示标记的最终状态"
jacob调用vba的参数去控制wps的行为,参考地址见下面的参考篇章

在这里插入图片描述
代码参考如下:

	public void open(String source) throws DocumentOperatorException {
		ActiveXComponent word = null;
		Dispatch documents = null;
		Dispatch document = null;
		try {
			ComThread.InitMTA(true);
			word = new ActiveXComponent("Word.Application");
			Dispatch.put(word.getObject(), "Visible", new Variant(true));

			documents = word.getProperty("Documents").toDispatch();
			//放修订的用户名
			word.setProperty("USERNAME", FileItem.userName);
			document = Dispatch.invoke(
					documents,
					"Open",
					Dispatch.Method,
					new Object[] { source},
					new int[1]).toDispatch();
			Dispatch activeDocument = Dispatch.get(word, "ActiveDocument").toDispatch();
			//打开修订
			Dispatch.put(activeDocument, "TrackRevisions",new Variant(true));
			//默认为最终状态
			Dispatch.put(activeDocument, "ShowRevisions",new Variant(false));
		} catch (Exception e) {
			throw e;
		} finally {
			try {
				if (document != null) {
					document.safeRelease();
					document = null;
				}
				if (documents != null){
					documents.safeRelease();
					documents = null;
				}
					
				if (word != null){
					word.safeRelease();
					word = null;
				}
				ComThread.Release();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

此段代码只要控制好用户名的输入就行了,最后显示的效果图如下:
在这里插入图片描述

参考文章

https://www.iteye.com/blog/men4661273-2097871
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值