目标是打开现有的.docx文档,并使用密码加密将其保存。 我为此使用Apache POI库。以下代码可以正常工作,并且可以对文档进行加密和密码保护。
但是在文件创建后,我可以使用LibreOffice打开它,但是不能使用MS Word或OpenOffice Writer打开它。
文件似乎没有内容类型,因为OpenOffice向我询问了文件过滤器。但是当我选择“ Microsoft Word 2007 XML”时,我从OpenOffice收到了“常见输入输出错误”
伙计们,我能请您帮我吗? 附言 我使用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;
}
}
答案 0 :(得分:0)
因此,我通过更改EncryptionMode解决了该问题:
// EncryptionInfo info = new EncryptionInfo(EncryptionMode.agile);
EncryptionInfo info = new EncryptionInfo(EncryptionMode.standard);
我发现一些信息表明免费版(免费)的MS Word不支持ECMA-376。敏捷加密。因此,我将加密模式更改为ECMA-376.Standard,它对我有用。 我不确定这是真的,但对我来说有帮助。
希望这会对某人有所帮助。
谢谢。