0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C# で PDF 権限を制御する:印刷やコピーの禁止など

0
Posted at

文書セキュリティ管理では、プログラムによって PDF のアクセス権限(印刷禁止、コピー禁止など)を制御することが一般的な要件です。本記事では、Free Spire.PDF for .NET の無料ライブラリを使用し、その PdfSecurityPolicy クラスに基づいて、簡潔な C# コードで権限設定を行う方法を紹介します。

2種類のパスワードの役割

  • ユーザーパスワード(User Password):文書を開くときに入力するパスワード。空文字列に設定した場合、開く際にパスワードは不要です。
  • オーナーパスワード(Owner Password):文書権限を制御するための「管理パスワード」。オーナーパスワードの保持者は、各操作制限を設定または解除できます。

ユーザーパスワードは「開けるかどうか」を、オーナーパスワードは「何ができるか」を決定します。

環境準備

NuGet 経由で無料版パッケージをインストールします:

PM> Install-Package FreeSpire.PDF

この無料版には機能ウォーターマークはありませんが、ページ数制限(最初の10ページ)があり、評価や小規模プロジェクトに適しています。

コアクラス:PdfSecurityPolicy

この無料 PDF ライブラリでは、PdfSecurityPolicy とその派生クラス PdfPasswordSecurityPolicy を使用して、暗号化アルゴリズム、パスワード、権限を一元管理します。この方式では関心事が分離されるため、コードがより明確になります。

基本的な手順

  1. PDF 文書を読み込む
  2. PdfPasswordSecurityPolicy を作成し、ユーザーパスワードとオーナーパスワードを渡す
  3. 暗号化アルゴリズム(例:AES-256)を設定する
  4. DocumentPrivilege プロパティで許可または禁止する操作を指定する
  5. doc.Encrypt(securityPolicy) を呼び出してポリシーを適用する
  6. 文書を保存する

例:印刷とコピーを禁止し、フォーム入力を許可

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");
        }
    }
}

PDFpermission.png

権限プロパティ一覧

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 権限制御を扱う際の推奨プラクティスです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?