Acrobat Objekt -> CreateObject()

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

notloesung
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 194
Registriert: Fr, 24. Feb 2006 8:09
Kontaktdaten:

Acrobat Objekt -> CreateObject()

Beitrag von notloesung »

Hallo,

ich versuche verzweifelt ein Acrobat Objekt zu erzeugen.
Laut "google" sollte das hier funktionieren, tut es aber bei mir nicht:

Code: Alles auswählen

oApp := CreateObject("AcroExch.Application")
Acrobat ist natürlich installiert.
Ich steige an der Stelle in der Registry nicht durch. Nach welchem Schlüssel sollte ich da suchen?

Gruß,
Notloesung
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

in der 1.90 ist ein Beispiel mit ActiveX und acrobat:

\xppw32\source\samples\activex\acrobat\...

dort wird zur oPDF - Erzeugung ein

Code: Alles auswählen

oC :=  XbpActiveXcontrol():new(oForm:drawingarea)
oC:CLSID := "{....}"
begin sequence
oC:create(...)
recover...
verwendet.

Allerdings ist die Ladezeit beim ersten mal enorm.
Gruß
Hubert
notloesung
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 194
Registriert: Fr, 24. Feb 2006 8:09
Kontaktdaten:

Beitrag von notloesung »

Hallo brandelh,

das Beispiel habe ich mir ja angeschaut.
Leider kann ich es nicht wirklich gebrauchen.

Ich will den Acrobat nicht so öffnen wie im Bsp.
Vielmehr dachte ich an ein Objekt mit dem ich eine PDF-Datei öffne damit ich das Format der Datei ermitteln kann. Und danach will ich nur noch den Print Befehl abschicken.

Es geht mir also eigentlich nur darum dass Format eines PDF im Hintergrund zu ermitteln. Dabei bin ich eben auf die o.g. Methode gekommen.

Gruß,
Notloesung
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Acrobat Objekt -> CreateObject()

Beitrag von AUGE_OHR »

hi,
notloesung hat geschrieben:

Code: Alles auswählen

oApp := CreateObject("AcroExch.Application")
Acrobat ist natürlich installiert.
hm ... ich glaube das ist der "AcroIEHelper.ocx", nützt dir also nichts.

Wir reden doch hier vom "Reader", oder ?

Man muss zuerst über die CLSID des "Reader" gehen :

Code: Alles auswählen

{CA8A9780-280D-11CF-A24D-444553540000}
Laut Help file soll die CLSID gehen, ich hatte bislang keinen Erfolg damit.
Allerdings hab ich eben das erste mal bemerkt das die CLSID in "{}" steht ...

Ich habe dann immer die "PROGID" benutzt.
notloesung hat geschrieben: Ich steige an der Stelle in der Registry nicht durch. Nach welchem Schlüssel sollte ich da suchen?
ich gehe das anders rum an : man nehme die *.OCX, hier "PDF.OCX"

nun "suche" ich die in der Registry und bin dann, wenn er die findet,
in der "CLSID". Nun gehe ich "runter" auf "PROGID" und finde dort den
String den ich eintragen muss für das activeX, hier "PDF.PdfCtrl.5."
notloesung hat geschrieben: Ich will den Acrobat nicht so öffnen wie im Bsp.
öffnen = show() ? oder meinst du CreateObject() ?

Wenn "show()" dann ist es ja wohl kein Problem.
und was CreateObject() vs. XbpActiveXControl() angeht : Wenn du keine
Events vom aktiveX "auswerten" willst kannst du es verwenden. Wenn du
die Event aber "auswerten" will musst du dir mit "Tlb2Ch.exe pdf.tlb" dir
eine *.CH Liste erstellen welche die "#DEFINE" enthält.
notloesung hat geschrieben: Dabei bin ich eben auf die o.g. Methode gekommen.
Um eine Überblick über die "Methode" oder "Property" eines *.OCX zu
bekommen nimmt man am besten den "COM Assistant" (Freeware)
http://www.devcomponents.com/comassistant/download.html

gruss by OHR
Jimmy
notloesung
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 194
Registriert: Fr, 24. Feb 2006 8:09
Kontaktdaten:

Beitrag von notloesung »

Hallo Jimmy, Hallo @all,

vielen Dank für deine ausführliche Antwort.

Leider bin ich noch immer nicht am Ziel und so langsam fange ich an zu zweifeln dass es so ohne weiteres realisierbar ist.

Wenn ich über die CLSID des Readers gehe

Code: Alles auswählen

B801CA65-A1FC-11D0-85AD-444553540000
dann finde ich dort den "AcroPDF.PDF".

Daraus baue ich mir dann also ein Object:

Code: Alles auswählen

oPDF     := CreateObject( "AcroPDF.PDF" )
.
Wenn ich mir die zur Verfügung stehenden Methoden anzeige

Code: Alles auswählen

aTest := oPDF:classDescribe()
dann werden mir dort nur die der Superklasse

Code: Alles auswählen

Abstract()
aufgelistet.

Das gleiche Verhalten erhalte ich beim

Code: Alles auswählen

oPDFDoc  := CreateObject( "AcroExch.Document" )
.

Leider finde ich keine passende Acrobat-DLL aus der ich eine Beschreibung der Objecte extrahieren (COM Assistant) kann.

Mit der PDF.OCX kann ich leider nichts anfangen. In der Registry kein Eintrag zu finden.

Was mich noch interessieren würde ist folgendes:
Im Adobe Verzeichnis gibt es eine AcroRd32.dll. Aus dieser kann ich mittels des COM Assistenten die Beschreibung der Objekte und Methoden extrahieren. Dort gibt es z.B. Objekte wie "AcroApp" (AcroExch.App), etc.
Ich bekomme es aber nicht hin diese in Xbase mittels Create Object zu erzeugen. Der Rückgabewert ist immer NIL.

Vielleicht kennt sich jem. damit ein wenig aus. Besser als ich denke ich allemal. Vielleicht hat aber auch jem. eine ganz andere Idee wie ich sonst aus einem bestehendem PDF das Seitenformat ermitteln könnte.

Bin für jede Hilfe dankbar!

Gruß,
Notloesung
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Beitrag von AUGE_OHR »

hi,
notloesung hat geschrieben: Leider finde ich keine passende Acrobat-DLL aus der ich eine Beschreibung der Objecte extrahieren (COM Assistant) kann.
keine DLL sondern *.OCX !
notloesung hat geschrieben: Mit der PDF.OCX kann ich leider nichts anfangen. In der Registry kein Eintrag zu finden.
aber du hast die PDF.OCX und die gehört auch zu deinem PDF Reader ?
Dann "registriere" doch mal die PDF.OCX

von welcher Version sprechen wir überhaupt ?

gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag von Tom »

Acrobat ist ein bißchen wuselig. Die ProgId lautet "PDF.PdfCtrl.n", wobei "n" die Versionsnummer des Readers ist (also "PDF.PdfCtrl.7" für Acrobat Reader Version 7).
Herzlich,
Tom
notloesung
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 194
Registriert: Fr, 24. Feb 2006 8:09
Kontaktdaten:

Beitrag von notloesung »

Guten Morgen,

auf meinem Rechner habe ich den Acrobat 7.0.0 (Reader ebenfalls 7.0.0).
Doch aus welchen Gründen auch immer gibt es bei mir keine PDF.OCX und in der Registry auch keinen "PDF.PdfCtrl" Eintrag.

Habe das ganze auf einem anderen Rechner geprüft. Dort ist die Version 5.0 installiert und beides (.OCX und Registryeintrag) vorhanden.

So kann ich natürlich probieren, probieren, ...
Ich bin aber auch nicht frühre darauf gekommen mal auf einem anderen Rechner zu schauen.
Wieso aber sowohl die .OCX als auch der Registry Eintrag, trotz des Reader 7.0, bei mir nicht vorhanden kann ich mir nicht erklären.

Merkwürdig ist:
Auf meinem Laptop mit der Reader Version 7.0.8 fehlen die beiden Sachen ebenfalls.

Ich werde mal den Reader bei mir runter schmeissen und dann den aktuellen Reader 8.0 installieren.
Mal schauen was dann passiert.

Gruß,
Notloesung
notloesung
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 194
Registriert: Fr, 24. Feb 2006 8:09
Kontaktdaten:

Beitrag von notloesung »

Hi,

ich schon wieder.

Habe jetzt den Reader 8.0 installiert.
Von einer PDF.OXC und dem Registryeintrag "PDF.PdfCtrl" nichts zu sehen.

Stimmt da etwas nicht, oder ist die Version "zu neu"?

Gruß,
Notloesung
thomas
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 116
Registriert: Fr, 23. Sep 2005 16:07
Wohnort: Bad Oldesloe
Kontaktdaten:

Beitrag von thomas »

Hi.

Soweit ich das verstanden habe, wird ab der Reader-Version 8 kein
ActiveX mehr unterstützt.

Gruß
Thomas
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo,

da kann ich Entwarnung geben. Bei mir ist Acrobat Reader 8 installiert, und die ActiveX-Schnittstelle funktioniert (mit der ProgID "AcroPDF.PDF").

Die ActiveX-Dll ist bei Version 8 in das Verzeichnis
\Programme\Gemeinsame Dateien\Adobe\Acrobat\ActiveX gewandert (war vorher im Reader-Programmverzeichnis), und sie heißt AcroPDF.dll

Viele Grüße,
Günter
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag von Tom »

Und die Active-X-Komponente muß man üblicherweise nicht installieren oder registrieren; das erfolgt bei der Reader-Installation automatisch.
Herzlich,
Tom
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Jimmy & Co,

eine PDF.OCX gehörte bis einschließlich der Version 6 zum Acrobat Reader. Ab Version 7 wurde sie durch AcroPDF.dll ersetzt.

Damit hat der ComAssistant freie Bahn. Eine Methode, um Dokumenteigenschaften zu ermitteln, scheint in AcroPDF.dll aber nicht dabei zu sein :(

Viele Grüße,
Günter
notloesung
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 194
Registriert: Fr, 24. Feb 2006 8:09
Kontaktdaten:

Beitrag von notloesung »

Günter Beyes hat geschrieben:Eine Methode, um Dokumenteigenschaften zu ermitteln, scheint in AcroPDF.dll aber nicht dabei zu sein :(
das ist aber ziemlich :roll:

Hallo Ihr,

kennt jem. von euch sonst noch eine Möglichkeit diese Eigenschaften zu ermitteln?

Gruß,
Notloesung
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Beitrag von AUGE_OHR »

hi,
Günter Beyes hat geschrieben: Hallo Jimmy & Co,
eine PDF.OCX gehörte bis einschließlich der Version 6 zum Acrobat Reader. Ab Version 7 wurde sie durch AcroPDF.dll ersetzt.
aha nun wird alles klar. Ich hatte nur zeitweilig v7.0 drauf, aber es sofort
wieder deinstallert weil es mir "viel zu gross" geworden war und es ewig
dauerte bis er die "plug-in"s geladen hatte. Da ich nur die rundimentären
Funktionen genutzt hatte und nicht "patchen" wollte bin ich dann wieder
zurück und hab die v7.0 deinstalliert (naja Systemwiederherstellung)

wenn es jetzt "AcroPDF.dll" ist, ist das dann schon ".NET" ?

gruss by OHR
Jimmy
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Jimmy,

Nein. AcroPDF.dll ist eine standardmäßige ActiveX-Komponente. Die kann aber, wie alle anderen dergleichen auch, von .NET-Anwendungen genutzt werden. Dafür gibt es im .NET-Framework den "COM Interop Layer". Alles neu, aber nicht alles einfacher. Übrigens, die Endung ".ocx" war immer schon eher Marketing: In Wirklichkeit sind alle diese Dinger DLLs.

Viele Grüße,

Günter
notloesung
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 194
Registriert: Fr, 24. Feb 2006 8:09
Kontaktdaten:

Beitrag von notloesung »

Hallo Ihr,

ich hab’s aufgegeben - funktionieren tut es dennoch.

Irgendwie klappte das ganze nicht so wie ich es mir vorgestellt hatte.
Durch einen Zufall habe ich aber raus gefunden, dass das Drucken problemlos klappt wenn der Reader erst geöffnet wird und danach der Druck abgesetzt wird. Dann ist es egal welches Format das Dokument hat, es wird entsprechend auf das Zielformat "gezoomt".
Das heißt also nichts anderes als:
Reader öffnen, Druck abfeuern, Reader schließen (falls der nicht schon vorher offen war)

Gruß,
Notloesung
HaglMi
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 30
Registriert: Mo, 27. Mär 2006 19:00
Wohnort: 84072 Au-Hallertau

Re: Acrobat Objekt -> CreateObject()

Beitrag von HaglMi »

Hallo Notloesung,

ist zwar ein alter Thread, aber ich kämpfe im Moment mit dem gleichen Problem.

Ich möchte eine PDF-Datei drucken.

CreateObject("AcroPdf.pdf") geht noch, aber wie lade ich eine Daten und wie drucke ich die Datei ??


Vielen Dank

Michael Hagl
mfg Michael
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Acrobat Objekt -> CreateObject()

Beitrag von brandelh »

entweder über die CMD Schnittstelle oder über QuickPDF z.B. mit HBPrintPDF ;-) einfach danach suchen ;-)
Gruß
Hubert
HaglMi
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 30
Registriert: Mo, 27. Mär 2006 19:00
Wohnort: 84072 Au-Hallertau

Re: Acrobat Objekt -> CreateObject()

Beitrag von HaglMi »

Hallo Hubert,

danke für die Antwort.

cmd-Schnittstelle lässt den Reader offen
ShellExcecute druckt nur auf Standarddrucker ( den kann ich zwar vor dem Drucken ändern, ber dann muss ich mit dem Zurückändern warten, bis die PDF gedruckt ist.

Ich werde mir mal QuickPDF anschauen.

Michael Hagl

Übrigens brauche ich das ganze für xHarbour.
mfg Michael
DelUser01

Re: Acrobat Objekt -> CreateObject()

Beitrag von DelUser01 »

Hallo

mache einfach an diesem Thema weiter...

wo findet man Informationen wie es weitergeht wenn man mit
oPDF := CreateObject( "acropdf.pdf" )
oder
oPDF := CreateObject( "acropdf.pdf.1" ) ???
das ActiveXObject für den Reader erstellt hat?

bei
oPDF:LoadFile( cPdfFile )
bekomme ich gleich einen Error...

Und irgendwie bekomme ich auch keine brauchbare Fehlermeldung.

Gru0
Roland
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Acrobat Objekt -> CreateObject()

Beitrag von brandelh »

das Thema passt nicht, da du nach einem ActiveX Zugriff fragst ;-)

Es gibt das Tool Tlb2Ch.exe im BIN Ordner von Xbase++ mit dem man für die ActiveX Schnittstelle Xbase++ Quellcode erzeugen kann.

Es gibt auch ein Beispile für den Acrobatzugriff (ohne eine Datei ...)
D:\ALASKA\ALASKA.190-SL1\XPPW32\source\samples\activex\acrobat

Allerdings kann ich mich nicht erinnern, dass jemand positiv über diese Konstellation berichtet hätte (langsam, Fehlerträchtig etc.)

Grundsätzlich sollte jede Software Infos über ihre ActiveX (COM) Schnittstelle zur Verfügung stellen, ob sie es auch machen weiß ich nicht.
Gruß
Hubert
HaglMi
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 30
Registriert: Mo, 27. Mär 2006 19:00
Wohnort: 84072 Au-Hallertau

Re: Acrobat Objekt -> CreateObject()

Beitrag von HaglMi »

Hallo Roland,

daran bin ich vor zwei Jahren auch gescheitert. Ich konnte damals keine vernünftige Dokumentation bei Adobe finden und bin dann zu dem Schluss gekommen das es mit der damaligen AcrobatReader-Version nicht geht. Ob es heute geht, weiß ich nicht.

Ich verwende SumatraPDF. den kann ich direkt mit diversen Parametern aufrufen und er macht was ich will.

mfg
Michael Hagl
mfg Michael
DelUser01

Re: Acrobat Objekt -> CreateObject()

Beitrag von DelUser01 »

Hallo Hubert und Michael,

das mit der Ansteuerung von Adobe Reader/Acrobat scheint irgendwie wirklich jeder für sich zu behalten - oder es ist so einfach dass es nichts zu dokumentieren gibt :D

Ich habe es jetzt kurzfristig für meinen Bedarf mit WScript gemacht.

Da das ein weitgehend universelles Tool zur Unterstützung der User beim Anzeigen bestimmter PDFs sein soll ist es am wichtigsten dass es mit Adobe funktioniert. Das hat (fast) jeder auf seinem PC. Andere PDF-Viewer kann ich nachträglich einbauen wenn es einer wünscht (der darf das dann auch bezahlen).

Gruß
Roland
HaglMi
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 30
Registriert: Mo, 27. Mär 2006 19:00
Wohnort: 84072 Au-Hallertau

Re: Acrobat Objekt -> CreateObject()

Beitrag von HaglMi »

Hallo Roland,

SumatraPDF ist kostenlos und kann auch ohne Installation verwendet werden.

Da ist mir dann egal, ob oder was für ein PDF-Viewer auf dem System ist.


mfg Michael Hagl
mfg Michael
Antworten