vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Über COM angesteuertes Acrobat schläft ein 
Autor: Rainman
Datum: 27.10.09 08:09

Hallo,

ich steuer den Acrobat 8 Professional über COM an, um in PDF Dateien nach einem Begriff zu suchen. Durch dieses Verfahren ist es möglich einen Sammelbeleg in seine Einzelbelege zu zerlegen. Die Einzelbelege haben hierbei eine unterschiedliche Seitenanzahl.

Das Problem dabei ist, dass bei dem Vorgang der ganze Acrobat einschläft. Das war unter Acrobat 7 auch schon so. Bewegt man ständig die Maus über das Fenster, geht die Verarbeitung zügig voran. Es sieht fast so aus, als ob dem Programm die CPU Ressourchen entzogen werden. Aktuell habe ich mir ein kleines Tools geschrieben, das nichts weiter tut, als den Mauszeiger über dem Acrobat hüpfen zu lassen. Das funktioniert, ist aber alles andere als Toll.

Kennt jemand vielleicht ein anderes PDF Tools, dass über eine COM oder .NET Schnittstelle verfügt?
Muss ich beim ansteuern über COM irgendwas tun, damit dem gesteuerte Programm die die CPU Ressourcen entzogen werden?
Hat irgendjemand so ein Phänomen schon einmal gehabt?

Anbei der (zur Verständlichkeit etwas verkürzte) Code
            Dim objApp As Acrobat.CAcroApp = New Acrobat.AcroApp
            objApp.Show()
 
            'Wenn Acrobat bereits offen ist, alle ofenen Dokumente schließen
            If objApp.GetNumAVDocs > 0 Then objApp.CloseAllDocs()
 
            'Quelldokument öffnen
            Dim objQuellAVDoc As Acrobat.CAcroAVDoc = New Acrobat.AcroAVDoc
            Dim objQuellAVPageView As Acrobat.CAcroAVPageView
 
            objQuellAVDoc.Open(strSourceFileWithPath, "Quellfile")
            objQuellAVDoc.BringToFront()
 
            Dim objQuellPDDoc As Acrobat.CAcroPDDoc
            objQuellPDDoc = New Acrobat.AcroPDDoc
            Try
                objQuellPDDoc = CType(objQuellAVDoc.GetPDDoc(), _
                  Acrobat.AcroPDDoc)
            Catch ex As Exception
                console.WriteLine("Konnte Ziel PD Doc nicht von Ziel AV Doc" & _
                  "holen")
            End Try
 
            'Objekte für Zieldokumente öffnen
            Dim objZielPDDoc As Acrobat.CAcroPDDoc
            Dim blnLetzterVorgang As Boolean = False
 
            Dim iCounter As Integer = 0
            Do
                iCounter += 1
 
                'Zieldateipfad erstellen
                Dim strTargetFileWithPath As String
                strTargetFileWithPath = myconfig.DocTargetFolder & _
                  strSourceFilename & "_" & CStr(iCounter) & ".pdf"
 
                'Seiten suchen
                Dim iSeite As Integer = 0   'letzte Seite des zu Übertragenden 
                ' Dokuments
 
                'Seiten suchen
                objQuellAVDoc.FindText(myconfig.PdfDocSeparator, 1, 1, 1)
 
                ''2. Treffer ist die erste Seite des zweiten Dokuments
                objQuellAVDoc.FindText(myconfig.PdfDocSeparator, 1, 1, 0)
 
                objQuellAVPageView = CType(objQuellAVDoc.GetAVPageView, _
                  Acrobat.AcroAVPageView)
 
                'letzte Seite des ersten Dokuments ermitteln
                iSeite = objQuellAVPageView.GetPageNum
                If iSeite = 0 Then 'iSeite steht auf Seite 1 (letztes Dokument)
 
                ''Wenn zweiter Suchvorgang die Seite 1 ergibt, ist es der _
                  letzte Vorgang
                blnLetzterVorgang = True
 
                ''letzte Seite aktuelles Dokument = letzte Seite Gesamtdokument
                iSeite = objQuellPDDoc.GetNumPages - 1
 
                Else 'iSeite steht noch auf der 1. Seite des 2. Dokuments
                    iSeite -= 1
                End If
 
                  objZielPDDoc.Close()
                  System.Runtime.InteropServices.Marshal.ReleaseComObject( _
                    objZielPDDoc)
                  objZielPDDoc = Nothing
 
                  'Seiten löschen
                   objQuellPDDoc.DeletePages(0, iSeite)
                  'objQuellPDDoc.Save(CShort(Acrobat.PDSaveFlags.PDSaveFull), 
                  ' strSourceFileWithPath)
 
            Loop Until blnLetzterVorgang
 
            'Schließen von Acrobat und freigeben der Objekte
            objQuellPDDoc.Close()
            System.Runtime.InteropServices.Marshal.ReleaseComObject( _
              objQuellPDDoc)
            objQuellPDDoc = Nothing
 
 
            'Quelldokument schließen
            '   (Achtung: Für "1 Seiten Abkürzung" und den langen Weg benötigt)
            objQuellAVDoc.Close(1)
            System.Runtime.InteropServices.Marshal.ReleaseComObject( _
              objQuellAVDoc)
            objQuellAVDoc = Nothing
Danke schonmal im Voraus und viele Grüße



P.S. Über das selbe Problem habe ich bereits einen Post geschrieben. Dieser hatte aber eine andere Fragestellung. Ich hoffe, dass ihr das nicht als Doppelpost betrachtet.
http://www.vbarchiv.net/forum/id22_i63212t63212_mouseover-event-an-externes-programm-schicken.html
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Über COM angesteuertes Acrobat schläft ein4.224Rainman27.10.09 08:09
Re: Über COM angesteuertes Acrobat schläft ein2.050ModeratorFZelle27.10.09 13:18
Re: Über COM angesteuertes Acrobat schläft ein2.033Rainman27.10.09 15:08
Re: Über COM angesteuertes Acrobat schläft ein2.106ModeratorDaveS27.10.09 15:39
Re: Über COM angesteuertes Acrobat schläft ein2.035Rainman27.10.09 16:17
Re: Über COM angesteuertes Acrobat schläft ein1.987Rainman29.10.09 10:01
Re: Über COM angesteuertes Acrb. schläft ein - Zeitschleifen...2.116Rainman10.11.09 15:08

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel