PDF、組版と文書変換のアンテナハウス株式会社

サイトマップ
hr トップ
ページ
hr デスクトップ
製品情報
hr システム
製品情報
hr DITA
サービス
hr 電子書籍
サービス
hr サポート hr 製品の購入
について
hr お問い合わせ hr 会社案内 hr

評価版のお申し込み

OEMについて詳しくはこちら

サポートについて

PDF Tool API V5.0 サンプル集 [ セキュリティの情報取得と設定 ]

サンプルコードの仕様概要


コマンドラインでの実行例


ダウンロード


出力結果 表示イメージ
セキュリティ設定結果イメージ

C#サンプルコード
/*
	Antenna House PDF Tool API V5.0
	.NET Interface sample program

	概要:セキュリティ情報の取得と設定

	Copyright 2013-2016 Antenna House, Inc.
*/

using System;
using PdfTkNet;

namespace Encrypt
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length < 2)
            {
                Console.WriteLine("usage: Encrypt.exe in-pdf-file out-pdf-file (in-pdf-password)");
                return;
            }

            try
            {
                using (PtlParamInput inputFile = new PtlParamInput(args[0]))
                using (PtlParamOutput outputFile = new PtlParamOutput(args[1]))
                using (PtlPDFDocument doc = new PtlPDFDocument())
                {
                    if (args.Length > 2)
                    {
                        string password = (string)args[2];
                        // パスワードのセット
                        doc.setPassword(password);
                    }

                    // PDFファイルをロードします。
                    doc.load(inputFile);

                    // 暗号化の取得
                    if (doc.isEncrypted())
                    {
                        // 暗号化情報の取得
                        showEncrypt(doc);
                    }
                    else
                    {
                        Console.WriteLine("暗号化されていないファイルです");
                    }

                    // セキュリティ設定
                    encrypt(doc);

                    // ファイルに保存します。
                    doc.save(outputFile);
                }
            }
            catch (PtlException pex)
            {
                Console.WriteLine(pex.getErrorCode() + " : " + pex.getErrorMessageJP());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.WriteLine("-- 完了 --");
            }
        }

        static void showEncrypt(PtlPDFDocument doc)
        {
            //暗号化情報の取得
            using (PtlEncrypt encrypt = doc.getEncrypt())	// 暗号化されていないと例外が発生
            {
                //キー長の取得
                Console.WriteLine("KeyLength : " + encrypt.getKeyLength());

                //暗号化する文書コンポーネント取得
                switch (encrypt.getEncryptComponent())
                {
                case PtlEncrypt.ENCRYPT_COMPONENT.ENCRYPT_ALL:
                    Console.WriteLine("文書の全てのコンテンツを暗号化");
                    break;
                case PtlEncrypt.ENCRYPT_COMPONENT.ENCRYPT_EXCEPT_METADATA:
                    Console.WriteLine("文書のメタデータを除く全てのコンテンツを暗号化");
                    break;
                case PtlEncrypt.ENCRYPT_COMPONENT.ENCRYPT_ONLY_ATTACHED_FILE:
                    Console.WriteLine("添付ファイルのみを暗号化(AES暗号化のみで有効)");
                    break;
                }

                //暗号化のフィルター取得
                //FILTER_STANDARD = 1 /* 標準セキュリティハンドラ */
                if (encrypt.getFilterType() == PtlEncrypt.FILTER_TYPE.FILTER_STANDARD)
                {	// いまはStandardしかない
                    PtlEncryptStandard encryptStandard = (PtlEncryptStandard)encrypt;

                    //標準セキュリティハンドラのメソッド取得
                    switch (encryptStandard.getMethod())
                    {
                    case PtlEncryptStandard.STANDARD_METHOD_TYPE.METHOD_RC4:
                        Console.WriteLine("標準セキュリティハンドラのメソッド : RC4");
                        break;
                    case PtlEncryptStandard.STANDARD_METHOD_TYPE.METHOD_AES:
                        Console.WriteLine("標準セキュリティハンドラのメソッド : AES");
                        break;
                    }

                    //ユーザアクセス許可フラグの取得
                    using (PtlEncryptPermission perms = encryptStandard.getPermission())
                    {
                        //タイプ取得
                        switch (perms.getType())
                        {
                        case PtlEncryptPermission.PERM_TYPE.PERM_TYPE1:
                            {
                                Console.WriteLine("RC4 40 ビット 暗号化での権限");
                                PtlEncryptPermissionType1 perms1 = (PtlEncryptPermissionType1)perms;
                                //印刷権限取得
                                if (perms1.getPrint())
                                {
                                    Console.WriteLine("印刷を許可する");
                                }
                                else
                                {
                                    Console.WriteLine("印刷を許可しない");
                                }
                                //変更権限取得
                                switch (perms1.getModify())
                                {
                                case PtlEncryptPermissionType1.PERMISSION_MODIFY.PERM_MODIFY_NOT_ALLOWED:
                                    Console.WriteLine("変更権限 : 許可しない");
                                    break;
                                case PtlEncryptPermissionType1.PERMISSION_MODIFY.PERM_MODIFY_ANNOTANDFORM:
                                    Console.WriteLine("変更権限 : 注釈の作成、フォームフィールドの入力と既存の署名フィールドに署名");
                                    break;
                                case PtlEncryptPermissionType1.PERMISSION_MODIFY.PERM_MODIFY_ASSENBLEANDFORM:
                                    Console.WriteLine("変更権限 : ページレイアウト、フォームフィールドの入力と既存の署名フィールドに署名");
                                    break;
                                case PtlEncryptPermissionType1.PERMISSION_MODIFY.PERM_MODIFY_MODYFYDOC:
                                    Console.WriteLine("変更権限 : ページ抽出を除く全ての動作");
                                    break;
                                }
                                //テキスト、画像、その他の内臓のコピーおよびアクセシビリティを有効にするかどうかの取得
                                if (perms1.getCopy())
                                {
                                    Console.WriteLine("テキスト、画像、その他の内臓のコピーおよびアクセシビリティを有効にする");
                                }
                                else
                                {
                                    Console.WriteLine("テキスト、画像、その他の内臓のコピーおよびアクセシビリティを有効にしない");
                                }
                            }
                            break;
                        case PtlEncryptPermission.PERM_TYPE.PERM_TYPE2:
                            {
                                Console.WriteLine("RC4 40 ビット以外の暗号化での権限");
                                PtlEncryptPermissionType2 perms2 = (PtlEncryptPermissionType2)perms;
                                //印刷権限取得
                                switch (perms2.getPrint())
                                {
                                case PtlEncryptPermissionType2.PERMISSION_PRINT.PERM_PRINT_NOT_ALLOWED:
                                    Console.WriteLine("印刷権限 : 許可しない");
                                    break;
                                case PtlEncryptPermissionType2.PERMISSION_PRINT.PERM_PRINT_LOW:
                                    Console.WriteLine("印刷権限 : 低解像度");
                                    break;
                                case PtlEncryptPermissionType2.PERMISSION_PRINT.PERM_PRINT_HIGH:
                                    Console.WriteLine("印刷権限 : 高解像度");
                                    break;
                                }
                                //変更権限取得
                                switch (perms2.getModify())
                                {
                                case PtlEncryptPermissionType2.PERMISSION_MODIFY.PERM_MODIFY_NOT_ALLOWED:
                                    Console.WriteLine("変更権限 : 許可しない");
                                    break;
                                case PtlEncryptPermissionType2.PERMISSION_MODIFY.PERM_MODIFY_ASSENBLEDOC:
                                    Console.WriteLine("変更権限 : ページの挿入、削除、回転");
                                    break;
                                case PtlEncryptPermissionType2.PERMISSION_MODIFY.PERM_MODIFY_FILLFORM:
                                    Console.WriteLine("変更権限 : フォームフィールドの入力と既存の署名フィールドに署名");
                                    break;
                                case PtlEncryptPermissionType2.PERMISSION_MODIFY.PERM_MODIFY_ANNOTANDFORM:
                                    Console.WriteLine("変更権限 : 注釈の作成、フォームフィールドの入力と既存の署名フィールドに署名");
                                    break;
                                case PtlEncryptPermissionType2.PERMISSION_MODIFY.PERM_MODIFY_MODYFYDOC:
                                    Console.WriteLine("変更権限 : ページ抽出を除く全ての動作");
                                    break;
                                }
                                //テキスト、画像、その他の内臓のコピーを有効にするかどうかの取得
                                if (perms2.getCopy())
                                {
                                    Console.WriteLine("テキスト、画像、その他の内臓のコピーを有効にする");
                                }
                                else
                                {
                                    Console.WriteLine("テキスト、画像、その他の内臓のコピーを有効にしない");
                                }
                                //スクリーンリーダーデバイスのテキストアクセスを有効にするかどうかの取得
                                if (perms2.getAccesibility())
                                {
                                    Console.WriteLine("スクリーンリーダーデバイスのテキストアクセスを有効にする");
                                }
                                else
                                {
                                    Console.WriteLine("スクリーンリーダーデバイスのテキストアクセスを有効にしない");
                                }
                            }
                            break;
                        }
                    }
                }
            }
        }

        static void encrypt(PtlPDFDocument doc)
        {
            // RC4 または AES を選択して暗号化の設定を変更する
            int selEncript;
            Console.WriteLine("RC4 または AES を選択して暗号化の設定を変更する\n1 : 40 bit RC4    2 : 256 bit AES");
            int.TryParse(Console.ReadLine(), out selEncript);

            switch (selEncript)
            {
            case 1:
                // 40 bit RC4
                encrypt40RC4(doc);
                break;
            case 2:
                // 256 bit AES
                encrypt256AES(doc);
                break;
            }
        }

        static void encrypt40RC4(PtlPDFDocument doc)
        {
            // 40 bit RC4
            using (PtlEncryptStandard40RC4 enc = new PtlEncryptStandard40RC4())
            {
                // 文書の全てのコンテンツを暗号化
                enc.setEncryptComponent(PtlEncrypt.ENCRYPT_COMPONENT.ENCRYPT_ALL);

                // ユーザパスワード値の設定
                enc.setUserPassword("pass");

                // オーナーパスワード値の設定
                enc.setOwnerPassword("test");

                using (PtlEncryptPermissionType1 typ = new PtlEncryptPermissionType1())
                {
                    // 印刷権限の設定
                    // false: 印刷を許可しない
                    typ.setPrint(false);

                    // 変更権限の設定
                    // PERM_MODIFY_MODYFYDOC = 3 /* ページ抽出を除く全ての動作 */
                    typ.setModify(PtlEncryptPermissionType1.PERMISSION_MODIFY.PERM_MODIFY_MODYFYDOC);

                    // テキスト、画像、その他の内臓のコピーおよびアクセシビリティを有効にするかどうかの設定
                    // true: 有効にする
                    typ.setCopy(true);

                    // ユーザアクセス許可フラグの設定
                    enc.setPermission(typ);
                }

                // 暗号化情報の設定
                doc.setEncrypt(enc);
            }
        }

        static void encrypt256AES(PtlPDFDocument doc)
        {
            // 256 bit AES
            using (PtlEncryptStandard256AES enc = new PtlEncryptStandard256AES())
            {
                // 文書の全てのコンテンツを暗号化
                enc.setEncryptComponent(PtlEncrypt.ENCRYPT_COMPONENT.ENCRYPT_ALL);

                // ユーザパスワード値の設定
                enc.setUserPassword("pass");

                // オーナーパスワード値の設定
                enc.setOwnerPassword("test");

                using (PtlEncryptPermissionType2 typ = new PtlEncryptPermissionType2())
                {
                    // 印刷権限の設定
                    // PERM_PRINT_LOW = 1, /* 低解像度 */
                    typ.setPrint(PtlEncryptPermissionType2.PERMISSION_PRINT.PERM_PRINT_LOW);

                    // 変更権限の設定
                    // PERM_MODIFY_ASSENBLEDOC = 1, /* ページの挿入、削除、回転 */
                    typ.setModify(PtlEncryptPermissionType2.PERMISSION_MODIFY.PERM_MODIFY_ASSENBLEDOC);

                    // テキスト、画像、その他の内臓のコピーを有効にするかどうかの設定
                    // false: 有効にしない
                    typ.setCopy(false);

                    // スクリーンリーダーデバイスのテキストアクセスを有効にするかどうかの設定
                    // true: 有効にする
                    typ.setAccesibility(true);

                    //ユーザアクセス許可フラグの設定
                    enc.setPermission(typ);
                }

                // 暗号化情報の設定
                doc.setEncrypt(enc);
            }
        }
    }
}
スペース
トップページサポートお問い合わせ会社案内
サイトマップ個人情報保護の考え方とお願い
Copyright Antenna House, Inc. All rights reserved.
Antenna House is a trademark of Antenna House, Inc.