docx4J实现替换word中的书签(.docx)

替换word的几种方法(查看我的上传会有jar包资源)

1,poi       HWPFDocument 类解析.doc    XWPFDocument解析.docx   楼主只用过HWPFDocument,以后问题只针对解析.doc文件。遇到过问题1.替换书签时,页眉页脚的书签,表格中的书签和主内容的文本书签不能同时存在(这句有误,页眉页脚 替换参考https://bbs.csdn.net/topics/380228730),2.获取所有书签的方法可以获取到隐藏书签,遍历时书签集合会动态丢失,报数组下标越界异常,需要遍历时将书签集合size需要实时获取。3替换书签后文档目录无法正常显示,4附带visio图的文档替换书签后有时图会丢失  5,替换复杂文档可能存在其它情况

其它参考文献:https://elim.iteye.com/blog/2031335

资源地址:https://download.csdn.net/download/qq_19865223/10916200

2,jacob   解析.doc    只能在window下使用如果服务器时其它系统,不支持

资源地址:https://download.csdn.net/download/qq_19865223/10916236

3,docx4j  解析.docx  目前使用,不存在丢失目录和visio图的情况,docx4j 依赖很多jar包

资源地址:https://download.csdn.net/download/qq_19865223/10916213

贴上代码:poi操作.doc

	/**
	 * poi操作文档(97-2003)
	 * @throws Exception
	 */
	public static String poiOPWord(){

		InputStream is =null;
		FileOutputStream out = null;
		try {
			is = new FileInputStream("C:\\Users\\cgh\\Desktop\\book.doc");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
			//获取域替换书签
			HWPFDocument doc;
			try {
				doc = new HWPFDocument(is);

				//Range range = doc.getRange();//获取域
				Bookmarks bookmarks=doc.getBookmarks();//书签集合

				int count=bookmarks.getBookmarksCount();
				for(int i=0;i<count;i++){
					Bookmark book=bookmarks.getBookmark(i);
					String bookName=book.getName();
					Range ran = new Range(book.getStart(), book.getEnd(), doc);
					if (ran.text().length() > 0){
						if(bookName.equals("name")){
							ran.replaceText("圣诞节的撒娇的数据库是的奇偶第三季度撒看见的数据库", true);//如果有值替换
						}else if(bookName.equals("daihao")){
							ran.replaceText("ssssdq111", false);//如果有值替换
						}
					}else{
						if(bookName.equals("name")){
							ran.insertBefore("设计数据上课时间附加费将发放解放军解放");		//没值就插入
						}else if(bookName.equals("daihao")){
							ran.insertBefore("daihao1110");		//没值就插入
						}
					}
					//获取变化后的长度
					int changecount = bookmarks.getBookmarksCount();
					if(changecount!=count){
						i--;
						count=changecount;
					}
				}			

				//把当前HWPFDocument写到输出流中
				out=new FileOutputStream("D:\\wordBook\\PoiBooks.doc");
				doc.write(out);
			} catch (IOException e) {
				e.printStackTrace();
			}
		closeStream(is);
		closeOutStream(out);
		return "SUCCESS";
	}

 2.jacob操作.doc

	/**
	 * jacob操作Word(97-2003)
	 */
	public static void jacobOPWord(){
		//启动word,生成一个ActivexComponent对象
		ActiveXComponent app = new ActiveXComponent("Word.Application");
		//要转换的word文件C:\Users\cgh\Desktop
		String inFile = "C:\\Users\\cgh\\Desktop\\book2.doc";
		//要保存的目标文件
		String tpFile ="D:\\wordBook\\JacobBooks.doc";
		boolean flag = true;
		boolean visible=false;
		Dispatch docs = app.getProperty("Documents").toDispatch();
		Dispatch doc = Dispatch.invoke(docs, "Open", Dispatch.Method, new Object[]{inFile, new Variant(false)}, new int[1]).toDispatch();    //打开word文件 , false可写!!  注意 Variant的值
		Dispatch activeDocument=app.getProperty("ActiveDocument").toDispatch();
		Dispatch bookMarks = app.call(doc, "Bookmarks").toDispatch();
		int bCount = Dispatch.get(bookMarks, "Count&#
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值