绪论
真是好久没写博客了。
从九月底一直就在出差,偶尔有些时间,但是也没用在正地方。
今年不知咋地,就是特别的懒,啥都不想干。
最近碰到一件事,客户给提了一个需求,要求从系统导出的word文档只读,不允许员工私自修改。(这个需求是给一个开发小姐姐提的,小姐姐人很好,所以帮个忙,但是我也没弄过,本着有问题找百度的原则,最后还是弄出来了)
相关jar包:spire.doc.free-3.9.0.jar
下载地址:http://repo.e-iceblue.com/nexus/content/groups/public/e-iceblue/spire.doc.free/
正文
import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import com.spire.doc.ProtectionType;
public class WordEncryptUtil {
public static void encrypt(String oldPath, String newPath) {
Document doc = new Document(oldPath);
// doc.encrypt("123456");//设置文档打开密码
doc.protect(ProtectionType.Allow_Only_Reading, "123456");//设置文档只读密码
// doc.protect(ProtectionType.Allow_Only_Comments,"123456");//设置文档只允许添加批注
// doc.protect(ProtectionType.Allow_Only_Form_Fields,"123456");//只允许表单域
// doc.protect(ProtectionType.Allow_Only_Revisions,"123456");//只允许修订
//保存加密后的文档
doc.saveToFile(newPath);
doc.dispose();
}
public static void decrypt(String oldPath, String newPath) {
//加载带密码的文件,输入原密码并解除
Document doc = new Document();
doc.loadFromFile(oldPath, FileFormat.Docx_2013, "123");
//将解密后的文档另存
doc.saveToFile(newPath, FileFormat.Docx_2013);
}
public static void main(String[] args) {
String oldPath = "D:\\home\\app\\1.doc";
String newPath = "D:\\home\\app\\1_JM.doc";
System.out.println("加密开始");
encrypt(oldPath, newPath);
System.out.println("加密结束");
}
}
结果
注意: 最好使用最新版本的jar包,我使用2.7.3版本时出现添加权限之后,使用相同密码,出现密码不正确的情况,为此纠结了好一会(自己加密的文档自己也解不开,可能旧版本本身就存在bug,或者word加密方式变更),最终完美解决该问题。
(若有什么错误,请留言指正,3Q)