2013-04-11 19 views
9

必要条件は、一度に1つのPDFバッチを処理し、成功した場合は、それぞれをユーザーパスワードで暗号化することです。ランダムなオーナーパスワードが不明なPDFを読むには?

ただし、これらのPDFは、ランダムに生成された動的所有者パスワード(いずれも知らない)で編集しないように事前に暗号化されています。

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

をスロー:以下に示すように

私は、暗号化にiTextを使うのか?

ここでは、これらのPDFを法的に所有していることを明確にしたいので、犯罪/ハッキングは行われていません。

P.S.:ソリューションはiTextに限定されず、その他のJavaライブラリ(は無料またはライセンス)も使用できます。

答えて

19

PdfReaderには、unethicalreadingという名前の文書化されていないstatic booleanという変数があります。明らかな理由から、この変数はデフォルトでfalseに設定されています。次のようにこの変数をtrueに設定できます。

PdfReader.unethicalreading = true; 

今後、PdfReaderは所有者パスワードの存在を無視します。ユーザーのパスワードが設定されている場合にのみ、例外がスローされます。

これは自己責任で使用してください。

+0

ありがとうございました:) –

+0

ありがとうブルーノそれは私を助けました – OMG

+0

ありがとう。うまく動作します。 – swemon

関連する問題