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

CloseMem Method

Closes the handle to the PDF file. All write operations to the PDF are finalized and all internal memory structures are released.

Function CloseMem() As Variant

byte[] CloseMem()

byte[] CloseMem() throws PDFProcessorException

Parameters

N/A.

Return Values

If the file handle is open and was obtained by calling OpenMem, the 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 CloseMem will always properly close the file handle regardless of how the handle was originally obtained, suggested practice is to call CloseMem when the file handle was retrieved using OpenMem and modifications have been made to the PDF. This way you get the 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 Close will suffice.

Remarks

Always be sure to call Close, CloseMem, CloseEncrypt, CloseMemEncrypt, CloseDecrypt, or CloseMemDecrypt when you are finished modifying your PDF file. If Close or its variants are not called, the PDF file 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.

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 CloseMemDecrypt 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 on Encrypted PDFs:

Keep in mind thaf if the PDF whose file handle you are closing is encrypted, calling Close or CloseMem will produce an output PDF with the same security settings (for example password and permissions) as the original input PDF. If you want to change the security settings for your output PDF, then call CloseEncrypt or CloseMemEncrypt instead.

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, Nothing)
   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.CloseMem()

   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, null);
   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.CloseMem();

   File.WriteAllBytes(@"C:\test\output.pdf", outMem);
}
catch(System.Runtime.InteropServices.COMException ex)
{
   MessageBox.Show(ex.Message);
}
finally
{
   oProcessorHandle.Close();
}