機密情報または極秘情報が含まれている PDF ドキュメントには、セキュリティを設定して、承認されていないユーザーによるアクセスまたは変更を制限する必要があります。PDF のセキュリティの詳細については、PDF 仕様 1.7(セクション 7.6.3)を参照してください。
DioDocs for PDF を使用すると、暗号化、パスワード保護、権限の設定などのさまざまな機能により、PDF ドキュメントを不要なアクセスから保護できます。
機密情報または極秘情報が含まれている PDF ドキュメントには、セキュリティを設定して、承認されていないユーザーによるアクセスを制限する必要があります。GcPDFのSecurity クラスを使用して、ドキュメントを暗号化し、承認されていないユーザーへのアクセスを拒否できます。
標準セキュリティハンドラリビジョン4を使用して、PDF ファイルを暗号化するには
C# |
コードのコピー
|
---|---|
public void CreatePDF(Stream stream) { GcPdfDocument doc = new GcPdfDocument(); var page = doc.NewPage(); var g = page.Graphics; const float In = 150; //暗号化を追加します var std = new StandardSecurityHandlerRev4(); std.OwnerPassword = "abc"; std.UserPassword = "qwe"; // EncyptionAlgorithmを設定します std.EncryptionAlgorithm = EncryptionAlgorithm.RC4; std.EncryptionKeyLength = 128; // EncryptHandlerプロパティを設定します doc.Security.EncryptHandler = std; // DrawStringメソッドを使用してテキストをレンダリングします g.DrawString("Welcome to GrapeCity, Inc", new TextFormat() { Font = StandardFonts.TimesBold, FontSize = 12 }, new PointF(In, In)); // ドキュメントを保存します doc.Save(stream); } |
GcPDFは、256-bit AES暗号化を使用する標準セキュリティハンドラリビジョン6(PDF 2.0仕様で定義)もサポートしています。
標準セキュリティハンドラリビジョン6を使用して、PDF ファイルを暗号化するには
C# |
コードのコピー
|
---|---|
public void CreatePDF(Stream stream) { GcPdfDocument doc = new GcPdfDocument(); var page = doc.NewPage(); var g = page.Graphics; const float In = 150; // 暗号化を追加します var ssh = new StandardSecurityHandlerRev6(); ssh.OwnerPassword = "password"; ssh.PrintingPermissions = PrintingPermissions.Enabled; // EncryptHandlerプロパティを設定します doc.Security.EncryptHandler = ssh; // DrawStringメソッドを使用してテキストをレンダリングします g.DrawString("Welcome to GrapeCity, Inc", new TextFormat() { Font = StandardFonts.TimesBold, FontSize = 12 }, new PointF(In, In)); // ドキュメントを保存します doc.Save(stream); } |
PDF ドキュメントに対する権限を設定することで、他のユーザーによるドキュメントのコピー・印刷・編集を防ぐことはできます。DioDocs for PDF ライブラリの Security クラスを使用すると、ユーザーは PDF ドキュメントに権限を設定できます。
PDF ドキュメントで権限を設定するには
C# |
コードのコピー
|
---|---|
public void CreatePDF(Stream stream) { GcPdfDocument doc = new GcPdfDocument(); var page = doc.NewPage(); var g = page.Graphics; int In = 72; // セキュリティハンドラを作成します var std = new StandardSecurityHandlerRev3(); std.EditingPermissions = EditingPermissions.Enabled; std.OwnerPassword = "abc"; std.UserPassword = "qwe"; // 権限を設定します std.EditingPermissions = EditingPermissions.Enabled; std.CopyContentPermissions = CopyContentPermissions.Enabled; std.PrintingPermissions = PrintingPermissions.Disabled; doc.Security.EncryptHandler = std; // DrawStringメソッドを使用してテキストをレンダリングします g.DrawString("Welcome to GrapeCity, Inc.", new TextFormat() { Font = StandardFonts.TimesBold, FontSize = 12 }, new PointF(In, In)); // ドキュメントを保存します doc.Save(stream); } |
パスワードを指定せずに暗号化された PDF ファイルのロードが必要となる場合もあります。DioDocs for PDF では、パスワードを指定せずにパスワードで保護された PDF ファイルを開くには、DecryptionOptions クラスの ThrowExceptionIfInvalidPassword プロパティ (フラグ) を false に設定してから、 (デフォルトでは true です)、GcPdfDocument クラスの Load(Stream stream, DecryptionOptions decryptionOptions) オーバーロードを使用します。この方法で開いた PDF でできることには多くの制限がありますが、次のことができます。
PDF形式には「オブジェクトストリーム」機能があります。 オブジェクトストリームとは、最外側のファイルレベルではなく、一連の間接オブジェクトが格納されるストリーム オブジェクトです。PDF が暗号化されている場合、オブジェクトストリームも暗号化されるため、PDF オブジェクトにはアクセスできません。したがって、DioDocs for PDF では、パスワードを指定せずにオブジェクト ストリーム関数で PDF ファイルを開くことができず、例外が発生します。パスワードを指定せずにパスワードで保護された PDF を操作する場合、次のことはできません。
次のセクションでは、パスワードを指定せずに暗号化された PDF ファイルを操作する場合に役立つシナリオをいくつか示します。
C# |
コードのコピー
|
---|---|
using (FileStream fs = new FileStream("Sample.pdf", FileMode.Open, FileAccess.Read, FileShare.Read)) { // GcPdfDocument を初期化します。 GcPdfDocument doc = new GcPdfDocument(); // PDF ファイルをロードし、復号化オプションを false に設定します。 doc.Load(fs, new DecryptionOptions() { ThrowExceptionIfInvalidPassword = false, ThrowExceptionIfUnsupportedSecurityOptions = false }); // PDF ファイルの最初のページをアクティブ ページとして設定します。 var page = doc.Pages[0]; // ページサイズを取得します。 var pageSize = page.Size; // 正方形注釈を追加します。 SquareAnnotation sa = new SquareAnnotation(); sa.Page = page; /* UserName を削除します。これはデフォルトで初期化されており、 文字列を暗号化できないため、ドキュメントの保存時に例外が発生します。 */ sa.UserName = null; // ページに正方形を追加します。 sa.Rect = new RectangleF(10, 10, pageSize.Width - 20, pageSize.Height - 20); // 正方形の色を設定します。 sa.Color = Color.Red; // PDF ファイルを保存します。 doc.Save("Annotation.pdf"); } |
C# |
コードのコピー
|
---|---|
using (FileStream fs = new FileStream("Sample.pdf", FileMode.Open, FileAccess.Read, FileShare.Read)) { // GcPdfDocument を初期化します。 GcPdfDocument doc = new GcPdfDocument(); // PDF ファイルをロードし、復号化オプションを false に設定します。 doc.Load(fs, new DecryptionOptions() { ThrowExceptionIfInvalidPassword = false, ThrowExceptionIfUnsupportedSecurityOptions = false }); // メタデータが暗号化されているかどうかを確認し、暗号化されていない場合はメタデータを変更します。 bool encryptMetadata = true; if (doc.Security.EncryptHandler is StandardSecurityHandlerRev4 ssh) encryptMetadata = ssh.EncryptMetadata; if (!encryptMetadata) { // メタデータが暗号化されません。 Metadata m = doc.Metadata; Console.WriteLine("The document has not encrypted metadata:"); Console.WriteLine($"CreatorTool: {m.CreatorTool}"); Console.WriteLine($"CreateDate: {m.CreateDate}"); } else { Console.WriteLine("The document metadata is ENCRYPTED"); } } |
C# |
コードのコピー
|
---|---|
using (FileStream fs = new FileStream("Sample.pdf", FileMode.Open, FileAccess.Read, FileShare.Read)) { // GcPdfDocument を初期化します。 GcPdfDocument doc = new GcPdfDocument(); // PDF ファイルをロードし、復号化オプションを false に設定します。 doc.Load(fs, new DecryptionOptions() { ThrowExceptionIfInvalidPassword = false, ThrowExceptionIfUnsupportedSecurityOptions = false }); // メタデータが暗号化されているかどうかを確認し、暗号化されていない場合はメタデータを変更します。 bool encryptMetadata = true; if (doc.Security.EncryptHandler is StandardSecurityHandlerRev4 ssh) encryptMetadata = ssh.EncryptMetadata; if (!encryptMetadata) { // メタデータが暗号化されません。 Metadata m = doc.Metadata; Console.WriteLine("The document has not encrypted metadata:"); Console.WriteLine($"CreatorTool: {m.CreatorTool}"); Console.WriteLine($"CreateDate: {m.CreateDate}"); // CreatorToolの値を変更します。 m.CreatorTool = "New value of CreatorTool"; doc.Save(@"MetaData.pdf"); } else { Console.WriteLine("The document metadata is ENCRYPTED"); } } |
C# |
コードのコピー
|
---|---|
using (FileStream fs = new FileStream("Sample.pdf", FileMode.Open, FileAccess.Read, FileShare.Read)) { // GcPdfDocument を初期化します。 GcPdfDocument doc = new GcPdfDocument(); // PDF ファイルをロードし、復号化オプションを false に設定します。 doc.Load(fs, new DecryptionOptions() { ThrowExceptionIfInvalidPassword = false, ThrowExceptionIfUnsupportedSecurityOptions = false }); // 最初のページと 2 番目のページを入れ替えます。 doc.Pages.Swap(0, 1); // PDF ファイルを保存します。 doc.Save("PageOrder.pdf"); } |
C# |
コードのコピー
|
---|---|
using (FileStream fs = new FileStream("Sample.pdf", FileMode.Open, FileAccess.Read, FileShare.Read)) { // GcPdfDocument を初期化します。 GcPdfDocument doc = new GcPdfDocument(); // PDF ファイルをロードし、復号化オプションを false に設定します。 doc.Load(fs, new DecryptionOptions() { ThrowExceptionIfInvalidPassword = false, ThrowExceptionIfUnsupportedSecurityOptions = false }); // CheckBoxField の値を変更します。 var cbf = (CheckBoxField)doc.AcroForm.Fields[0]; cbf.Checked = true; // RadioButtonField の値を変更します。 var rbf = (RadioButtonField)doc.AcroForm.Fields[1]; var values = rbf.GetCheckedAppearanceStreamNames(); rbf.Value = values[0]; // PDF ファイルを保存します。 doc.Save("FieldValue.pdf"); } |
C# |
コードのコピー
|
---|---|
using (FileStream fs = new FileStream("Sample.pdf", FileMode.Open, FileAccess.Read, FileShare.Read)) { // GcPdfDocument を初期化します。 GcPdfDocument doc = new GcPdfDocument(); // PDF ファイルをロードし、復号化オプションを false に設定します。 doc.Load(fs, new DecryptionOptions() { ThrowExceptionIfInvalidPassword = false, ThrowExceptionIfUnsupportedSecurityOptions = false }); // CheckBoxField の値を変更します。 var tf = (TextField)doc.AcroForm.Fields[2]; tf.PdfValue = new PdfName("New Value"); // CombTextField の値を変更します。 var ctf = (CombTextField)doc.AcroForm.Fields[3]; ctf.PdfValue = new PdfName("NEW"); // AcroFormのNeedAppearancesエントリを設定します。 doc.AcroForm.Set(PdfName.Std.NeedAppearances, PdfBool.True); // PDF ファイルを保存します。 doc.Save("TextField.pdf"); } |
C# |
コードのコピー
|
---|---|
using (FileStream fs = new FileStream("Sample.pdf", FileMode.Open, FileAccess.Read, FileShare.Read)) { // GcPdfDocument を初期化します。 GcPdfDocument doc = new GcPdfDocument(); // PDF ファイルをロードし、復号化オプションを false に設定します。 doc.Load(fs, new DecryptionOptions() { ThrowExceptionIfInvalidPassword = false, ThrowExceptionIfUnsupportedSecurityOptions = false }); // ページ数とページのサイズを取得します。 Console.WriteLine($"Page count: {doc.Pages.Count}"); Console.WriteLine(); foreach (Page page in doc.Pages) { var sz = page.GetRenderSize(); Console.WriteLine($"Size of {page.Index} page: {sz.Width}x{sz.Height}"); } } |
先頭に戻る
DioDocs for PDF を使用してセキュリティを適用する方法については、DioDocs for PDF サンプルブラウザを参照してください。