使用Java取消保护Word文档

时间:2019-06-12 09:47:46

标签: java ms-word apache-poi

我们如何使用java apache poi取消对word文档的保护?我已通过编程方式使用密码将文档保护为只读。现在,我想取消保护它。我们该怎么办?有什么方法可以解除对文档的保护。我使用过removePasswordProtection(),但是即使使用该方法,该文档也无法编辑。

我用于保护的示例代码是

XWPFDocument document=new XWPFDocument();
 document.enforceReadonlyProtection(strPassword,HashAlgorithm.sha1);

该文档已成功获得保护。

但是,当我使用下面的代码片段取消保护文档时,它不起作用。

 if(document.isEnforcedReadonlyProtection())
     {
     if(document.validateProtectionPassword(strPassword))
     {
        document.removeProtectionEnforcement();
     }
     }

任何人都可以帮助我解除文件保护的方法吗?

2 个答案:

答案 0 :(得分:1)

无法复制。

以下代码产生两个Word文档。一个WordProtected.docx被保护,另一个WordUnprotected.docx被保护。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.*;

import org.apache.poi.poifs.crypt.HashAlgorithm;

class XWPFReadOnlyProtection {

 public static void main(String[] args) throws Exception {

  XWPFDocument document = new XWPFDocument();

  String strPassword = "password";

  document.enforceReadonlyProtection(strPassword, HashAlgorithm.sha1);

  FileOutputStream fileout = new FileOutputStream("WordProtected.docx");
  document.write(fileout);
  fileout.close();
  document.close();

  document = new XWPFDocument(new FileInputStream("WordProtected.docx"));

  document.removeProtectionEnforcement();

  fileout = new FileOutputStream("WordUnprotected.docx");
  document.write(fileout);
  fileout.close();
  document.close();

 }
}

答案 1 :(得分:0)

将此代码用于Word保护

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class WordTest {

       public static void main(String[] args) throws IOException {
       FileInputStream in = new FileInputStream("D:\\govind.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("D:\\govind.doc");
       doc.write(out);
       out.close();
    }
}

这用于不受保护的单词文件

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class wordFileTest {

    public static void main(String[] args) throws IOException {
       geenrateUnprotectedFile("D:\\","govind","1234");
    }


     public static void geenrateUnprotectedFile(String filePath,String fileName,String pwdtxt) {
    try {
     FileInputStream in = new FileInputStream(filePath+fileName+".doc");

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

        Biff8EncryptionKey.setCurrentUserPassword(pwdtxt);
        HWPFDocument doc = new HWPFDocument(poiFileSystem);

        String docType=doc.getDocumentText();

         FileOutputStream out = new FileOutputStream(filePath+fileName+"12.doc");
        out.write(docType.getBytes());
        System.out.println("don");
    }catch (Exception e) {
      e.printStackTrace();
    } 
     }

}