问题修改
This commit is contained in:
@@ -1,237 +0,0 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -208,85 +208,15 @@ public class WordUtils {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
/* Dispatch.call(doc, "Close", new Variant(-1),new Variant(1),new Variant(true));
|
||||
if (wordApp != null) {
|
||||
wordApp.invoke("Quit", new Variant[]{});
|
||||
}
|
||||
ComThread.Release();*/
|
||||
// 关闭文档
|
||||
// Dispatch.call(doc, "Close", false);
|
||||
// 关闭office
|
||||
// wordApp.invoke("Quit", 0);
|
||||
System.out.println("关闭文档");
|
||||
// if (app != null)
|
||||
// app.invoke("Quit", new Variant[]{});
|
||||
// 如果没有这句话,winword.exe进程将不会关闭
|
||||
// ComThread.Release();
|
||||
}
|
||||
}
|
||||
/*
|
||||
public static void setWaterMark(ActiveXComponent activeWindow,String waterMarkStr)
|
||||
{
|
||||
|
||||
|
||||
// 取得活动窗格对象
|
||||
Dispatch activePan = Dispatch.get(activeWindow, "ActivePane").toDispatch();
|
||||
// 取得视窗对象
|
||||
Dispatch view = Dispatch.get(activePan, "View").toDispatch();
|
||||
Dispatch docSelection=Dispatch.get(activeWindow, "Selection").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));
|
||||
}*/
|
||||
|
||||
public static void main(String[] args) {
|
||||
Map<String, Object> dataMap = new HashMap<String, Object>();
|
||||
String curDate = DateUtils.dateConvertStr(new Date(), "yyyy年MM月dd日");
|
||||
dataMap.put("partyA", "甲方卖出方");
|
||||
dataMap.put("partyB", "乙方买受方");
|
||||
// 图片
|
||||
// dataMap.put("imgStr1", getImageStr("D:\\fileTest\\name.png"));
|
||||
// dataMap.put("imgStr2", getImageStr("D:\\fileTest\\zhang.png"));
|
||||
// 列表
|
||||
Car car1 = new Car("奔驰", "1001", "v10");
|
||||
Car car2 = new Car("宝马", "1002", "v10");
|
||||
|
||||
Reference in New Issue
Block a user