前几天,遇到一个需求,要把Word文档中的底图(水印)移除,用POI试了下,好象只能移除docx格式的底图,对于doc格式的则无能为力,在网上搜了一下,也没有找到其他解决办法,没办法,只好用Aspose.Words来实现了(不得不说Aspose系列组件对于Office的支持真的很强大,真是居家行旅之必备良药啊 :) )。
实现代码很简单,就不多做说明了,直接上代码:
/**
* @CopyRright (c)2011: BrokenStone
* @Project: WordWatermark
* @File: RemoveWatermarkTest.java
* @JDK version used: JDK1.6 @<br/>
* @Author: BrokenStone
* @Blog: http://sheng.javaeye.com)
* @Email: wdmsyf@yahoo.com
* @since: 2011-12-25
* @Ver: 1.0
*/
package com.sheng.iteye.office;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import com.aspose.words.Document;
import com.aspose.words.HeaderFooter;
import com.aspose.words.HeaderFooterType;
import com.aspose.words.License;
import com.aspose.words.Node;
import com.aspose.words.NodeCollection;
import com.aspose.words.NodeType;
import com.aspose.words.Section;
import com.aspose.words.SectionCollection;
import com.aspose.words.Shape;
/**
* @author BrokenStone
*
*/
public class RemoveWatermarkTest {
/**
* 从Classpath(jar文件中)中读取License
*/
public void loadLicense() {
// 返回读取指定资源的输入流
License license = new License();
InputStream is = null;
try {
is = this.getClass().getResourceAsStream("/resources/aspose.word.license.xml");
if (is == null)
throw new RuntimeException( "Cannot find licenses file. Please contact wdmsyf@yahoo.com or visit http://sheng.javaeye.com for get more information.");
license.setLicense(is);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException ex) {
}
is = null;
}
}
}
/**
* remove watermark from Section Header
* @param sect
* @param headerType
* @throws Exception
*/
private static void removeWatermarkFromHeader(Section sect, int headerType) throws Exception {
HeaderFooter header = sect.getHeadersFooters().getByHeaderFooterType(headerType);
if (header != null) {
sect.getHeadersFooters().remove(header);
}
}
/**
* Remove watermark from document
* @param doc
*/
private static void removeWatermark(Document doc) {
SectionCollection sectionColl = doc.getSections();
Iterator it = sectionColl.iterator();
while(it.hasNext()){
Section sect = (Section)it.next();
try {
removeWatermarkFromHeader(sect, HeaderFooterType.HEADER_PRIMARY);
removeWatermarkFromHeader(sect, HeaderFooterType.HEADER_FIRST);
removeWatermarkFromHeader(sect, HeaderFooterType.HEADER_EVEN);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void test() {
String fileName = "带底图文档_测试.doc";
try {
Document doc = new Document(fileName);
removeWatermark(doc);
doc.save("removedWatermark.doc");
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
RemoveWatermarkTest rwt = new RemoveWatermarkTest();
rwt.loadLicense();
rwt.test();
}
}