
2 changed files with 384 additions and 2 deletions
@ -0,0 +1,237 @@ |
|||
package com.yxt.common.base.utils; |
|||
|
|||
import com.jacob.activeX.ActiveXComponent; |
|||
import com.jacob.com.ComThread; |
|||
import com.jacob.com.Dispatch; |
|||
import com.jacob.com.Variant; |
|||
|
|||
public class WordObj { |
|||
public WordObj() |
|||
{ |
|||
} |
|||
|
|||
private static WordObj instance; |
|||
|
|||
private Dispatch doc = null; |
|||
|
|||
private Dispatch activeWindow = null; |
|||
|
|||
private Dispatch docSelection = null; |
|||
|
|||
private Dispatch wrdDocs = null; |
|||
|
|||
private String fileName; |
|||
|
|||
private ActiveXComponent wrdCom; |
|||
|
|||
/** |
|||
* 获取Word操作静态实例对象 |
|||
* |
|||
* @return 报表汇总业务操作 |
|||
*/ |
|||
public final static synchronized WordObj getInstance() |
|||
{ |
|||
if (instance == null) |
|||
instance = new WordObj(); |
|||
return instance; |
|||
|
|||
} |
|||
|
|||
/** |
|||
* 初始化Word对象 |
|||
* |
|||
* @return 是否初始化成功 |
|||
*/ |
|||
public boolean initWordObj() |
|||
{ |
|||
boolean retFlag = false; |
|||
ComThread.InitSTA();// 初始化com的线程,非常重要!!使用结束后要调用 realease方法
|
|||
wrdCom = new ActiveXComponent("Word.Application"); |
|||
try |
|||
{ |
|||
// 返回wrdCom.Documents的Dispatch
|
|||
wrdDocs = wrdCom.getProperty("Documents").toDispatch(); |
|||
wrdCom.setProperty("Visible", new Variant(true)); |
|||
|
|||
retFlag = true; |
|||
} |
|||
catch (Exception e) |
|||
{ |
|||
retFlag = false; |
|||
e.printStackTrace(); |
|||
} |
|||
return retFlag; |
|||
} |
|||
|
|||
/** |
|||
* 创建一个新的word文档 |
|||
* |
|||
*/ |
|||
|
|||
public void createNewDocument() |
|||
{ |
|||
doc = Dispatch.call(wrdDocs, "Add").toDispatch(); |
|||
docSelection = Dispatch.get(wrdCom, "Selection").toDispatch(); |
|||
|
|||
} |
|||
|
|||
/** |
|||
* 取得活动窗体对象 |
|||
* |
|||
*/ |
|||
public void getActiveWindow() |
|||
{ |
|||
// 取得活动窗体对象
|
|||
activeWindow = wrdCom.getProperty("ActiveWindow").toDispatch(); |
|||
|
|||
} |
|||
|
|||
/** |
|||
* 打开一个已存在的文档 |
|||
* |
|||
* @param docPath |
|||
*/ |
|||
|
|||
public void openDocument(String docPath) |
|||
{ |
|||
if (this.doc != null) |
|||
{ |
|||
this.closeDocument(); |
|||
} |
|||
doc = Dispatch.call(wrdDocs, "Open", docPath).toDispatch(); |
|||
docSelection = Dispatch.get(wrdCom, "Selection").toDispatch(); |
|||
} |
|||
|
|||
/** |
|||
* 关闭当前word文档 |
|||
* |
|||
*/ |
|||
public void closeDocument() |
|||
{ |
|||
if (doc != null) |
|||
{ |
|||
Dispatch.call(doc, "Save"); |
|||
Dispatch.call(doc, "Close", new Variant(0)); |
|||
doc = null; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 文档设置水印 |
|||
* |
|||
* @param waterMarkStr 水印字符串 |
|||
*/ |
|||
public void setWaterMark(String waterMarkStr) |
|||
{ |
|||
// 取得活动窗格对象
|
|||
Dispatch activePan = Dispatch.get(activeWindow, "ActivePane") |
|||
.toDispatch(); |
|||
// 取得视窗对象
|
|||
Dispatch view = Dispatch.get(activePan, "View").toDispatch(); |
|||
//输入页眉内容
|
|||
Dispatch.put(view, "SeekView", new Variant(9)); |
|||
Dispatch headfooter = Dispatch.get(docSelection, "HeaderFooter") |
|||
.toDispatch(); |
|||
//取得图形对象
|
|||
Dispatch shapes = Dispatch.get(headfooter, "Shapes").toDispatch(); |
|||
//给文档全部加上水印
|
|||
Dispatch selection = Dispatch.call(shapes, "AddTextEffect", |
|||
new Variant(9), waterMarkStr, "宋体", new Variant(1), |
|||
new Variant(false), new Variant(false), new Variant(0), |
|||
new Variant(0)).toDispatch(); |
|||
Dispatch.call(selection, "Select"); |
|||
//设置水印参数
|
|||
Dispatch shapeRange = Dispatch.get(docSelection, "ShapeRange") |
|||
.toDispatch(); |
|||
Dispatch.put(shapeRange, "Name", "PowerPlusWaterMarkObject1"); |
|||
Dispatch textEffect = Dispatch.get(shapeRange, "TextEffect").toDispatch(); |
|||
Dispatch.put(textEffect, "NormalizedHeight", new Boolean(false)); |
|||
Dispatch line = Dispatch.get(shapeRange, "Line").toDispatch(); |
|||
Dispatch.put(line, "Visible", new Boolean(false)); |
|||
Dispatch fill = Dispatch.get(shapeRange, "Fill").toDispatch(); |
|||
Dispatch.put(fill, "Visible", new Boolean(true)); |
|||
//设置水印透明度
|
|||
Dispatch.put(fill, "Transparency", new Variant(0.5)); |
|||
Dispatch foreColor = Dispatch.get(fill, "ForeColor").toDispatch(); |
|||
//设置水印颜色
|
|||
Dispatch.put(foreColor, "RGB", new Variant(16711680)); |
|||
Dispatch.call(fill, "Solid"); |
|||
//设置水印旋转
|
|||
Dispatch.put(shapeRange, "Rotation", new Variant(315)); |
|||
Dispatch.put(shapeRange, "LockAspectRatio", new Boolean(true)); |
|||
Dispatch.put(shapeRange, "Height", new Variant(117.0709)); |
|||
Dispatch.put(shapeRange, "Width", new Variant(468.2835)); |
|||
Dispatch.put(shapeRange, "Left", new Variant(-999995)); |
|||
Dispatch.put(shapeRange, "Top", new Variant(-999995)); |
|||
Dispatch wrapFormat = Dispatch.get(shapeRange, "WrapFormat").toDispatch(); |
|||
//是否允许交叠
|
|||
Dispatch.put(wrapFormat, "AllowOverlap", new Variant(true)); |
|||
Dispatch.put(wrapFormat, "Side", new Variant(3)); |
|||
Dispatch.put(wrapFormat, "Type", new Variant(3)); |
|||
Dispatch.put(shapeRange, "RelativeHorizontalPosition", new Variant(0)); |
|||
Dispatch.put(shapeRange, "RelativeVerticalPosition", new Variant(0)); |
|||
Dispatch.put(view, "SeekView", new Variant(0)); |
|||
} |
|||
|
|||
|
|||
|
|||
/** |
|||
* 关闭Word资源 |
|||
* |
|||
* |
|||
*/ |
|||
public void closeWordObj() |
|||
{ |
|||
|
|||
// 关闭word文件
|
|||
wrdCom.invoke("Quit", new Variant[] {}); |
|||
// 释放com线程。根据jacob的帮助文档,com的线程回收不由java的垃圾回收器处理
|
|||
ComThread.Release(); |
|||
} |
|||
|
|||
/** |
|||
* 得到文件名 |
|||
* |
|||
* @return . |
|||
*/ |
|||
public String getFileName() |
|||
{ |
|||
return fileName; |
|||
} |
|||
|
|||
/** |
|||
* 设置文件名 |
|||
* |
|||
* @param fileName . |
|||
*/ |
|||
public void setFileName(String fileName) |
|||
{ |
|||
this.fileName = fileName; |
|||
} |
|||
|
|||
/** |
|||
* 测试功能 |
|||
* |
|||
*/ |
|||
public static void main(String[] argv) |
|||
{ |
|||
WordObj d = WordObj.getInstance(); |
|||
try |
|||
{ |
|||
if (d.initWordObj()) |
|||
{ |
|||
d.createNewDocument(); |
|||
d.getActiveWindow(); |
|||
d.setWaterMark("HEllo"); |
|||
// d.closeWordObj();
|
|||
} |
|||
else |
|||
System.out.println("初始化Word读写对象失败!"); |
|||
} |
|||
catch (Exception e) |
|||
{ |
|||
d.closeWordObj(); |
|||
} |
|||
} |
|||
|
|||
} |
Loading…
Reference in new issue