このページには自動翻訳されたテキストを含めることができます。

C# および VB.NET で PDF ドキュメントを復号する

PDF ドキュメントは、パスワード、証明書で保護することも、保護しないこともできます。

PDF ドキュメントを開くにはいくつかの方法があります。推奨される方法は、最初に PDF ファイルが保護されているかどうかを確認することです。別の方法として、暗号化されているかどうかを事前に確認せずに任意の PDF ドキュメントを開こうとする方法があります。Docotic.Pdf ライブラリは、パスワードまたは証明書が必要なドキュメントに対して CannotDecryptPdfException 例外をスローします。

C# および VB.NET で PDF を復号し、PDF からパスワードを削除する

PDF ドキュメントが保護されているか確認する

このライブラリには、PDF ドキュメントが暗号化されているかどうかを確認するための GetEncryptionInfo メソッドがあります。これらのメソッドでは、ドキュメントの暗号化に使用された暗号化ハンドラーに関する情報も取得できます。

次の C# コードスニペットは、PDF ファイルが暗号化されているかどうかを確認する方法を示します。

var info = PdfDocument.GetEncryptionInfo(fileName);
if (info == null)
    Console.WriteLine("Is not encrypted");
else if (info is PdfStandardEncryptionInfo standardInfo)
    Console.WriteLine("Is encrypted with a password");
else if (info is PdfPublicKeyEncryptionInfo publicKeyInfo)
    Console.WriteLine("Is encrypted with a digital certificate(s)");

パスワードで暗号化された多くの PDF ドキュメントは、開くためにパスワードを必要としません。このような PDF ファイルでは、パスワードは "owner"(制限なし)モードでのみ必要です。

if (standardInfo.RequiresPasswordToOpen)
    Console.WriteLine("Can not be opened without a password");
else
    Console.WriteLine("Does not require a password");

証明書で暗号化された PDF ドキュメントについては、受信者に関する情報を取得できます。つまり、PDF ドキュメントのロック解除に使用できる証明書を確認できます。ドキュメントのアクセス権は、PDF ファイルの復号に実際に使用した証明書によって決まる点に注意してください。

// Recipients プロパティには証明書に関する情報が含まれます
// PDF ドキュメントの復号に使用できます
foreach (var recipient in publicKeyInfo.Recipients)
    Console.WriteLine(recipient.SerialNumber);

.NET で暗号化された PDF ドキュメントを開く

パスワードで暗号化された PDF ドキュメントは、開くためにパスワードが必要な場合と不要な場合があります。どちらの場合も、PdfDocument コンストラクター を使用してドキュメントを開きます。

PDF ファイルを開くためにパスワードが不要な場合は、復号ハンドラーのパラメーターを指定しないコンストラクターを使用します。Docotic.Pdf ライブラリは、そのドキュメントを "user"(制限付き)権限で開きます。

PDF ドキュメントを開くためにパスワードが必要な場合は、PdfStandardDecryptionHandler 型のハンドラーを指定したコンストラクターを使用します。保護された PDF ファイルを "owner"(制限なし)権限で開きたい場合も、同じコンストラクターを使用します。

次の C# コードスニペットは、パスワードで保護された PDF ファイルを開く方法を示します。

using var document = new PdfDocument(fileName, new PdfStandardDecryptionHandler("password"));
// 復号されたドキュメントで何らかの処理を行う

証明書で暗号化された PDF ドキュメントを開くには、一致する証明書が必要です。1 つの PDF ファイルに一致する証明書が複数ある場合があります。暗号化された PDF ドキュメントの作成者は、一致する証明書ごとに異なるアクセス権を付与できます。

現在のユーザーの X.509 証明書ストアに一致する証明書がインストールされている場合は、復号ハンドラーのパラメーターを指定しない PdfDocument コンストラクターを使用します。Docotic.Pdf ライブラリは、証明書ストア内で最初に一致した証明書を使用してドキュメントを開きます。

現在のユーザーの X.509 証明書ストアに一致する、または目的の証明書がインストールされていない場合は、PdfPublicKeyDecryptionHandler インスタンスを作成し、PdfDocument コンストラクターで使用します。証明書、キーストア、または証明書ストアを使用してハンドラーを作成できます。

次の C# コードスニペットは、キーストアからの証明書を使用して公開鍵復号ハンドラーを作成します。その後、そのハンドラーを使用して、証明書で保護された PDF ファイルを開きます。

var handler = new PdfPublicKeyDecryptionHandler("key-store.p12", "password");
using var document = new PdfDocument(fileName, handler);
// 復号されたドキュメントで何らかの処理を行う

PDF ファイルから保護を解除する

PDF ドキュメントから保護を解除するには、次の手順に従います。

  • 適切な復号ハンドラーを指定した PdfDocument コンストラクターで PDF を開く
  • 保存オプション で暗号化ハンドラーを設定しない
  • PDF ドキュメントを保存する

暗号化ハンドラーがなければ、ライブラリは PDF ドキュメントを暗号化せずに保存します。

PDF からパスワードを削除するには、PdfStandardDecryptionHandler 型のハンドラーでドキュメントを開きます。証明書で保護されたドキュメントには、PdfPublicKeyDecryptionHandler 型のハンドラーを使用してください。

.NET で PDF のアクセス権を確認する

PDF ドキュメントに付与された アクセス権 を確認するには、まずドキュメントを作成または開く必要があります。暗号化された PDF ファイルを開く場合でも、保護されていないファイルを開く場合でもかまいません。

次のコードスニペットは、C# で PDF のアクセス権を確認する方法を示します。

// 新しいドキュメントを作成するか、既存のドキュメントを開く
using var document = new PdfDocument(fileName);
Console.WriteLine("Document permissions = {0}", document.GrantedPermissions);