CloseMemDecrypt メソッド

いかなる暗号化ベースのセキュリティの適用無しに、ハンドルをPDFファイルへ閉じる。 PDFへの全ての書き込み操作はファイナライズされ、そして全て内部メモリ構造はリリースされる。 暗号解除された出力PDFを得たい場合にこのメソッドを使用してください。

Function CloseMemDecrypt() As Variant

パラメータ

なし

戻り値

ファイルハンドルがOpenMemをコールすることによって開かれ、得られた場合、出力PDFが返されます。

さもなければ、ファイルハンドルがOpenFileをコールすることによって得られた、または既に以前に閉じられていた場合、サイズがゼロの空のアレイが返されます。

CloseMemDecrypt は、どのようなハンドルがもともと得られたかに関係なく、いつも適切にファイルハンドルを閉じますが、ファイルハンドルがOpenMemを使用することを検索された時、そして変更がPDFに施された際に、提案された実行はCloseMemDecrypt をコールすることです。この方法が変更されたPDFストリームを取り戻します。

その他の全ての場合において、すなわちファイルハンドルがOpenFileを使用することで検索された場合またはPDFが変更されず単にクエリーされた時は、CloseDecrypt をコールすることで十分でしょう。

注意点

備考 1:

もし、暗号を解除された出力PDFを得たい場合、PDFの変更を終了する際にCloseDecrypt またはCloseMemEncryp を確実にコールしてください。ファイルハンドルを閉じない場合、PDFファイルは完全に書き出されず無効とみなされるでしょう。更に、ファイルハ ンドルによって内部で使われるメモリが割り当てられないでしょう。; いくつかのプログラミング言語やフレームワークにおいて、これはメモリのリークとして現れ、その他においては、EasyPDF SDKが対応していないコードであるがために、予想のできない不要データのコレクションという結果になってしまうでしょう。暗号化されたPDFを書き出し たい場合、 常にCloseDecrypt またはCloseMemEncrypt を確実にコールしてください。

一旦ファイルハンドルが閉じられると、いかなるハンドルのメソッド上のコールも許可されません。例外としてCloseCloseMemCloseEncryptCloseMemEncryptCloseDecrypt または CloseMemDecrypt へは繰り返しコールされることが可能です。つまり、もしあなたが例外処理イディオムを使用すれば、安全にClose またはその変化型を早期のハンドルクローズに関係なく最終ブロック内で、コールすることができます。

しかしながら、1番目のコールしたCloseCloseMemCloseEncryptCloseMemEncryptCloseDecrypt またはCloseMemDecrypt だけが実際にファイルハンドルを閉じ、そしてそれは成功や失敗に関わらず実行されるということに注意してください。もし何らかの理由でClose またはその変化型への最初のコールが失敗した場合、その後ファイルハンドルは閉じられ、その内部メモリは自由になり、ある例外が発生します。1番目のコール以外のCloseまたはその変化型へのいかなるコールは無視されます。(それは何も実行せず、エラーも起しません。)

備考 2:

お持ちのオリジナル入力PDFが暗号化されていなかった場合、まだCloseDecryp またはCloseMemDecrypt を安全にコールできます。このような状況において、単純にCloseCloseMem をコールされた場合と同様の動作をします。

VB.NET における使用例

Dim inMem() As Byte = File.ReadAllBytes("C:\input.pdf")
Dim oProcessor As PDFProcessor = Nothing
Dim oProcessorHandle As PDFProcessorHandle = Nothing
Try
   oProcessor = New PDFProcessor
   oProcessorHandle = oProcessor.OpenMem(inMem, "ownerPassword")
   oProcessorHandle.AddHyperlink(0, _
                                 0, _
                                 50, _
                                 80, _
                                 370, _
                                 100, _
                                 "http://www.bcltechnologies.com", _
                                 prcAnnotBorderStyle.PRC_BORDERSTYLE_DASHLINE_MEDIUM, _
                                 0)
   oProcessorHandle.AddStamp("C:\image.jpg", _
                             0, _
                             prcStampHPosition.PRC_STAMP_HPOS_CENTER, _
                             prcStampVPosition.PRC_STAMP_VPOS_CENTER, _
                             prcStampZOrder.PRC_STAMP_ZORDER_TOP, _
                             0, _
                             0, _
                             0, _
                             100)
      Dim outMem() As Byte = oProcessorHandle.CloseMemDecrypt()
   File.WriteAllBytes("C:\output.pdf", outMem)
Catch ex As System.Runtime.InteropServices.COMException
   MessageBox.Show(ex.Message)
Finally
   oProcessorHandle.Close()
End Try

C#における使用例

byte[] inMem = File.ReadAllBytes(@"C:\input.pdf");
PDFProcessor oProcessor = null;
PDFProcessorHandle oProcessorHandle = null;
try
{
   oProcessor = new PDFProcessor();
   oProcessorHandle = oProcessor.OpenMem(inMem, "ownerPassword");
   oProcessorHandle.AddHyperlink(0,
                                 0, 
                                 50, 
                                 80, 
                                 370, 
                                 100, 
                                 "http://www.bcltechnologies.com", 
                                 prcAnnotBorderStyle.PRC_BORDERSTYLE_DASHLINE_MEDIUM, 
                                 0);
   oProcessorHandle.AddStamp(@"C:\image.jpg", 
                             0, 
                             prcStampHPosition.PRC_STAMP_HPOS_CENTER, 
                             prcStampVPosition.PRC_STAMP_VPOS_CENTER, 
                             prcStampZOrder.PRC_STAMP_ZORDER_TOP, 
                             0,
                             0, 
                             0, 
                             100);
      byte[] outMem = (byte[])oProcessorHandle.CloseMemDecrypt();
   File.WriteAllBytes(@"C:\output.pdf", outMem);
}
catch(System.Runtime.InteropServices.COMException ex)
{
   MessageBox.Show(ex.Message);
}
finally
{
   oProcessorHandle.Close();
}