BCL easyPDF SDK
easyPDF SDK Usermanual
PDF Creator Programming API  |  Download Free Trial  |  Contact Us to Purchase

CloseMemDecrypt Method

Closes the handle to the PDF file without any encryption-based security applied. All write operations to the PDF are finalized and all internal memory structures are released. Use this method if you want your output PDF to be decrypted.

Function CloseMemDecrypt() As Variant

byte[] CloseMemDecrypt()

byte[] CloseMemDecrypt() throws PDFProcessorException

Parameters

N/A.

Return Values

If the file handle is open and was obtained by calling OpenMem, the decrypted output PDF is returned.

Otherwise, if the file handle was obtained by calling OpenFile, or has already been previously closed, an empty array of size zero is returned.

While CloseMemDecrypt will always properly close the file handle regardless of how the handle was originally obtained, suggested practice is to call CloseMemDecrypt when the file handle was retrieved using OpenMem and modifications have been made to the PDF. This way you get the decrypted modified PDF stream back.

In all other cases, such as when the file handle was retrieved using OpenFile or the PDF was only queried but not modified, calling CloseDecrypt will suffice.

Remarks

Note 1:

If you want a decrypted output PDF, be sure to call CloseDecrypt or CloseMemDecrypt when you are finished modifying your PDF. If you do not close the file handle, the PDF will not be fully written out and is considered invalid. Additionally, memory used internally by the file handle will not be deallocated; in some languages and frameworks this will manifest as a memory leak, and in others it could result in unpredictable garbage collection since EasyPDF SDK is unmanaged code. Always be sure to call CloseDecrypt or CloseMemDecrypt when you want to write out a decrypted PDF.

Once the file handle is closed, no further calls on any of the handle's methods are allowed, except that Close, CloseMem, CloseEncrypt, CloseMemEncrypt, CloseDecrypt, or CloseMemDecrypt may be called repeatedly. Thus, if you are using the try-catch-finally idiom, you may safely call Close or its variants in the finally block regardless of earlier handle closes.

Note, however, that only the first call to Close, CloseMem, CloseEncrypt, CloseMemEncrypt, CloseDecrypt, or CloseMemEncrypt actually closes the file handle, and it does so regardless of success or failure. If the first call to Close or its variants fails for some reason, then the file handle is closed, its internal memory is freed, and an exception is thrown. Any call to Close or its variants other than the first call will be ignored (it will not do anything but will not produce an error either).

Note 2:

If your original input PDF was not encrypted, it is still safe to call CloseDecrypt or CloseMemDecrypt. In this situation, the behavior would be the same as if you had simply called Close or CloseMem.

Example Usage in VB.NET

Dim inMem() As Byte = File.ReadAllBytes("C:\test\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:\test\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:\test\output.pdf", outMem)
Catch ex As System.Runtime.InteropServices.COMException
   MessageBox.Show(ex.Message)
Finally
   oProcessorHandle.Close()
End Try

Example Usage in C#

byte[] inMem = File.ReadAllBytes(@"C:\test\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:\test\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:\test\output.pdf", outMem);
}
catch(System.Runtime.InteropServices.COMException ex)
{
   MessageBox.Show(ex.Message);
}
finally
{
   oProcessorHandle.Close();
}