7

PDFファイルがパスワードで保護されているか、閲覧できないかを確認したい。つまり、pdfファイルにユーザーパスワードがあるかどうかを知りたいのです。

関数を使用するためのフォーラムでいくつかのヘルプを見つけましisencryptedたが、正しい答えは得られません。

PDFがパスワードで保護されているかどうかを確認することはできますか?

4

4 に答える 4

17

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 がパスワードで保護されているかどうかを確認する唯一の方法です。うまくいけば、誰かがより良い解決策を提案します。

于 2012-07-02T19:43:16.300 に答える
6
  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"); }
        }
于 2014-01-24T12:52:22.417 に答える
2

参考:フルパーミッションの確認

プロパティ PdfReader.IsOpenedWithFullPermissions を確認するだけでよいはずです。

PdfReader r = new PdfReader("YourFile.pdf");
if (r.IsOpenedWithFullPermissions)
{
    //Do something
}
于 2012-07-02T18:18:02.803 に答える