2013-02-05 23 views
5

Với qpdf, bạn chỉ có thể loại bỏ các hạn chế/mã hóa từ một pdf như vậy:loại bỏ mã hóa từ pdf với pdfbox, như qpdf

qpdf --decrypt infile outfile 

Tôi muốn làm điều tương tự với PDFBox trong Java:

PDDocument doc = PDDocument.load(inputFilename); 
if(doc.isEncrypted()) 
{ 
    //remove the encryption to alter the document 
} 

Tôi đã thử điều này với StandardDecryptionMaterial, nhưng tôi không biết mật khẩu chủ sở hữu là gì. Qpdf làm như thế nào?

tài liệu mẫu: https://issues.apache.org/jira/secure/attachment/12514714/in.pdf

+1

Tùy thuộc vào loại mã hóa của PDF dễ giải mã (cách khác để hiển thị nó). Tuy nhiên, nó đánh bại khái niệm mã hóa này, để cho phép bất kỳ ai không có một số ủy quyền (mật khẩu chủ sở hữu) để loại bỏ mã hóa. Nếu bạn đã mã hóa các tệp PDF và không có mật khẩu chủ sở hữu, bạn sẽ chuyển sang chủ sở hữu tài liệu nếu bạn yêu cầu phiên bản không được mã hóa. – mkl

Trả lời

17

Đây là những gì bạn cần phải làm. Lấy cảm hứng từ công cụ PDFBox WriteDecodedDoc. Bạn có thể phải bao gồm bình bouncycastle (http://www.bouncycastle.org/latest_releases.html)

if (doc.isEncrypted()) { 
     try { 
      doc.decrypt(""); 
      doc.setAllSecurityToBeRemoved(true); 
     } 
     catch (Exception e) { 
      throw new Exception("The document is encrypted, and we can't decrypt it.", e); 
     } 
    } 
+0

Đây là API không dùng nữa. Vui lòng sử dụng API mới như được nêu tại http://stackoverflow.com/a/29676262/873282. – koppor

+0

không có phương thức doc.decrypt() - đủ để sử dụng doc.setAllSecurityToBeRemoved (true); –