2013-04-11 8 views
9

Требование состоит в том, чтобы обрабатывать пакет PDF по одному за раз и при успешном шифровании каждого из них с помощью пароля пользователя.Как читать PDF-файлы, созданные с неизвестным случайным паролем владельца?

Однако эти PDF-файлы были зашифрованы ранее случайным образом созданным динамическим паролем владельца (не знаю никому), чтобы предотвратить любые изменения.

Я использую iText для шифрования, как показано ниже:

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(); 

Но этот код бросает com.itextpdf.text.exceptions.BadPasswordException: PdfReader not opened with owner password

Может кто-нибудь руководство о том, как устранить эту ошибку/перепускной пароль владельца?

Здесь я хотел бы пояснить, что мы юридически владеем этими PDF-файлами, поэтому преступление/хакинг не совершается.

P.S.: Решение не ограничивается iText, может использовать любую другую библиотеку Java (Бесплатно или лицензировать).

ответ

19

PdfReader имеет недокументированную переменную static boolean с именем unethicalreading. По очевидным причинам эта переменная по умолчанию установлена ​​на false. Вы можете установить эту переменную, чтобы верно так:

PdfReader.unethicalreading = true; 

Отныне PdfReader будет игнорировать присутствие владельца пароля. Он будет генерировать исключение только в том случае, если пароль пользователя установлен.

Используйте это на свой страх и риск.

+0

спасибо, что сработал :) –

+0

Спасибо, Бруно это помогло мне – OMG

+0

спасибо. Работает нормально. – swemon