特権を設定し、C++を使用してPDFファイルを暗号化および復号化する
既存のPDFファイルに特権を設定する
既存のPDFファイルに特権を設定するには、Aspose.PDF for C++を使用してDocumentPrivilegeクラスを使用し、ドキュメントに適用したい権利を指定します。特権が定義されたら、このオブジェクトをDocumentオブジェクトのEncryptメソッドに引数として渡します。
次のコードスニペットは、PDFファイルの特権を設定する方法を示しています。
void SecuringAndSigning::SetPrivilegesOnExistingPDF() {
// パス名のための文字列。
String _dataDir("C:\\Samples\\");
// ソースPDFファイルをロード
auto document = MakeObject<Document>(_dataDir + u"input.pdf");
// Document Privilegesオブジェクトをインスタンス化
// すべての権限に制限を適用
auto documentPrivilege = DocumentPrivilege::get_ForbidAll();
// スクリーンリーダーの使用のみ許可
documentPrivilege->set_AllowScreenReaders(true);
// ユーザーおよびオーナーパスワードでファイルを暗号化
// ユーザーパスワードでファイルを表示した際に、
// スクリーンリーダーオプションのみが有効化されるようにパスワードを設定する必要があります
document->Encrypt(u"user", u"owner", documentPrivilege, CryptoAlgorithm::AESx128, false);
// 更新されたドキュメントを保存
document->Save(_dataDir + u"SetPrivileges_out.pdf");
}
異なる暗号化タイプとアルゴリズムを使用してPDFファイルを暗号化する
PDFファイルの暗号化には、DocumentオブジェクトのEncryptメソッドを使用します。
以下のコードスニペットは、PDFファイルを暗号化する方法を示しています。
void SecuringAndSigning::EncryptPDFFile() {
// パス名用の文字列。
String _dataDir("C:\\Samples\\");
// ソースPDFファイルをロード
auto document = MakeObject<Document>(_dataDir + u"input.pdf");
// Document Privilegesオブジェクトをインスタンス化
// すべての特権に制限を適用
auto documentPrivilege = DocumentPrivilege::get_ForbidAll();
// 画面読み取りのみ許可
documentPrivilege->set_AllowScreenReaders(true);
// ユーザーおよび所有者のパスワードでファイルを暗号化。
// ユーザーがユーザーパスワードでファイルを表示したら、
// 画面読み取りオプションのみが有効になるように
document->Encrypt(u"user", u"owner", documentPrivilege, CryptoAlgorithm::AESx128, false);
// 更新されたドキュメントを保存
document->Save(_dataDir + u"SetPrivileges_out.pdf");
}
所有者パスワードを使用してPDFファイルを復号化する
PDFファイルを復号化するには、まずDocumentオブジェクトを作成し、所有者のパスワードを使用してPDFを開く必要があります。 その後、Decrypt メソッドを呼び出す必要があります。
void SecuringAndSigning::DecryptPDFFile() {
// パス名のための文字列。
String _dataDir("C:\\Samples\\");
// ドキュメントを開く
auto document = MakeObject<Document>(_dataDir + u"Decrypt.pdf", u"password");
// PDFを復号化
document->Decrypt();
// 更新されたPDFを保存
document->Save(_dataDir + u"Decrypt_out.pdf");
}
PDFファイルのパスワードを変更する
PDFは重要で機密性のある情報を含んでいる可能性があるため、安全でなければなりません。そのため、PDFドキュメントのパスワードを変更する必要があるかもしれません。
PDFファイルのパスワードを変更したい場合は、まずDocumentオブジェクトを使用してオーナーパスワードでPDFファイルを開く必要があります。その後、ChangePasswords メソッドを呼び出す必要があります。
次のコードスニペットは、PDFファイルのパスワードを変更する方法を示しています。
void SecuringAndSigning::ChangePassword_PDF_File() {
// String for path name.
String _dataDir("C:\\Samples\\");
// Open document
auto document = MakeObject<Document>(_dataDir + u"ChangePassword.pdf", u"owner");
// Change password
document->ChangePasswords(u"owner", u"newuser", u"newowner");
// Save updated PDF
document->Save(_dataDir + u"ChangePassword_out.pdf");
}
方法 - ソースPDFがパスワードで保護されているかどうかを判断する方法
ユーザーのパスワードで暗号化されたPDFドキュメントは、パスワードがないと開くことができません。 ドキュメントを開こうとする前に、パスワード保護されているかどうかを確認した方が良いでしょう。ドキュメントを開く際にパスワード情報が不要な場合もありますが、ファイルの内容を編集するために情報が必要な場合もあります。上記の要件を満たすために、Aspose.PDF.Facadesの下にあるPdfFileInfoクラスは、必要な情報を判断するのに役立つプロパティを提供します。
PDFドキュメントのセキュリティに関する情報を取得
PdfFileInfoには、PDFドキュメントのセキュリティ情報を取得するための3つのプロパティがあります。
- プロパティPasswordTypeは、PasswordType列挙値を返します:
-
PasswordType.None - ドキュメントはパスワード保護されていない
-
PasswordType.User - ドキュメントはユーザー(またはドキュメントオープン)パスワードで開かれた
-
PasswordType.Owner - ドキュメントはオーナー(または権限、編集)パスワードで開かれた
-
PasswordType.Inaccessible - ドキュメントはパスワード保護されているが、無効なパスワード(またはパスワードなし)が提供されたために開くためのパスワードが必要です。2. ブールプロパティ HasOpenPassword - 入力ファイルを開く際にパスワードが必要かどうかを判定するために使用されます。
-
- ブールプロパティ HasEditPassword - 入力ファイルの内容を編集するためにパスワードが必要かどうかを判定するために使用されます。
配列から正しいパスワードを判定する
時には、パスワードの配列から正しいパスワードを判定し、正しいパスワードでドキュメントを開く必要があります。以下のコードスニペットは、パスワードの配列を反復処理し、正しいパスワードでドキュメントを開こうとする手順を示しています。
void SecuringAndSigning::DetermineCorrectPasswordFromArray() {
// パス名の文字列。
String _dataDir("C:\\Samples\\");
// ソースPDFファイルをロード
auto info = MakeObject<PdfFileInfo>(_dataDir + u"IsPasswordProtected.pdf");
// ソースPDFが暗号化されているかどうかを判定
Console::WriteLine(u"ファイルはパスワードで保護されています {0}", info->get_IsEncrypted());
const int count = 5;
String passwords[count] = { u"test", u"test1", u"test2", u"owner", u"sample" };
for (int passwordcount = 0; passwordcount < count; passwordcount++)
{
try
{
auto document = MakeObject<Document>(_dataDir + u"IsPasswordProtected.pdf", passwords[passwordcount]);
auto pages = document->get_Pages()->get_Count();
if (pages > 0)
Console::WriteLine(u"ドキュメントのページ数 = {0}", pages);
}
catch (Aspose::Pdf::InvalidPasswordException ex)
{
Console::WriteLine(u"パスワード = {0} は正しくありません", passwords[passwordcount]);
}
}
Console::WriteLine(u"テスト終了");
}