文書セキュリティ管理では、プログラムによって PDF のアクセス権限(印刷禁止、コピー禁止など)を制御することが一般的な要件です。本記事では、Free Spire.PDF for .NET の無料ライブラリを使用し、その PdfSecurityPolicy クラスに基づいて、簡潔な C# コードで権限設定を行う方法を紹介します。
2種類のパスワードの役割
- ユーザーパスワード(User Password):文書を開くときに入力するパスワード。空文字列に設定した場合、開く際にパスワードは不要です。
- オーナーパスワード(Owner Password):文書権限を制御するための「管理パスワード」。オーナーパスワードの保持者は、各操作制限を設定または解除できます。
ユーザーパスワードは「開けるかどうか」を、オーナーパスワードは「何ができるか」を決定します。
環境準備
NuGet 経由で無料版パッケージをインストールします:
PM> Install-Package FreeSpire.PDF
この無料版には機能ウォーターマークはありませんが、ページ数制限(最初の10ページ)があり、評価や小規模プロジェクトに適しています。
コアクラス:PdfSecurityPolicy
この無料 PDF ライブラリでは、PdfSecurityPolicy とその派生クラス PdfPasswordSecurityPolicy を使用して、暗号化アルゴリズム、パスワード、権限を一元管理します。この方式では関心事が分離されるため、コードがより明確になります。
基本的な手順
- PDF 文書を読み込む
-
PdfPasswordSecurityPolicyを作成し、ユーザーパスワードとオーナーパスワードを渡す - 暗号化アルゴリズム(例:AES-256)を設定する
-
DocumentPrivilegeプロパティで許可または禁止する操作を指定する -
doc.Encrypt(securityPolicy)を呼び出してポリシーを適用する - 文書を保存する
例:印刷とコピーを禁止し、フォーム入力を許可
using Spire.Pdf;
using Spire.Pdf.Security;
namespace PdfPermissionDemo
{
class Program
{
static void Main(string[] args)
{
// 1. PDF を読み込む
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("元の文書.pdf");
// 2. パスワードセキュリティポリシーを作成
string userPwd = ""; // 開くのにパスワード不要
string ownerPwd = "owner@2026"; // 権限パスワード
PdfPasswordSecurityPolicy policy = new PdfPasswordSecurityPolicy(
userPwd, ownerPwd);
// 3. AES-256 暗号化を使用(より安全)
policy.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES_256;
// 4. 権限を設定
policy.DocumentPrivilege.AllowPrint = false; // 印刷を禁止
policy.DocumentPrivilege.AllowContentCopying = false; // コピーを禁止
policy.DocumentPrivilege.AllowModifyAnnotations = false; // 注釈の変更を禁止
// フォーム入力を許可(デフォルトで許可、無効にする場合は false に設定)
policy.DocumentPrivilege.AllowFillFormFields = true;
// 5. 暗号化ポリシーを適用
doc.Encrypt(policy);
// 6. 新しい文書を保存
doc.SaveToFile("制限付き文書.pdf");
}
}
}
権限プロパティ一覧
PdfDocumentPrivilege クラスは、以下の一般的なブール型プロパティを提供しており、個別に設定できます:
| プロパティ | 説明 |
|---|---|
AllowPrint |
印刷を許可するかどうか |
AllowContentCopying |
テキストとグラフィックスのコピーを許可するかどうか |
AllowModifyAnnotations |
注釈の追加または変更を許可するかどうか |
AllowFillFormFields |
フォームフィールドへの入力を許可するかどうか |
AllowModifyContents |
文書内容(注釈以外)の変更を許可するかどうか |
AllowAssembly |
ページの挿入/回転/削除を許可するかどうか(128 ビット以上の暗号化のみ) |
通常の方法は次のとおりです:
- 少数の操作だけを許可する場合は、まず
ForbidAllを設定し、必要な項目だけを個別に有効にします。 - 少数の操作だけを禁止する場合は、まず
AllowAllを設定し、不要な項目を無効にします。
例:印刷のみを許可し、それ以外をすべて禁止
policy.DocumentPrivilege = PdfDocumentPrivilege.ForbidAll;
policy.DocumentPrivilege.AllowPrint = true;
複数権限の組み合わせ
すべての権限プロパティは独立して設定でき、互いに影響しません。たとえば、高品質印刷と内容のコピーを許可し、変更を禁止する場合:
policy.DocumentPrivilege = PdfDocumentPrivilege.AllowAll;
policy.DocumentPrivilege.AllowPrint = true;
policy.DocumentPrivilege.AllowContentCopying = true;
policy.DocumentPrivilege.AllowModifyContents = false;
policy.DocumentPrivilege.AllowModifyAnnotations = false;
補足:権限保護の解除(復号)
暗号化された PDF を復号する必要がある場合は、オーナーパスワードを指定して読み込んだ後、Decrypt() を呼び出します:
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("制限付き文書.pdf", "owner@2026"); // オーナーパスワードを渡す
doc.Decrypt();
doc.SaveToFile("復号済み.pdf");
注意事項
- ユーザーパスワードが空:文書を開くのにパスワードは不要ですが、権限制限は引き続き有効です(オーナーパスワードの保持者によって制御されます)。
-
暗号化アルゴリズム:
AES_256は最も安全性が高いですが、古い PDF リーダーではサポートされない可能性があります。互換性が必要な場合はAES_128を使用できます。 - 無料版の制限:Free Spire.PDF には文書のページ数制限(通常 10 ページ)があり、それを超える部分は処理できない可能性があります。評価時は小さなファイルでテストしてください。
まとめ
PdfSecurityPolicy を通じて、開発者はオブジェクト指向の方法で PDF の暗号化と権限を明確に管理できます。わずか数行のコードで、印刷、コピー、変更などの操作を柔軟に制御でき、企業の文書セキュリティ要件を満たします。この方法はコードの可読性が高く、保守も容易で、PDF 権限制御を扱う際の推奨プラクティスです。
