Home All Groups Group Topic Archive Search About

Adobe acrobat doesn't close my files?

Author
5 Apr 2006 2:41 PM
Joris De Groote
Hi,

I use Adobe Acrobat to read tekst from PDF files. After that the file has
been read, I move the file in a folder (using the date I got from the text I
got from Acrobat). Now here is my problem. When I want to move the file, I
get an error stating:
System.IO.IOException: The process cannot access the file
"x:\VF\2006-01\CVF-06000007.pdf" because it is being used by another
process.

Acrobat just doesn't want to close the file after it has been readed. I have
tried a few things like : (AcroApp is my AcroExch.App Object)

AcroApp.Close()
AcroApp.CloseAllDocs()
AcroApp.Exit()

However none seem to work. Can anybody help my close the file so the program
can move the pdf to where it belongs?

Thanks
Joris

Author
5 Apr 2006 3:38 PM
AlanT
I had similar problems working with PDFs using Acrobat 7.0

Are you using the Acrobat.CAcroPDDoc and/or Acrobat.CAcroAVDoc classes
for opening/reading the document?

If yes,
   Are you closing these when you are finished with them?
   Are you using IDisposable so that you control when they are
released?

The above
  AcroApp.Close()
  AcroApp.CloseAllDocs()
  AcroApp.Exit()

will close the docs   'as far as Acrobat is concerned'   but if you
have a reference to a document in your code the document will still be
used 'as far as the OS is concerned' until the reference releases -
which is why I ended up implementing IDisposable to control when they
released.


hth,
Alan.
Author
5 Apr 2006 10:44 PM
AlanT
What I did was wrap both the application and document in classes.
Wrapping the application was more for tidiness for me. You may not need
it.



When reading a document I would create a new instance of the document
wrapper class



e.g.



  _adobeDoc = New AdobeDocument(fName, createCopy, storagePath)



And then when closing it I would dispose of it



  _adobeDoc.Dispose()

  _adobeDoc = nothing





The Dispose calls close on the avDoc and pdDoc and also decrements the
COM reference count (that's basically what the ReleaseComObject()
call does)

and then sets the reference to the COM object to nothing.



At this point we should have totally released the document and you
should be able to delete it.



Worked for me,

Hope it works for you.



Alan.







Application class

=================



Public Class AdobeApplication

    Implements IDisposable



#Region "Constants"



    '
========================================================================



    '* AVZoomType -- Variable zoom "verbs", corresponding to View menu
items *'



    Public Const AVZoomNoVary As Short = 0 ' no variable zoom - use
this for XYZ zoom

    Public Const AVZoomFitPage As Short = 1 ' fit page to window

    Public Const AVZoomFitWidth As Short = 2 ' fit page width to window

    Public Const AVZoomFitHeight As Short = 3 ' fit page height to
window

    Public Const AVZoomFitVisibleWidth As Short = 4 ' fit visible width
to window

    Public Const AVZoomPreferred As Short = 5 '/* use page's preferred
zoom */





    Public Const AV_EXTERNAL_VIEW As Short = 1 ' Open the document with
tool bar visible

    Public Const AV_DOC_VIEW As Short = 2 ' Draw the page pane and
scrollbars

    Public Const AV_PAGE_VIEW As Short = 4 ' Draw only the page pane





    '********************************* PD Things
***********************************'



    '* PDPageMode -- Variable for how the file opens - bookmarks,
thumbnails, full screen, none *'



    Public Const PDDontCare As Short = 0

    Public Const PDUseNone As Short = 1

    Public Const PDUseThumbs As Short = 2

    Public Const PDUseBookmarks As Short = 3

    Public Const PDFullScreen As Short = 4





    '* PDLayoutMode -- Variable for how the file is opened - single
page, one column, two column *'



    Public Const PDLayoutDontCare As Short = 0

    Public Const PDLayoutSinglePage As Short = 1

    Public Const PDLayoutOneColumn As Short = 2

    Public Const PDLayoutTwoColumnLeft As Short = 3

    Public Const PDLayoutTwoColumnRight As Short = 4





    '
========================================================================



    Public Const MIN_ZOOM_PCT As Integer = 50

    Public Const MAX_ZOOM_PCT As Integer = 600



    Public Const ERR_MSG_INVALID_ZOOM As String = _

       "Allowable Zoom Percentages are {0}% to {1}%."



    '
========================================================================



    Public Const CLASS_NAME_APPLICATION As String = "AcroExch.App"

    Public Const CLASS_NAME_AVDOC As String = "AcroExch.AVDoc"

    Public Const CLASS_NAME_PDDOC As String = "AcroExch.PDDoc"

    Public Const CLASS_NAME_PDPAGE As String = "AcroExch.PDPage"

    Public Const CLASS_NAME_ACRO_RECT As String = "AcroExch.Rect"



    Private Const ERR_MSG_CREATE_FAIL As String = _

       "Unable to create an instance of the Acrobat application
because: {0}"

    Private Const ERR_MSG_UNKNOWN As String = _

       "Unknown Reason."

    Private Const ERR_MSG_UNABLE_TO_LOCK As String = _

       "Unable to lock the Acrobat Instance."

    Private Const ERR_MSG_UNABLE_TO_CREATE_DOC As String = _

       "Unable to create the document object."



    Private Const ERR_MSG_UNABLE_TO_OPEN_FILE As String = _

       "Unable to open the {0}. Reason = {1}."





#End Region



#Region "ctors"



    Public Sub New()

        Me.New(False)

    End Sub



    Public Sub New( _

      ByVal bLock As Boolean _

    )

        _acroApp = GetAcrobatAppInstance()

        _appInstanceName = String.Empty



        If (bLock) Then

            _locked = CType(_acroApp.Lock(AppInstanceName), Boolean)

            If (Not _locked) Then

                Throw New
Exception(String.Format(ERR_MSG_UNABLE_TO_LOCK))

            End If

        End If



    End Sub



#End Region



#Region "Properties"



    Public ReadOnly Property AppInstanceName() As String

    Get

        If (_appInstanceName Is Nothing _

            OrElse _appInstanceName.Length = 0) Then

            _appInstanceName = CreateAppInstanceName()

        End If

        Return _appInstanceName

    End Get

    End Property



#End Region



#Region "Methods"



    Public Function LoadPDDocument( _

      ByVal fName As String _

    ) As Acrobat.CAcroPDDoc



        Dim pdDoc As Acrobat.CAcroPDDoc

        pdDoc = CType(CreateObject(CLASS_NAME_PDDOC),
Acrobat.CAcroPDDoc)



        If (pdDoc Is Nothing) Then

            Throw New
Exception(String.Format(ERR_MSG_UNABLE_TO_CREATE_DOC))

        End If



        Dim bOK As Boolean

        Dim strReason As String = ERR_MSG_UNKNOWN

        Dim except As Exception



        Try

            bOK = CType(pdDoc.Open(fName), Boolean)

        Catch ex As Exception

            strReason = ex.Message

        End Try



        If (Not bOK) Then

            Throw New
Exception(String.Format(ERR_MSG_UNABLE_TO_OPEN_FILE, _

                                               fName, _

                                               strReason), _

                                except)

        End If



        Return pdDoc



    End Function



    Private Function CreateAppInstanceName() As String

        Return System.Guid.NewGuid.ToString

    End Function



    ' creates an application instance and returns it.

    ' throws an exception if unable to create

    Private Function GetAcrobatAppInstance() As Acrobat.CAcroApp



        Dim appInstance As Acrobat.CAcroApp



        Dim strReason As String = String.Empty

        Try

            appInstance = CType(CreateObject(CLASS_NAME_APPLICATION),
Acrobat.CAcroApp)

            If (appInstance Is Nothing) Then

                strReason = ERR_MSG_UNKNOWN

            End If

        Catch ex As Exception

            strReason = ex.Message

        Finally

            If (strReason.Length > 0) Then


System.Runtime.InteropServices.Marshal.ReleaseComObject(appInstance)

                Throw New Exception(String.Format(ERR_MSG_CREATE_FAIL,
strReason))

            End If

        End Try



        Return appInstance



    End Function





#End Region



#Region "Attributes"

    Private _locked As Boolean

    Private _appInstanceName As String

    Private _acroApp As Acrobat.CAcroApp

#End Region





#Region " IDISPOSABLE IMPLEMENTATION "



#Region "Methods"



    Protected Overrides Sub Finalize()

        Dispose(False)

    End Sub



    Public Overloads Sub Dispose() Implements
System.IDisposable.Dispose

        Dispose(True)

        GC.SuppressFinalize(Me)

    End Sub





    Public Overloads Sub Dispose( _

      ByVal bDisposing As Boolean _

    )

        If (Not _disposed) Then



            If (bDisposing) Then

                'disposed Managed resources

            End If



            ' dispose unmanaged resources

            If (_locked) Then

                _acroApp.UnlockEx(AppInstanceName)

            End If


System.Runtime.InteropServices.Marshal.ReleaseComObject(_acroApp)



        End If

        _disposed = True

    End Sub







#End Region



#Region "Attributes"

    Private _disposed As Boolean

#End Region



#End Region



#Region "Shared Functionality"



#Region "Methods"



    Public Shared Function IsValidZoomPct( _

      ByVal zoomPct As Integer _

    ) As Boolean

        Return (zoomPct >= MIN_ZOOM_PCT _

                And zoomPct <= MAX_ZOOM_PCT)

    End Function



    Public Shared Function InvalidZoomPctMessage() As String

        Return String.Format(ERR_MSG_INVALID_ZOOM, MIN_ZOOM_PCT,
MAX_ZOOM_PCT)

    End Function



#End Region



#End Region



End Class





Document Class:

===============



Public Class AdobeDocument

    Implements IDisposable





#Region "Konstants"





    Private Const ERR_MSG_UNKNOWN As String = _

       "Unknown Reason."

    Private Const ERR_MSG_UNABLE_TO_CREATE_PDDOC As String = _

       "Unable to create the PD Document object."

    Private Const ERR_MSG_UNABLE_TO_CREATE_AVDOC As String = _

       "Unable to create the AV Document object."

    Private Const ERR_MSG_UNABLE_TO_OPEN_FILE As String = _

       "Unable to open the {0}. Reason = {1}."

    Private Const ERR_MSG_NO_SIZE As String = _

       "Unable to generate a size for the page."

    Private Const ERR_MSG_UNABLE_TO_CREATE_PAGE As String = _

       "Unable to read page {0} for the document."



#End Region





#Region "Ctors"



    Public Sub New( _

      ByVal fName As String, _

      ByVal createCopy As Boolean _

    )

        Me.New(fName, createCopy, String.Empty)

    End Sub



    Public Sub New( _

      ByVal fName As String, _

      ByVal createCopy As Boolean, _

      ByVal storagePath As String _

    )

        Try

            _doc = New TemporaryFile(fName, createCopy, storagePath)

            _pdDoc = LoadPDDocument(_doc.FileName)

            _avDoc = LoadAVDocument(_doc.FileName)

        Finally



            If (_pdDoc Is Nothing OrElse _avDoc Is Nothing OrElse _doc
Is Nothing) Then

                Dispose(True)

            End If



        End Try

    End Sub



#End Region





#Region "Properties"



    Public ReadOnly Property PageCount() As Integer

    Get

        Return _pdDoc.GetNumPages

    End Get

    End Property



    Public Property DeleteOnClose() As Boolean

    Get

        Return _doc.DeleteOnClose

    End Get

    Set(ByVal Value As Boolean)

        _doc.DeleteOnClose = Value

    End Set

    End Property



#End Region





#Region "Methods"



    Public Overloads Function PrintSilent() As Boolean

        Return PrintSilent(1, PageCount)

    End Function



    Public Overloads Function PrintSilent( _

        ByVal nStartpage As Integer, _

        ByVal nEndPage As Integer _

    ) As Boolean



        Dim bRet As Boolean



        bRet = CType(_avDoc.PrintPages(nStartpage - 1, _

                                 nEndPage - 1, _

                                 0, _

                                 0, _

                                 0), Boolean)

        Return bRet



    End Function





    Private Function LoadAVDocument( _

      ByVal fname As String _

    ) As Acrobat.CAcroAVDoc



        ' Create the doc object

        Dim avDoc As Acrobat.CAcroAVDoc

        avDoc = CType(CreateObject(AdobeApplication.CLASS_NAME_AVDOC),
Acrobat.CAcroAVDoc)



        If (avDoc Is Nothing) Then

            Throw New
Exception(String.Format(ERR_MSG_UNABLE_TO_CREATE_AVDOC))

        End If



        ' load the file

        Dim bOK As Boolean

        Dim strReason As String = ERR_MSG_UNKNOWN

        Dim except As Exception



        Try

            bOK = CType(avDoc.Open(fname, fname + "tmp"), Boolean)

        Catch ex As Exception

            strReason = ex.Message

        End Try



        If (Not bOK) Then



            Throw New
Exception(String.Format(ERR_MSG_UNABLE_TO_OPEN_FILE, _

                                              fname, _

                                              strReason), _

                                except)

        End If



        Return avDoc



    End Function



    'Create the PDDocument Object and loads the file

    Private Function LoadPDDocument( _

      ByVal fName As String _

    ) As Acrobat.CAcroPDDoc



        ' Create the doc object

        Dim pdDoc As Acrobat.CAcroPDDoc

        pdDoc = CType(CreateObject(AdobeApplication.CLASS_NAME_PDDOC),
Acrobat.CAcroPDDoc)



        If (pdDoc Is Nothing) Then

            Throw New
Exception(String.Format(ERR_MSG_UNABLE_TO_CREATE_PDDOC))

        End If



        ' load the file

        Dim bOK As Boolean

        Dim strReason As String = ERR_MSG_UNKNOWN

        Dim except As Exception



        Try

            bOK = CType(pdDoc.Open(fName), Boolean)

        Catch ex As Exception

            strReason = ex.Message

        End Try



        If (Not bOK) Then



            Throw New
Exception(String.Format(ERR_MSG_UNABLE_TO_OPEN_FILE, _

                                               fName, _

                                               strReason), _

                                except)

        End If



        Return pdDoc



    End Function





    Public Function GetPage( _

      ByVal nPageNbr As Integer _

    ) As Acrobat.CAcroPDPage



        Dim pdPage As Acrobat.CAcroPDPage



        If (Not _pdDoc Is Nothing) Then



            pdPage = CType(_pdDoc.AcquirePage(nPageNbr),
Acrobat.CAcroPDPage)

            If (pdPage Is Nothing) Then

                Throw New
Exception(String.Format(ERR_MSG_UNABLE_TO_CREATE_PAGE, _

                                                   nPageNbr))

            End If

        End If



        Return pdPage



    End Function





#End Region





#Region "Attributes"



    Private _pdDoc As Acrobat.CAcroPDDoc

    Private _avDoc As Acrobat.CAcroAVDoc

    Private _doc As TemporaryFile



#End Region





#Region " IDISPOSABLE IMPLEMENTATION "



#Region "Methods"



    Public Overloads Sub Dispose() Implements
System.IDisposable.Dispose

        Dispose(True)

        GC.SuppressFinalize(Me)

    End Sub





    Public Overloads Sub Dispose( _

      ByVal bDisposing As Boolean _

    )

        If (Not _disposed) Then



            ' need to do this one before the _doc as the _doc will try
to delete the file

            ' Don't know that we can ever get here with a Nothing value
in _pdDdoc

            '  but it costs little to check

            If (Not _pdDoc Is Nothing) Then

                Trace.WriteLine("Releasing the PD DOC")

                _pdDoc.Close()


System.Runtime.InteropServices.Marshal.ReleaseComObject(_pdDoc)

                _pdDoc = Nothing

            End If



            If Not _avDoc Is Nothing Then

                Trace.WriteLine("Releasing the AV DOC")

                _avDoc.Close(1)


System.Runtime.InteropServices.Marshal.ReleaseComObject(_avDoc)

                _avDoc = Nothing

            End If



            If (bDisposing) Then

                _doc.Dispose()

            End If



        End If

        _disposed = True

    End Sub



    Protected Overrides Sub Finalize()

        Dispose(False)

    End Sub



#End Region



#Region "Attributes"

    Private _disposed As Boolean

#End Region



#End Region



End Class
Author
6 Apr 2006 8:10 AM
Joris De Groote
Hi, thanks a lot!! it works now.
I read your code and studied it and I added this:

PDDoc.Close()

System.Runtime.InteropServices.Marshal.ReleaseComObject(PDDoc)

avDoc.Close(1)

System.Runtime.InteropServices.Marshal.ReleaseComObject(avDoc)

I stayed of the IDisposable things... That gave me quite a few problems
first.

Greetz
Joris


Show quoteHide quote
"AlanT" <alanto***@users.com> wrote in message
news:1144277083.284521.20140@g10g2000cwb.googlegroups.com...
> What I did was wrap both the application and document in classes.
> Wrapping the application was more for tidiness for me. You may not need
> it.
>
>
>
> When reading a document I would create a new instance of the document
> wrapper class
>
>
>
> e.g.
>
>
>
>  _adobeDoc = New AdobeDocument(fName, createCopy, storagePath)
>
>
>
> And then when closing it I would dispose of it
>
>
>
>  _adobeDoc.Dispose()
>
>  _adobeDoc = nothing
>
>
>
>
>
> The Dispose calls close on the avDoc and pdDoc and also decrements the
> COM reference count (that's basically what the ReleaseComObject()
> call does)
>
> and then sets the reference to the COM object to nothing.
>
>
>
> At this point we should have totally released the document and you
> should be able to delete it.
>
>
>
> Worked for me,
>
> Hope it works for you.
>
>
>
> Alan.
>
>
>
>
>
>
>
> Application class
>
> =================
>
>
>
> Public Class AdobeApplication
>
>    Implements IDisposable
>
>
>
> #Region "Constants"
>
>
>
>    '
> ========================================================================
>
>
>
>    '* AVZoomType -- Variable zoom "verbs", corresponding to View menu
> items *'
>
>
>
>    Public Const AVZoomNoVary As Short = 0 ' no variable zoom - use
> this for XYZ zoom
>
>    Public Const AVZoomFitPage As Short = 1 ' fit page to window
>
>    Public Const AVZoomFitWidth As Short = 2 ' fit page width to window
>
>    Public Const AVZoomFitHeight As Short = 3 ' fit page height to
> window
>
>    Public Const AVZoomFitVisibleWidth As Short = 4 ' fit visible width
> to window
>
>    Public Const AVZoomPreferred As Short = 5 '/* use page's preferred
> zoom */
>
>
>
>
>
>    Public Const AV_EXTERNAL_VIEW As Short = 1 ' Open the document with
> tool bar visible
>
>    Public Const AV_DOC_VIEW As Short = 2 ' Draw the page pane and
> scrollbars
>
>    Public Const AV_PAGE_VIEW As Short = 4 ' Draw only the page pane
>
>
>
>
>
>    '********************************* PD Things
> ***********************************'
>
>
>
>    '* PDPageMode -- Variable for how the file opens - bookmarks,
> thumbnails, full screen, none *'
>
>
>
>    Public Const PDDontCare As Short = 0
>
>    Public Const PDUseNone As Short = 1
>
>    Public Const PDUseThumbs As Short = 2
>
>    Public Const PDUseBookmarks As Short = 3
>
>    Public Const PDFullScreen As Short = 4
>
>
>
>
>
>    '* PDLayoutMode -- Variable for how the file is opened - single
> page, one column, two column *'
>
>
>
>    Public Const PDLayoutDontCare As Short = 0
>
>    Public Const PDLayoutSinglePage As Short = 1
>
>    Public Const PDLayoutOneColumn As Short = 2
>
>    Public Const PDLayoutTwoColumnLeft As Short = 3
>
>    Public Const PDLayoutTwoColumnRight As Short = 4
>
>
>
>
>
>    '
> ========================================================================
>
>
>
>    Public Const MIN_ZOOM_PCT As Integer = 50
>
>    Public Const MAX_ZOOM_PCT As Integer = 600
>
>
>
>    Public Const ERR_MSG_INVALID_ZOOM As String = _
>
>       "Allowable Zoom Percentages are {0}% to {1}%."
>
>
>
>    '
> ========================================================================
>
>
>
>    Public Const CLASS_NAME_APPLICATION As String = "AcroExch.App"
>
>    Public Const CLASS_NAME_AVDOC As String = "AcroExch.AVDoc"
>
>    Public Const CLASS_NAME_PDDOC As String = "AcroExch.PDDoc"
>
>    Public Const CLASS_NAME_PDPAGE As String = "AcroExch.PDPage"
>
>    Public Const CLASS_NAME_ACRO_RECT As String = "AcroExch.Rect"
>
>
>
>    Private Const ERR_MSG_CREATE_FAIL As String = _
>
>       "Unable to create an instance of the Acrobat application
> because: {0}"
>
>    Private Const ERR_MSG_UNKNOWN As String = _
>
>       "Unknown Reason."
>
>    Private Const ERR_MSG_UNABLE_TO_LOCK As String = _
>
>       "Unable to lock the Acrobat Instance."
>
>    Private Const ERR_MSG_UNABLE_TO_CREATE_DOC As String = _
>
>       "Unable to create the document object."
>
>
>
>    Private Const ERR_MSG_UNABLE_TO_OPEN_FILE As String = _
>
>       "Unable to open the {0}. Reason = {1}."
>
>
>
>
>
> #End Region
>
>
>
> #Region "ctors"
>
>
>
>    Public Sub New()
>
>        Me.New(False)
>
>    End Sub
>
>
>
>    Public Sub New( _
>
>      ByVal bLock As Boolean _
>
>    )
>
>        _acroApp = GetAcrobatAppInstance()
>
>        _appInstanceName = String.Empty
>
>
>
>        If (bLock) Then
>
>            _locked = CType(_acroApp.Lock(AppInstanceName), Boolean)
>
>            If (Not _locked) Then
>
>                Throw New
> Exception(String.Format(ERR_MSG_UNABLE_TO_LOCK))
>
>            End If
>
>        End If
>
>
>
>    End Sub
>
>
>
> #End Region
>
>
>
> #Region "Properties"
>
>
>
>    Public ReadOnly Property AppInstanceName() As String
>
>    Get
>
>        If (_appInstanceName Is Nothing _
>
>            OrElse _appInstanceName.Length = 0) Then
>
>            _appInstanceName = CreateAppInstanceName()
>
>        End If
>
>        Return _appInstanceName
>
>    End Get
>
>    End Property
>
>
>
> #End Region
>
>
>
> #Region "Methods"
>
>
>
>    Public Function LoadPDDocument( _
>
>      ByVal fName As String _
>
>    ) As Acrobat.CAcroPDDoc
>
>
>
>        Dim pdDoc As Acrobat.CAcroPDDoc
>
>        pdDoc = CType(CreateObject(CLASS_NAME_PDDOC),
> Acrobat.CAcroPDDoc)
>
>
>
>        If (pdDoc Is Nothing) Then
>
>            Throw New
> Exception(String.Format(ERR_MSG_UNABLE_TO_CREATE_DOC))
>
>        End If
>
>
>
>        Dim bOK As Boolean
>
>        Dim strReason As String = ERR_MSG_UNKNOWN
>
>        Dim except As Exception
>
>
>
>        Try
>
>            bOK = CType(pdDoc.Open(fName), Boolean)
>
>        Catch ex As Exception
>
>            strReason = ex.Message
>
>        End Try
>
>
>
>        If (Not bOK) Then
>
>            Throw New
> Exception(String.Format(ERR_MSG_UNABLE_TO_OPEN_FILE, _
>
>                                               fName, _
>
>                                               strReason), _
>
>                                except)
>
>        End If
>
>
>
>        Return pdDoc
>
>
>
>    End Function
>
>
>
>    Private Function CreateAppInstanceName() As String
>
>        Return System.Guid.NewGuid.ToString
>
>    End Function
>
>
>
>    ' creates an application instance and returns it.
>
>    ' throws an exception if unable to create
>
>    Private Function GetAcrobatAppInstance() As Acrobat.CAcroApp
>
>
>
>        Dim appInstance As Acrobat.CAcroApp
>
>
>
>        Dim strReason As String = String.Empty
>
>        Try
>
>            appInstance = CType(CreateObject(CLASS_NAME_APPLICATION),
> Acrobat.CAcroApp)
>
>            If (appInstance Is Nothing) Then
>
>                strReason = ERR_MSG_UNKNOWN
>
>            End If
>
>        Catch ex As Exception
>
>            strReason = ex.Message
>
>        Finally
>
>            If (strReason.Length > 0) Then
>
>
> System.Runtime.InteropServices.Marshal.ReleaseComObject(appInstance)
>
>                Throw New Exception(String.Format(ERR_MSG_CREATE_FAIL,
> strReason))
>
>            End If
>
>        End Try
>
>
>
>        Return appInstance
>
>
>
>    End Function
>
>
>
>
>
> #End Region
>
>
>
> #Region "Attributes"
>
>    Private _locked As Boolean
>
>    Private _appInstanceName As String
>
>    Private _acroApp As Acrobat.CAcroApp
>
> #End Region
>
>
>
>
>
> #Region " IDISPOSABLE IMPLEMENTATION "
>
>
>
> #Region "Methods"
>
>
>
>    Protected Overrides Sub Finalize()
>
>        Dispose(False)
>
>    End Sub
>
>
>
>    Public Overloads Sub Dispose() Implements
> System.IDisposable.Dispose
>
>        Dispose(True)
>
>        GC.SuppressFinalize(Me)
>
>    End Sub
>
>
>
>
>
>    Public Overloads Sub Dispose( _
>
>      ByVal bDisposing As Boolean _
>
>    )
>
>        If (Not _disposed) Then
>
>
>
>            If (bDisposing) Then
>
>                'disposed Managed resources
>
>            End If
>
>
>
>            ' dispose unmanaged resources
>
>            If (_locked) Then
>
>                _acroApp.UnlockEx(AppInstanceName)
>
>            End If
>
>
> System.Runtime.InteropServices.Marshal.ReleaseComObject(_acroApp)
>
>
>
>        End If
>
>        _disposed = True
>
>    End Sub
>
>
>
>
>
>
>
> #End Region
>
>
>
> #Region "Attributes"
>
>    Private _disposed As Boolean
>
> #End Region
>
>
>
> #End Region
>
>
>
> #Region "Shared Functionality"
>
>
>
> #Region "Methods"
>
>
>
>    Public Shared Function IsValidZoomPct( _
>
>      ByVal zoomPct As Integer _
>
>    ) As Boolean
>
>        Return (zoomPct >= MIN_ZOOM_PCT _
>
>                And zoomPct <= MAX_ZOOM_PCT)
>
>    End Function
>
>
>
>    Public Shared Function InvalidZoomPctMessage() As String
>
>        Return String.Format(ERR_MSG_INVALID_ZOOM, MIN_ZOOM_PCT,
> MAX_ZOOM_PCT)
>
>    End Function
>
>
>
> #End Region
>
>
>
> #End Region
>
>
>
> End Class
>
>
>
>
>
> Document Class:
>
> ===============
>
>
>
> Public Class AdobeDocument
>
>    Implements IDisposable
>
>
>
>
>
> #Region "Konstants"
>
>
>
>
>
>    Private Const ERR_MSG_UNKNOWN As String = _
>
>       "Unknown Reason."
>
>    Private Const ERR_MSG_UNABLE_TO_CREATE_PDDOC As String = _
>
>       "Unable to create the PD Document object."
>
>    Private Const ERR_MSG_UNABLE_TO_CREATE_AVDOC As String = _
>
>       "Unable to create the AV Document object."
>
>    Private Const ERR_MSG_UNABLE_TO_OPEN_FILE As String = _
>
>       "Unable to open the {0}. Reason = {1}."
>
>    Private Const ERR_MSG_NO_SIZE As String = _
>
>       "Unable to generate a size for the page."
>
>    Private Const ERR_MSG_UNABLE_TO_CREATE_PAGE As String = _
>
>       "Unable to read page {0} for the document."
>
>
>
> #End Region
>
>
>
>
>
> #Region "Ctors"
>
>
>
>    Public Sub New( _
>
>      ByVal fName As String, _
>
>      ByVal createCopy As Boolean _
>
>    )
>
>        Me.New(fName, createCopy, String.Empty)
>
>    End Sub
>
>
>
>    Public Sub New( _
>
>      ByVal fName As String, _
>
>      ByVal createCopy As Boolean, _
>
>      ByVal storagePath As String _
>
>    )
>
>        Try
>
>            _doc = New TemporaryFile(fName, createCopy, storagePath)
>
>            _pdDoc = LoadPDDocument(_doc.FileName)
>
>            _avDoc = LoadAVDocument(_doc.FileName)
>
>        Finally
>
>
>
>            If (_pdDoc Is Nothing OrElse _avDoc Is Nothing OrElse _doc
> Is Nothing) Then
>
>                Dispose(True)
>
>            End If
>
>
>
>        End Try
>
>    End Sub
>
>
>
> #End Region
>
>
>
>
>
> #Region "Properties"
>
>
>
>    Public ReadOnly Property PageCount() As Integer
>
>    Get
>
>        Return _pdDoc.GetNumPages
>
>    End Get
>
>    End Property
>
>
>
>    Public Property DeleteOnClose() As Boolean
>
>    Get
>
>        Return _doc.DeleteOnClose
>
>    End Get
>
>    Set(ByVal Value As Boolean)
>
>        _doc.DeleteOnClose = Value
>
>    End Set
>
>    End Property
>
>
>
> #End Region
>
>
>
>
>
> #Region "Methods"
>
>
>
>    Public Overloads Function PrintSilent() As Boolean
>
>        Return PrintSilent(1, PageCount)
>
>    End Function
>
>
>
>    Public Overloads Function PrintSilent( _
>
>        ByVal nStartpage As Integer, _
>
>        ByVal nEndPage As Integer _
>
>    ) As Boolean
>
>
>
>        Dim bRet As Boolean
>
>
>
>        bRet = CType(_avDoc.PrintPages(nStartpage - 1, _
>
>                                 nEndPage - 1, _
>
>                                 0, _
>
>                                 0, _
>
>                                 0), Boolean)
>
>        Return bRet
>
>
>
>    End Function
>
>
>
>
>
>    Private Function LoadAVDocument( _
>
>      ByVal fname As String _
>
>    ) As Acrobat.CAcroAVDoc
>
>
>
>        ' Create the doc object
>
>        Dim avDoc As Acrobat.CAcroAVDoc
>
>        avDoc = CType(CreateObject(AdobeApplication.CLASS_NAME_AVDOC),
> Acrobat.CAcroAVDoc)
>
>
>
>        If (avDoc Is Nothing) Then
>
>            Throw New
> Exception(String.Format(ERR_MSG_UNABLE_TO_CREATE_AVDOC))
>
>        End If
>
>
>
>        ' load the file
>
>        Dim bOK As Boolean
>
>        Dim strReason As String = ERR_MSG_UNKNOWN
>
>        Dim except As Exception
>
>
>
>        Try
>
>            bOK = CType(avDoc.Open(fname, fname + "tmp"), Boolean)
>
>        Catch ex As Exception
>
>            strReason = ex.Message
>
>        End Try
>
>
>
>        If (Not bOK) Then
>
>
>
>            Throw New
> Exception(String.Format(ERR_MSG_UNABLE_TO_OPEN_FILE, _
>
>                                              fname, _
>
>                                              strReason), _
>
>                                except)
>
>        End If
>
>
>
>        Return avDoc
>
>
>
>    End Function
>
>
>
>    'Create the PDDocument Object and loads the file
>
>    Private Function LoadPDDocument( _
>
>      ByVal fName As String _
>
>    ) As Acrobat.CAcroPDDoc
>
>
>
>        ' Create the doc object
>
>        Dim pdDoc As Acrobat.CAcroPDDoc
>
>        pdDoc = CType(CreateObject(AdobeApplication.CLASS_NAME_PDDOC),
> Acrobat.CAcroPDDoc)
>
>
>
>        If (pdDoc Is Nothing) Then
>
>            Throw New
> Exception(String.Format(ERR_MSG_UNABLE_TO_CREATE_PDDOC))
>
>        End If
>
>
>
>        ' load the file
>
>        Dim bOK As Boolean
>
>        Dim strReason As String = ERR_MSG_UNKNOWN
>
>        Dim except As Exception
>
>
>
>        Try
>
>            bOK = CType(pdDoc.Open(fName), Boolean)
>
>        Catch ex As Exception
>
>            strReason = ex.Message
>
>        End Try
>
>
>
>        If (Not bOK) Then
>
>
>
>            Throw New
> Exception(String.Format(ERR_MSG_UNABLE_TO_OPEN_FILE, _
>
>                                               fName, _
>
>                                               strReason), _
>
>                                except)
>
>        End If
>
>
>
>        Return pdDoc
>
>
>
>    End Function
>
>
>
>
>
>    Public Function GetPage( _
>
>      ByVal nPageNbr As Integer _
>
>    ) As Acrobat.CAcroPDPage
>
>
>
>        Dim pdPage As Acrobat.CAcroPDPage
>
>
>
>        If (Not _pdDoc Is Nothing) Then
>
>
>
>            pdPage = CType(_pdDoc.AcquirePage(nPageNbr),
> Acrobat.CAcroPDPage)
>
>            If (pdPage Is Nothing) Then
>
>                Throw New
> Exception(String.Format(ERR_MSG_UNABLE_TO_CREATE_PAGE, _
>
>                                                   nPageNbr))
>
>            End If
>
>        End If
>
>
>
>        Return pdPage
>
>
>
>    End Function
>
>
>
>
>
> #End Region
>
>
>
>
>
> #Region "Attributes"
>
>
>
>    Private _pdDoc As Acrobat.CAcroPDDoc
>
>    Private _avDoc As Acrobat.CAcroAVDoc
>
>    Private _doc As TemporaryFile
>
>
>
> #End Region
>
>
>
>
>
> #Region " IDISPOSABLE IMPLEMENTATION "
>
>
>
> #Region "Methods"
>
>
>
>    Public Overloads Sub Dispose() Implements
> System.IDisposable.Dispose
>
>        Dispose(True)
>
>        GC.SuppressFinalize(Me)
>
>    End Sub
>
>
>
>
>
>    Public Overloads Sub Dispose( _
>
>      ByVal bDisposing As Boolean _
>
>    )
>
>        If (Not _disposed) Then
>
>
>
>            ' need to do this one before the _doc as the _doc will try
> to delete the file
>
>            ' Don't know that we can ever get here with a Nothing value
> in _pdDdoc
>
>            '  but it costs little to check
>
>            If (Not _pdDoc Is Nothing) Then
>
>                Trace.WriteLine("Releasing the PD DOC")
>
>                _pdDoc.Close()
>
>
> System.Runtime.InteropServices.Marshal.ReleaseComObject(_pdDoc)
>
>                _pdDoc = Nothing
>
>            End If
>
>
>
>            If Not _avDoc Is Nothing Then
>
>                Trace.WriteLine("Releasing the AV DOC")
>
>                _avDoc.Close(1)
>
>
> System.Runtime.InteropServices.Marshal.ReleaseComObject(_avDoc)
>
>                _avDoc = Nothing
>
>            End If
>
>
>
>            If (bDisposing) Then
>
>                _doc.Dispose()
>
>            End If
>
>
>
>        End If
>
>        _disposed = True
>
>    End Sub
>
>
>
>    Protected Overrides Sub Finalize()
>
>        Dispose(False)
>
>    End Sub
>
>
>
> #End Region
>
>
>
> #Region "Attributes"
>
>    Private _disposed As Boolean
>
> #End Region
>
>
>
> #End Region
>
>
>
> End Class
>