簡體   English   中英

在Java中使用Apache POI用密碼保護文檔

[英]protect doc with password using Apache POI in java

我想使用apache poi用密碼保護.doc文件。 運行代碼時出現此錯誤。 請幫我

線程“主”中的異常org.apache.poi.openxml4j.exceptions.OLE2NotOfficeXmlFileException:提供的數據似乎采用OLE2格式。 您正在調用POI中涉及OOXML(Office Open XML)文檔的部分。 您需要在org.apache.poi上的org.apache.poi.openxml4j.opc.internal.ZipHelper.verifyZipHeader(ZipHelper.java:179)處調用POI的不同部分來處理此數據(例如,HSSF而不是XSSF)。位於org.apache.poi.openxml4j.opc.ZipPackage。(ZipPackage.java:134)的openxml4j.opc.internal.ZipHelper.openZipFile(ZipHelper.java:237),位於org.apache.poi.openxml4j.opc.ZipPackage。( ZipPackage.java:117)位於org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:257)

    POIFSFileSystem fs=new POIFSFileSystem();
    EncryptionInfo info=new EncryptionInfo(EncryptionMode.agile);
    Encryptor enc=info.getEncryptor();
    enc.confirmPassword("user");
    OPCPackage opc=OPCPackage.open("D:/Amar.doc", PackageAccess.READ_WRITE);
    OutputStream os=enc.getDataStream(fs);
    opc.save(os);
    opc.close();
    FileOutputStream stream=new FileOutputStream("D:/ao.doc");
    fs.writeFilesystem(stream);
    stream.close();
    System.out.println("running");

我檢查並參考了Apache POI 文檔 ,它說從3.17版本開始支持.doc文件的密碼加密,因此我嘗試一下。

它必須改用HWPFDocument來打開您的doc文件。 然后,您需要通過以下方式設置密碼:

Biff8EncryptionKey.setCurrentUserPassword(password);

完整的方法:

public static void encryptDocFile(File inputDocFile, File outputDocFile, String password) {
    try {
        FileInputStream fileInput = new FileInputStream(inputDocFile);
        BufferedInputStream bufferInput = new BufferedInputStream(fileInput);
        POIFSFileSystem poiFileSystem = new POIFSFileSystem(bufferInput);
        // Setting password
        Biff8EncryptionKey.setCurrentUserPassword(password);

        HWPFDocument wordDoc = new HWPFDocument(poiFileSystem);
        FileOutputStream fileOut = new FileOutputStream(outputDocFile);
        wordDoc.write(fileOut);
        bufferInput.close();
        fileOut.close();
        wordDoc.close();
        System.out.println("Encrypted successfully");
    } catch (IOException e) {
        System.out.println("Failed to encrypt doc file");
        e.printStackTrace();
    }
}

或者,您可以在此處簽出完整的代碼:

如果您還有其他問題或反饋,請告訴我。 謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM