importcom.jacob.activeX.ActiveXComponent;importcom.jacob.com.Dispatch;importcom.jacob.com.Variant;public classWordUtils {//word运行程序对象
privateActiveXComponent word;//所有word文档集合
privateDispatch documents;//word文档
privateDispatch doc;//选定的范围或插入点
privateDispatch selection;//保存退出
private booleansaveOnExit;public WordUtils(booleanvisible) {
word= new ActiveXComponent("Word.Application");
word.setProperty("Visible", newVariant(visible));
documents= word.getProperty("Documents").toDispatch();
}/*** 设置退出时参数
*
*@paramsaveOnExit
* boolean true-退出时保存文件,false-退出时不保存文件*/
public void setSaveOnExit(booleansaveOnExit) {this.saveOnExit =saveOnExit;
}/*** 创建一个新的word文档*/
public voidcreateNewDocument() {
doc= Dispatch.call(documents, "Add").toDispatch();
selection= Dispatch.get(word, "Selection").toDispatch();
}/*** 打开一个已经存在的word文档
*
*@paramdocPath*/
public voidopenDocument(String docPath) {
doc= Dispatch.call(documents, "Open", docPath).toDispatch();
selection= Dispatch.get(word, "Selection").toDispatch();
}/*** 打开一个有密码保护的word文档
*@paramdocPath
*@parampassword*/
public voidopenDocument(String docPath, String password) {
doc= Dispatch.call(documents, "Open", docPath).toDispatch();
unProtect(password);
selection= Dispatch.get(word, "Selection").toDispatch();
}/*** 去掉密码保护
*@parampassword*/
public voidunProtect(String password){try{
String protectionType= Dispatch.get(doc, "ProtectionType").toString();if(!"-1".equals(protectionType)){
Dispatch.call(doc,"Unprotect", password);
}
}catch(Exception e){
e.printStackTrace();
}
}/*** 添加密码保护
*@parampassword*/
public voidprotect(String password){
String protectionType= Dispatch.get(doc, "ProtectionType").toString();if("-1".equals(protectionType)){
Dispatch.call(doc,"Protect",new Object[]{new Variant(3), new Variant(true), password});
}
}/*** 显示审阅的最终状态*/
public voidshowFinalState(){
Dispatch.call(doc,"AcceptAllRevisionsShown");
}/*** 打印预览:*/
public voidprintpreview() {
Dispatch.call(doc,"PrintPreView");
}/*** 打印*/
public voidprint(){
Dispatch.call(doc,"PrintOut");
}public voidprint(String printerName) {
word.setProperty("ActivePrinter", newVariant(printerName));
print();
}/*** 指定打印机名称和打印输出工作名称
*@paramprinterName
*@paramoutputName*/
public voidprint(String printerName, String outputName){
word.setProperty("ActivePrinter", newVariant(printerName));
Dispatch.call(doc,"PrintOut", new Variant[]{new Variant(false), new Variant(false), new Variant(0), newVariant(outputName)});
}/*** 把选定的内容或插入点向上移动
*
*@parampos*/
public void moveUp(intpos) {
move("MoveUp", pos);
}/*** 把选定的内容或者插入点向下移动
*
*@parampos*/
public void moveDown(intpos) {
move("MoveDown", pos);
}/*** 把选定的内容或者插入点向左移动
*
*@parampos*/
public void moveLeft(intpos) {
move("MoveLeft", pos);
}/*** 把选定的内容或者插入点向右移动
*
*@parampos*/
public void moveRight(intpos) {
move("MoveRight", pos);
}/*** 把选定的内容或者插入点向右移动*/
public voidmoveRight() {
Dispatch.call(getSelection(),"MoveRight");
}/*** 把选定的内容或者插入点向指定的方向移动
*@paramactionName
*@parampos*/
private void move(String actionName, intpos) {for (int i = 0; i < pos; i++)
Dispatch.call(getSelection(), actionName);
}/*** 把插入点移动到文件首位置*/
public voidmoveStart(){
Dispatch.call(getSelection(),"HomeKey", new Variant(6));
}/*** 把插入点移动到文件末尾位置*/
public voidmoveEnd(){
Dispatch.call(getSelection(),"EndKey", new Variant(6));
}/*** 插入换页符*/
public voidnewPage(){
Dispatch.call(getSelection(),"InsertBreak");
}public voidnextPage(){
moveEnd();
moveDown(1);
}public intgetPageCount(){
Dispatch selection= Dispatch.get(word, "Selection").toDispatch();return Dispatch.call(selection,"information", new Variant(4)).getInt();
}/*** 获取当前的选定的内容或者插入点
*@return当前的选定的内容或者插入点*/
publicDispatch getSelection(){if (selection == null)
selection= Dispatch.get(word, "Selection").toDispatch();returnselection;
}/*** 从选定内容或插入点开始查找文本
*@paramfindText 要查找的文本
*@returnboolean true-查找到并选中该文本,false-未查找到文本*/
public booleanfind(String findText){if(findText == null || findText.equals("")){return false;
}//从selection所在位置开始查询
Dispatch find = Dispatch.call(getSelection(), "Find").toDispatch();//设置要查找的内容
Dispatch.put(find, "Text", findText);//向前查找
Dispatch.put(find, "Forward", "True");//设置格式
Dispatch.put(find, "Format", "True");//大小写匹配
Dispatch.put(find, "MatchCase", "True");//全字匹配
Dispatch.put(find, "MatchWholeWord", "True");//查找并选中
return Dispatch.call(find, "Execute").getBoolean();
}/*** 查找并替换文字
*@paramfindText
*@paramnewText
*@returnboolean true-查找到并替换该文本,false-未查找到文本*/
public booleanreplaceText(String findText, String newText){
moveStart();if (!find(findText))return false;
Dispatch.put(getSelection(),"Text", newText);return true;
}/*** 进入页眉视图*/
public voidheaderView(){//取得活动窗体对象
Dispatch ActiveWindow = word.getProperty( "ActiveWindow").toDispatch();//取得活动窗格对象
Dispatch ActivePane = Dispatch.get(ActiveWindow, "ActivePane").toDispatch();//取得视窗对象
Dispatch view = Dispatch.get(ActivePane, "View").toDispatch();
Dispatch.put(view,"SeekView", "9");
}/*** 进入页脚视图*/
public voidfooterView(){//取得活动窗体对象
Dispatch ActiveWindow = word.getProperty( "ActiveWindow").toDispatch();//取得活动窗格对象
Dispatch ActivePane = Dispatch.get(ActiveWindow, "ActivePane").toDispatch();//取得视窗对象
Dispatch view = Dispatch.get(ActivePane, "View").toDispatch();
Dispatch.put(view,"SeekView", "10");
}/*** 进入普通视图*/
public voidpageView(){//取得活动窗体对象
Dispatch ActiveWindow = word.getProperty( "ActiveWindow").toDispatch();//取得活动窗格对象
Dispatch ActivePane = Dispatch.get(ActiveWindow, "ActivePane").toDispatch();//取得视窗对象
Dispatch view = Dispatch.get(ActivePane, "View").toDispatch();
Dispatch.put(view,"SeekView", new Variant(0));//普通视图
}/*** 全局替换文本
*@paramfindText
*@paramnewText*/
public voidreplaceAllText(String findText, String newText){int count =getPageCount();for(int i = 0; i < count; i++){
headerView();while(find(findText)){
Dispatch.put(getSelection(),"Text", newText);
moveEnd();
}
footerView();while(find(findText)){
Dispatch.put(getSelection(),"Text", newText);
moveStart();
}
pageView();
moveStart();while(find(findText)){
Dispatch.put(getSelection(),"Text", newText);
moveStart();
}
nextPage();
}
}/*** 全局替换文本
*@paramfindText
*@paramnewText*/
public void replaceAllText(String findText, String newText, String fontName, intsize){/****插入页眉页脚*****/
//取得活动窗体对象
Dispatch ActiveWindow = word.getProperty( "ActiveWindow").toDispatch();//取得活动窗格对象
Dispatch ActivePane = Dispatch.get(ActiveWindow, "ActivePane").toDispatch();//取得视窗对象
Dispatch view = Dispatch.get(ActivePane, "View").toDispatch();/****设置页眉*****/Dispatch.put(view,"SeekView", "9");while(find(findText)){
Dispatch.put(getSelection(),"Text", newText);
moveStart();
}/****设置页脚*****/Dispatch.put(view,"SeekView", "10");while(find(findText)){
Dispatch.put(getSelection(),"Text", newText);
moveStart();
}
Dispatch.put(view,"SeekView", new Variant(0));//恢复视图
moveStart();while(find(findText)){
Dispatch.put(getSelection(),"Text", newText);
putFontSize(getSelection(), fontName, size);
moveStart();
}
}/*** 设置选中或当前插入点的字体
*@paramselection
*@paramfontName
*@paramsize*/
public void putFontSize(Dispatch selection, String fontName, intsize){
Dispatch font= Dispatch.get(selection, "Font").toDispatch();
Dispatch.put(font,"Name", newVariant(fontName));
Dispatch.put(font,"Size", newVariant(size));
}/*** 在当前插入点插入字符串*/
public voidinsertText(String text){
Dispatch.put(getSelection(),"Text", text);
}/*** 将指定的文本替换成图片
*@paramfindText
*@paramimagePath
*@returnboolean true-查找到并替换该文本,false-未查找到文本*/
public boolean replaceImage(String findText, String imagePath, int width, intheight){
moveStart();if (!find(findText))return false;
Dispatch picture= Dispatch.call(Dispatch.get(getSelection(), "InLineShapes").toDispatch(), "AddPicture", imagePath).toDispatch();
Dispatch.call(picture,"Select");
Dispatch.put(picture,"Width", newVariant(width));
Dispatch.put(picture,"Height", newVariant(height));
moveRight();return true;
}/*** 全局将指定的文本替换成图片
*@paramfindText
*@paramimagePath*/
public void replaceAllImage(String findText, String imagePath, int width, intheight){
moveStart();while(find(findText)){
Dispatch picture= Dispatch.call(Dispatch.get(getSelection(), "InLineShapes").toDispatch(), "AddPicture", imagePath).toDispatch();
Dispatch.call(picture,"Select");
Dispatch.put(picture,"Width", newVariant(width));
Dispatch.put(picture,"Height", newVariant(height));
moveStart();
}
}/*** 在当前插入点中插入图片
*@paramimagePath*/
public void insertImage(String imagePath, int width, intheight){
Dispatch picture= Dispatch.call(Dispatch.get(getSelection(), "InLineShapes").toDispatch(), "AddPicture", imagePath).toDispatch();
Dispatch.call(picture,"Select");
Dispatch.put(picture,"Width", newVariant(width));
Dispatch.put(picture,"Height", newVariant(height));
moveRight();
}/*** 在当前插入点中插入图片
*@paramimagePath*/
public voidinsertImage(String imagePath){
Dispatch.call(Dispatch.get(getSelection(),"InLineShapes").toDispatch(), "AddPicture", imagePath);
}/*** 获取书签的位置
*@parambookmarkName
*@return书签的位置*/
publicDispatch getBookmark(String bookmarkName){try{
Dispatch bookmark= Dispatch.call(this.doc, "Bookmarks", bookmarkName).toDispatch();return Dispatch.get(bookmark, "Range").toDispatch();
}catch(Exception e){
e.printStackTrace();
}return null;
}/*** 在指定的书签位置插入图片
*@parambookmarkName
*@paramimagePath*/
public voidinsertImageAtBookmark(String bookmarkName, String imagePath){
Dispatch dispatch=getBookmark(bookmarkName);if(dispatch != null)
Dispatch.call(Dispatch.get(dispatch,"InLineShapes").toDispatch(), "AddPicture", imagePath);
}/*** 在指定的书签位置插入图片
*@parambookmarkName
*@paramimagePath
*@paramwidth
*@paramheight*/
public void insertImageAtBookmark(String bookmarkName, String imagePath, int width, intheight){
Dispatch dispatch=getBookmark(bookmarkName);if(dispatch != null){
Dispatch picture= Dispatch.call(Dispatch.get(dispatch, "InLineShapes").toDispatch(), "AddPicture", imagePath).toDispatch();
Dispatch.call(picture,"Select");
Dispatch.put(picture,"Width", newVariant(width));
Dispatch.put(picture,"Height", newVariant(height));
}
}/*** 在指定的书签位置插入文本
*@parambookmarkName
*@paramtext*/
public voidinsertAtBookmark(String bookmarkName, String text){
Dispatch dispatch=getBookmark(bookmarkName);if(dispatch != null)
Dispatch.put(dispatch,"Text", text);
}/*** 文档另存为
*@paramsavePath*/
public voidsaveAs(String savePath){
Dispatch.call(doc,"SaveAs", savePath);
}/*** 文档另存为PDF
*
注意:此操作要求word是2007版本或以上版本且装有加载项:Microsoft Save as PDF 或 XPS
*@paramsavePath*/
public voidsaveAsPdf(String savePath){
Dispatch.call(doc,"SaveAs", new Variant(17));
}/*** 保存文档
*@paramsavePath*/
public voidsave(String savePath){
Dispatch.call(Dispatch.call(word,"WordBasic").getDispatch(),"FileSaveAs", savePath);
}/*** 关闭word文档*/
public voidcloseDocument(){if (doc != null) {
Dispatch.call(doc,"Close", newVariant(saveOnExit));
doc= null;
}
}public voidexit(){
word.invoke("Quit", new Variant[0]);
}
}