| |

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 |  |
 | 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 |
  |
|
TOP! Unser Nr. 1 
Neu! sevDataGrid 3.0
Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) TOP Entwickler-Paket 
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR...
Jetzt nur 979,00 EURWeitere Infos
|
|
|
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
|
|