添加带密码apache poi的word(.doc)文件
我想为我的word文件(.doc)添加密码。我在谷歌搜索它,但只找到(.docx)的解决方案。谁能帮我?我正在使用此代码,但输出文件没有密码。添加带密码apache poi的word(.doc)文件
FileInputStream in = new FileInputStream("Doccc.doc");
BufferedInputStream bin = new BufferedInputStream(in);
POIFSFileSystem poiFileSystem = new POIFSFileSystem(bin);
Biff8EncryptionKey.setCurrentUserPassword("[email protected]");
HWPFDocument doc = new HWPFDocument(poiFileSystem);
Range range = doc.getRange();
FileOutputStream out = new FileOutputStream("Doccc.doc");
doc.write(out);
out.close();
正如Gagravarr指出的那样,支持加密/密码保护矩阵的页面几乎总结了一下。使用标准库时,您将无法设置密码。
如果在Word文件格式的二进制格式规范中描述了详细信息,则可以选择实现它。几年前,我为客户构建了一个定制的HWPF库,所以我花了很多时间分析文件格式并阅读规格。但是,我不记得有关加密/保护的部分,可能是因为它们与我无关。
如果可以通过合理的工作量添加保护: .doc
文件以OLE2复合文档格式存储。这种格式包含实际的Word相关数据。 (如果你是新手,你可能会认为它是一个归档格式 - 也许就像一个没有压缩的ZIP文件。)OLE2部分得到很好的支持(模块POIFS
)。二进制Word文件格式(模块HWPF
)得不到很好的支持。如果您将Word文件读入HWPFDocument
并再次写出,则很可能最终导致无效的文档。
因此,如果有可能在无需读取和写出HWPFDocument
的情况下添加保护,您就有机会了。如果需要修改Word数据部分,并且它只是很小,可能会在没有读写HWPFDocument
的情况下更改几个字节(而不是插入或移除),那么您也有机会。但是,如果实施保护需要更改很多Word文件格式结构,那么几个月内可能不会完成项目的这一部分(如果您是一个人团队,则可能几年:-))。
我一直走过HWPF很长一段路,但是加密实现[#61162](https://bz.apache.org/bugzilla/show_bug.cgi?id=61162)或多或少是直截了当的,基本东西在几个小时内工作:) – kiwiwings
你看过[Apache POI支持的加密/密码保护矩阵](http://poi.apache.org/encryption.html)吗? – Gagravarr
@Gagravarr是的。在该指南中不支持.doc文件,它只支持.docx文件。任何人都可以提出另一种方式? – kids