已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Microsoft Word文档到HTML文档的转化(环境配置)在该部分的转化中,使用了JACOB Project(A Java-COM Bridge)一种Java到com的连接桥来操作基于com模型的Microsoft word文档。使用Jocob基本上可以完全操作word文档,在该例中主要使用了JACOB来操作word文档另存为HTML文档。首先在/JACOB/下载JACOB开源包,目前该开源项目已经移至S17。本系统使用的是JACOB_1.9,下载解压后的JACOB_1.9目录下主要有以下三个文件:Java doc描述文件、JACOB.dll、JACOB.jar。填加JACOB.dll到系统/windows/system32/目录下或者安装Java的bin目录下;在eclipse环境下填加JACOB.jar到自己的Java库中,填加方法是在包资源管理器下点击鼠标右键选择 构建路径/配置构建路径/Java构建路径/库/添加外部jar 然后在弹出窗口中选择外部jar路径,也就是JACOB.jar的所在的文件夹。做好以上的环境配置工作后,就可以正确使用JACOB来操作Microsoft word文档了。在该例中,主要使用了JACOB来操作word另存为HTML文件。核心操作代码见下文。使用java将word文档转化为html格式(续)2008-07-06 23:13Microsoft Word文档到HTML文档的转化(实现代码)import com.jacob.activeX.*;import .*;import Java.io.File;public class WordToHtml public static void convertDocToHtml(String inputFile, String outputFile) boolean flag = false; / 打开Word应用程序 ActiveXComponent app = new ActiveXComponent(Word.Application); try /设置word不可见 app.setProperty(Visible, new Variant(false); / 打开word文件 Dispatch doc1 = app.getProperty(Documents).toDispatch(); Dispatch doc2 = Dispatch.invoke(doc1,Open,Dispatch.Method,new Object inputFile, new Variant(false),new Variant(true) , new int1).toDispatch(); /new Variant(i)参量用来控制word文档另存为的目标文档格;i=7时word存为txt文件; i=8时word存为HTML文件 Dispatch.invoke(doc2, SaveAs, Dispatch.Method, new Object outputFile, new Variant(8) , new int1); / 关闭word Variant f = new Variant(false);Dispatch.call(doc2, close, f); flag = true; catch (Exception e) e.printStackTrace(); finally app.invoke(Quit, new Variant ); if (flag = true) System.out.println(inputFile + - Transforme Successfully); else System.out.println(inputFile + - Transform Failed); package com.test;import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List;import com.jacob.activeX.ActiveXComponent; import .Dispatch; import .Variant;public class MSWordManager / word文档 private Dispatch doc; / word运行程序对象 private ActiveXComponent word; / 所有word文档集合 private Dispatch documents; / 选定的范围或插入点 private Dispatch selection; private boolean saveOnExit = true; /* */* * * param visible 为true表示word应用程序可见 */ public MSWordManager(boolean visible) if (word = null) word = new ActiveXComponent(Word.Application); word.setProperty(Visible, new Variant(visible); if (documents = null) documents = word.getProperty(Documents).toDispatch(); /* */* * 设置退出时参数 * * param saveOnExit boolean true-退出时保存文件,false-退出时不保存文件 */ public void setSaveOnExit(boolean saveOnExit) this.saveOnExit = saveOnExit; /* */* * 创建一个新的word文档 * */ public void createNewDocument() doc = Dispatch.call(documents, Add).toDispatch(); selection = Dispatch.get(word, Selection).toDispatch(); /* */* * 打开一个已存在的文档 * * param docPath */ public void openDocument(String docPath) closeDocument(); doc = Dispatch.call(documents, Open, docPath).toDispatch(); selection = Dispatch.get(word, Selection).toDispatch(); /* */* * 把选定的内容或插入点向上移动 * * param pos 移动的距离 */ public void moveUp(int pos) if (selection = null) selection = Dispatch.get(word, Selection).toDispatch(); for (int i = 0; i < pos; i+) Dispatch.call(selection, MoveUp); /* */* * 把选定的内容或者插入点向下移动 * * param pos 移动的距离 */ public void moveDown(int pos) if (selection = null) selection = Dispatch.get(word, Selection).toDispatch(); for (int i = 0; i < pos; i+) Dispatch.call(selection, MoveDown); /* */* * 把选定的内容或者插入点向左移动 * * param pos 移动的距离 */ public void moveLeft(int pos) if (selection = null) selection = Dispatch.get(word, Selection).toDispatch(); for (int i = 0; i < pos; i+) Dispatch.call(selection, MoveLeft); /* */* * 把选定的内容或者插入点向右移动 * * param pos 移动的距离 */ public void moveRight(int pos) if (selection = null) selection = Dispatch.get(word, Selection).toDispatch(); for (int i = 0; i < pos; i+) Dispatch.call(selection, MoveRight); /* */* * 把插入点移动到文件首位置 * */ public void moveStart() if (selection = null) selection = Dispatch.get(word, Selection).toDispatch(); Dispatch.call(selection, HomeKey, new Variant(6); public void moveEnd() if (selection = null) selection = Dispatch.get(word, Selection).toDispatch(); Dispatch.call(selection, EndKey, new Variant(6); /* */* * 从选定内容或插入点开始查找文本* * param toFindText 要查找的文本 * return boolean true-查找到并选中该文本,false-未查找到文本 */ public boolean find(String toFindText) if (toFindText = null | toFindText.equals() return false; / 从selection所在位置开始查询 Dispatch find = word.call(selection, Find).toDispatch(); / 设置要查找的内容 Dispatch.put(find, Text, toFindText); / 向前查找 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(); /* */* * 把选定选定内容设定为替换文本 * * param toFindText 查找字符串 * param newText 要替换的内容 * return */ public boolean replaceText(String toFindText, String newText) if (!find(toFindText) return false; Dispatch.put(selection, Text, newText); return true; /* */* * 全局替换文本 * * param toFindText 查找字符串 * param newText 要替换的内容 */ public void replaceAllText(String toFindText, String newText) while (find(toFindText) Dispatch.put(selection, Text, newText); Dispatch.call(selection, MoveRight); /* */* * 在当前插入点插入字符串 * * param newText 要插入的新字符串 */ public void insertText(String newText) Dispatch.put(selection, Text, newText); /* */* * * param toFindText 要查找的字符串 * param imagePath 图片路径 * return */ public boolean replaceImage(String toFindText, String imagePath) if (!find(toFindText) return false; Dispatch.call(Dispatch.get(selection, InLineShapes).toDispatch(), AddPicture, imagePath); return true; /* */* * 全局替换图片 * * param toFindText 查找字符串 * param imagePath 图片路径 */ public void replaceAllImage(String toFindText, String imagePath) while (find(toFindText) Dispatch.call(Dispatch.get(selection, InLineShapes).toDispatch(), AddPicture, imagePath); Dispatch.call(selection, MoveRight); /* */* * 在当前插入点插入图片 * * param imagePath 图片路径 */ public void insertImage(String imagePath) Dispatch.call(Dispatch.get(selection, InLineShapes).toDispatch(), AddPicture, imagePath); /* */* * 合并单元格 * * param tableIndex * param fstCellRowIdx * param fstCellColIdx * param secCellRowIdx * param secCellColIdx */ public void mergeCell(int tableIndex, int fstCellRowIdx, int fstCellColIdx, int secCellRowIdx, int secCellColIdx) / 所有表格 Dispatch tables = Dispatch.get(doc, Tables).toDispatch(); / 要填充的表格 Dispatch table = Dispatch.call(tables, Item, new Variant(tableIndex) .toDispatch(); Dispatch fstCell = Dispatch.call(table, Cell, new Variant(fstCellRowIdx), new Variant(fstCellColIdx) .toDispatch(); Dispatch secCell = Dispatch.call(table, Cell, new Variant(secCellRowIdx), new Variant(secCellColIdx) .toDispatch(); Dispatch.call(fstCell, Merge, secCell); /* */* * 在指定的单元格里填写数据 * * param tableIndex * param cellRowIdx * param cellColIdx * param txt */ public void putTxtToCell(int tableIndex, int cellRowIdx, int cellColIdx, String txt) / 所有表格 Dispatch tables = Dispatch.get(doc, Tables).toDispatch(); / 要填充的表格 Dispatch table = Dispatch.call(tables, Item, new Variant(tableIndex) .toDispatch(); Dispatch cell = Dispatch.call(table, Cell, new Variant(cellRowIdx), new Variant(cellColIdx).toDispatch(); Dispatch.call(cell, Select); Dispatch.put(selection, Text, txt); /* */* * 在当前文档拷贝数据 * * param pos */ public void copy(String toCopyText) moveStart(); if (this.find(toCopyText) Dispatch textRange = Dispatch.get(selection, Range).toDispatch(); Dispatch.call(textRange, Copy); /* */* * 在当前文档粘帖剪贴板数据 * * param pos */ public void paste(String pos) moveStart(); if (this.find(pos) Dispatch textRange = Dispatch.get(selection, Range).toDispatch(); Dispatch.call(textRange, Paste); /* */* * 在当前文档指定的位置拷贝表格 * * param pos 当前文档指定的位置 * param tableIndex 被拷贝的表格在word文档中所处的位置 */ public void copyTable(String pos,int tableIndex) Dispatch tables = Dispatch.get(doc, Tables).toDispatch(); Dispatch table = Dispatch.call(tables, Item, new Variant(tableIndex) .toDispatch(); Dispatch range = Dispatch.get(table, Range).toDispatch(); Dispatch.call(range, Copy); if (this.find(pos) Dispatch textRange = Dispatch.get(selection, Range).toDispatch(); Dispatch.call(textRange, Paste); /* */* * 在当前文档末尾拷贝来自另一个文档中的段落 * * param anotherDocPath 另一个文档的磁盘路径 * param tableIndex 被拷贝的段落在另一格文档中的序号(从1开始) */ public void copyParagraphFromAnotherDoc(String anotherDocPath, int paragraphIndex) Dispatch wordContent = Dispatch.get(doc, Content).toDispatch(); / 取得当前文档的内容 Dispatch.call(wordContent, InsertAfter, $selection$);/ 插入特殊符定位插入点 copyParagraphFromAnotherDoc(anotherDocPath, paragraphIndex, $selection$); /* */* * 在当前文档指定的位置拷贝来自另一个文档中的段落 * * param anotherDocPath 另一个文档的磁盘路径 * param tableIndex 被拷贝的段落在另一格文档中的序号(从1开始) * param pos 当前文档指定的位置 */ public void copyParagraphFromAnotherDoc(String anotherDocPath, int paragraphIndex, String pos) Dispatch doc2 = null; try doc2 = Dispatch.call(documents, Open, anotherDocPath) .toDispatch(); Dispatch paragraphs = Dispatch.get(doc2, Paragraphs).toDispatch(); Dispatch paragraph = Dispatch.call(paragraphs, Item, new Variant(paragraphIndex).toDispatch(); Dispatch range = Dispatch.get(paragraph, Range).toDispatch(); Dispatch.call(range, Copy); if (this.find(pos) Dispatch textRange = Dispatch.get(selection, Range) .toDispatch(); Dispatch.call(textRange, Paste); catch (Exception e) e.printStackTrace(); finally if (doc2 != null) Dispatch.call(doc2, Close, new Variant(saveOnExit); doc2 = null; /* */* * 在当前文档指定的位置拷贝来自另一个文档中的表格 * * param anotherDocPath 另一个文档的磁盘路径 * param tableIndex 被拷贝的表格在另一格文档中的序号(从1开始) * param pos 当前文档指定的位置 */ public void copyTableFromAnotherDoc(String anotherDocPath, int tableIndex, String pos) Dispatch doc2 = null; try doc2 = Dispatch.call(documents, Open, anotherDocPath) .toDispatch(); Dispatch tables = Dispatch.get(doc2, Tables).toDispatch(); Dispatch table = Dispatch.call(tables, Item, new Variant(tableIndex).toDispatch(); Dispatch range = Dispatch.get(table, Range).toDispatch(); Dispatch.call(range, Copy); if (this.find(pos) Dispatch textRange = Dispatch.get(selection, Range) .toDispatch(); Dispatch.call(textRange, Paste); catch (Exception e) e.printStackTrace(); finally if (doc2 != null) Dispatch.call(doc2, Close, new Variant(saveOnExit); doc2 = null; /* */* * 在当前文档指定的位置拷贝来自另一个文档中的图片 * * param anotherDocPath 另一个文档的磁盘路径 * param shapeIndex 被拷贝的图片在另一格文档中的位置 * param pos 当前文档指定的位置 */ public void copyImageFromAnotherDoc(String anotherDocPath, int shapeIndex, String pos) Dispatch doc2 = null; try doc2 = Dispatch.call(documents, Open, anotherDocPath) .toDispatch(); Dispatch shapes = Dispatch.get(doc2, InLineShapes).toDispatch(); Dispatch shape = Dispatch.call(shapes, Item, new Variant(shapeIndex).toDispatch(); Dispatch imageRange = Dispatch.get(shape, Range).toDispatch(); Dispatch.call(imageRange, Copy); if (this.find(pos) Dispatch textRange = Dispatch.get(selection, Range) .toDispatch(); Dispatch.call(textRange, Paste); catch (Exception e) e.printStackTrace(); finally if (doc2 != null) Dispatch.call(doc2, Close, new Variant(saveOnExit); doc2 = null; /* */* * 创建表格 * * param pos 位置 * param cols 列数 * param rows 行数 */ public void createTable(int numCols, int numRows)/(String pos, int numCols, int numRows) / if (!find(pos) Dispatch tables = Dispatch.get(doc, Tables).toDispatch(); Dispatch range = Dispatch.get(selection, Range).toDispatch(); Dispatch newTable = Dispatch.call(tables, Add, range, new Variant(numRows), new Variant(numCols).toDispatch(); Dispatch.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《GB-T 40421-2021健康信息学 消息与通信 DICOM持久对象的网络访问》专题研究报告
- 2025年中国保险消费者研究报告
- 2024年执业药师(西药)《药理学》考前试题(一)及答案
- 淡水鱼类养殖工安全综合知识考核试卷含答案
- 《GBT 19215.4-2017 电气安装用电缆槽管系统 第 2 部分:特殊要求 第 4 节:辅助端》专题研究报告
- 镁精炼工岗后模拟考核试卷含答案
- 船舶货运员操作竞赛考核试卷含答案
- 电工合金冷变形工岗前内部控制考核试卷含答案
- 印后成型工诚信品质知识考核试卷含答案
- 工业车辆装配调试工安全教育水平考核试卷含答案
- 射血分数保留的心力衰竭诊断与治疗中国专家共识 2025解读
- 全民反恐共创平安课件
- DB51∕T 705-2023 四川主要造林树种苗木质量分级
- 眼睛保健知识111课件
- 国家药监局医疗器械技术审评检查大湾区分中心第二批员额制人员公开招聘(广东)【共500题附答案解析】模拟检测试卷
- ISO9001基础知识培训课件
- 通达信函数大全整理
- 小升初英语衔接存在的问题及其对策优秀获奖科研论文
- 煤矿矿井废水处理设计方案
- 《数字电路逻辑设计》--逻辑函数及其化简练习习题
- 列管式换热器课程设计
评论
0/150
提交评论