PDFファイルがパスワードで保護されているか、閲覧できないかを確認したい。つまり、pdfファイルにユーザーパスワードがあるかどうかを知りたいのです。
関数を使用するためのフォーラムでいくつかのヘルプを見つけましisencrypted
たが、正しい答えは得られません。
PDFがパスワードで保護されているかどうかを確認することはできますか?
PDFファイルがパスワードで保護されているか、閲覧できないかを確認したい。つまり、pdfファイルにユーザーパスワードがあるかどうかを知りたいのです。
関数を使用するためのフォーラムでいくつかのヘルプを見つけましisencrypted
たが、正しい答えは得られません。
PDFがパスワードで保護されているかどうかを確認することはできますか?
PdfReader.IsEncrypted
このメソッドを使用する際の問題PdfReader
は、パスワードを必要とする PDF で をインスタンス化しようとすると、そのパスワードを指定しないと、BadPasswordException
.
これを念頭に置いて、次のようなメソッドを書くことができます。
public static bool IsPasswordProtected(string pdfFullname) {
try {
PdfReader pdfReader = new PdfReader(pdfFullname);
return false;
} catch (BadPasswordException) {
return true;
}
}
無効なパスワードを指定すると、オブジェクトBadPasswordException
を作成しようとしたときに同じパスワードが返されることに注意してください。PdfReader
これを使用して、PDF のパスワードを検証するメソッドを作成できます。
public static bool IsPasswordValid(string pdfFullname, byte[] password) {
try {
PdfReader pdfReader = new PdfReader(pdfFullname, password);
return false;
} catch (BadPasswordException) {
return true;
}
}
確かに見苦しいですが、私が知る限り、これが PDF がパスワードで保護されているかどうかを確認する唯一の方法です。うまくいけば、誰かがより良い解決策を提案します。
private void CheckPdfProtection(string filePath)
{
try
{
PdfReader reader = new PdfReader(filePath);
if (!reader.IsEncrypted()) return;
if (!PdfEncryptor.IsPrintingAllowed(reader.Permissions))
throw new InvalidOperationException("the selected file is print protected and cannot be imported");
if (!PdfEncryptor.IsModifyContentsAllowed(reader.Permissions))
throw new InvalidOperationException("the selected file is write protected and cannot be imported");
}
catch (BadPasswordException) { throw new InvalidOperationException("the selected file is password protected and cannot be imported"); }
catch (BadPdfFormatException) { throw new InvalidDataException("the selected file is having invalid format and cannot be imported"); }
}
参考:フルパーミッションの確認
プロパティ PdfReader.IsOpenedWithFullPermissions を確認するだけでよいはずです。
PdfReader r = new PdfReader("YourFile.pdf");
if (r.IsOpenedWithFullPermissions)
{
//Do something
}