目标是打开现有的 .docx 文档并使用密码加密保存。我为此使用了 Apache POI 库。下面的代码工作正常,使文档加密和密码保护。
但是在创建文件后,我可以使用 LibreOffice 打开它,但不能使用 MS Word 或 OpenOffice Writer。
该文件似乎没有内容类型部分,因为 OpenOffice 向我询问了文件过滤器。但是当我选择“Microsoft Word 2007 XML”时,我从 OpenOffice 中得到了“常见输入输出错误”
我能请你帮我吗,伙计们?PS我使用Java 8和POI 3.17
static boolean encryptOne(String documentPath, String password) {
try {
POIFSFileSystem fs = new POIFSFileSystem();
EncryptionInfo info = new EncryptionInfo(EncryptionMode.agile);
Encryptor encryptor = info.getEncryptor();
encryptor.confirmPassword(password);
OPCPackage opc = OPCPackage.open(new File(documentPath), PackageAccess.READ_WRITE);
opc.save(encryptor.getDataStream(fs));
opc.close();
FileOutputStream fos = new FileOutputStream(documentPath);
fs.writeFilesystem(fos);
fos.close();
System.out.println("Document successfully encrypted");
return true;
} catch (IOException | GeneralSecurityException | InvalidFormatException e) {
ExceptionPrinter.printOutStream(e);
return false;
}
}
所以,我通过改变 EncryptionMode 解决了这个问题:
// EncryptionInfo info = new EncryptionInfo(EncryptionMode.agile);
EncryptionInfo info = new EncryptionInfo(EncryptionMode.standard);
我发现一些信息表明 MS Word 的免费(免费)版本不支持 ECMA-376.Agile 加密。因此,我将加密模式更改为 ECMA-376.Standard,它对我有用。我不确定这是真的,但它对我的情况有所帮助。
希望这会帮助某人。
谢谢。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句