使用密码apache poi

时间:2016-09-19 09:52:38

标签: java apache-poi hwpf

我想在我的word文件(.doc)中添加密码。我在谷歌搜索它,但发现只有(.docx)的解决方案。谁能帮我?我正在使用此代码,但输出文件没有密码。

FileInputStream in = new FileInputStream("Doccc.doc");    

BufferedInputStream bin = new BufferedInputStream(in);            
POIFSFileSystem poiFileSystem = new POIFSFileSystem(bin);

Biff8EncryptionKey.setCurrentUserPassword("P@ssw0rd");
HWPFDocument doc = new HWPFDocument(poiFileSystem);            
Range range = doc.getRange();

FileOutputStream out = new FileOutputStream("Doccc.doc");
doc.write(out);
out.close();

1 个答案:

答案 0 :(得分:1)

正如Gagravarr指出的那样,支持加密/密码保护矩阵的页面几乎总结了它。使用标准库,您将无法设置密码。

如果在Word文件格式的二进制格式规范中描述了详细信息,则可以选择实现它。几年前,我为客户端构建了一个自定义HWPF库,因此我花了很多时间分析文件格式并阅读规范。但是,我不记得有关加密/保护的部分,可能是因为它们与我无关。

如果可以通过合理的工作量添加保护: .doc个文件以OLE2复合文档格式存储。此格式包含实际的Word相关数据。 (如果您对此不熟悉,可能会将其视为归档格式 - 可能就像没有压缩的ZIP文件一样。)OLE2部分得到了很好的支持(模块POIFS)。二进制Word文件格式(模块HWPF)不太受支持。如果您将Word文件读入HWPFDocument并再次写出来,则很可能最终会出现无效文档。

因此,如果可以在不必读写HWPFDocument的情况下添加保护,那么您有机会。如果需要修改Word数据部分,并且它很小,可能在不读取和写入HWPFDocument的情况下更改几个字节(不插入或删除),那么您也有机会。但是,如果实现保护需要更改大量Word文件格式结构,那么您可能无法在几个月内完成项目的这一部分(如果您是一个单独的团队,则可能是几年:-))。