2013-04-11 34 views
9

Yêu cầu là xử lý một loạt tệp PDF cùng một lúc và mã hóa thành công mỗi người trong số họ bằng mật khẩu người dùng.Làm thế nào để đọc các tệp PDF được tạo bằng mật khẩu chủ sở hữu ngẫu nhiên không xác định?

Tuy nhiên, các tệp PDF này đã được mã hóa trước đó với mật khẩu chủ động được tạo ngẫu nhiên (không biết bất kỳ mật khẩu nào) để ngăn bất kỳ chỉnh sửa nào.

tôi sử dụng iText để mã hóa như hình dưới đây:

byte[] userPass = "user".getBytes(); 
byte[] ownerPass = "owner".getBytes(); 
PdfReader reader = new PdfReader("Misc.pdf"); 

PdfStamper stamper = new PdfStamper(reader, 
      new FileOutputStream("Processed_Encrypted.pdf")); 
stamper.setEncryption(userPass, ownerPass, 
PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128 
     | PdfWriter.DO_NOT_ENCRYPT_METADATA); 
stamper.close(); 
reader.close(); 

Nhưng mã này ném một com.itextpdf.text.exceptions.BadPasswordException: PdfReader not opened with owner password

Can một số một hướng dẫn về cách giải quyết chủ sở hữu mật khẩu lỗi/bỏ qua điều này?

Ở đây tôi muốn làm rõ rằng chúng tôi sở hữu một cách hợp pháp các tệp PDF này, vì vậy không có tội phạm/hack được cam kết.

P.S.: Giải pháp không giới hạn ở iText, có thể sử dụng bất kỳ thư viện Java nào khác (Miễn phí hoặc cấp phép).

Trả lời

19

PdfReader có một biến số static boolean không có giấy tờ có tên unethicalreading. Vì lý do hiển nhiên, biến này được đặt thành false theo mặc định. Bạn có thể đặt biến này thành true như sau:

PdfReader.unethicalreading = true; 

Từ bây giờ, PdfReader sẽ bỏ qua sự hiện diện của mật khẩu chủ sở hữu. Nó sẽ chỉ ném một ngoại lệ nếu một mật khẩu người dùng được đặt ra.

Sử dụng rủi ro này.

+0

cảm ơn đã làm việc :) –

+0

Cảm ơn Bruno đã giúp tôi – OMG

+0

cảm ơn. Làm việc tốt. – swemon