Seite 1 von 2

Acrobat Objekt -> CreateObject()

Verfasst: Fr, 30. Mär 2007 14:17
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

Verfasst: Fr, 30. Mär 2007 14:57
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.

Verfasst: Fr, 30. Mär 2007 15:24
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

Re: Acrobat Objekt -> CreateObject()

Verfasst: Sa, 31. Mär 2007 8:21
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

Verfasst: Mi, 04. Apr 2007 14:07
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

Verfasst: Mi, 04. Apr 2007 20:12
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

Verfasst: Mi, 04. Apr 2007 21:09
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).

Verfasst: Do, 05. Apr 2007 8:02
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

Verfasst: Do, 05. Apr 2007 9:32
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

Verfasst: Do, 05. Apr 2007 12:10
von thomas
Hi.

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

Gruß
Thomas

Verfasst: Do, 05. Apr 2007 13:43
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

Verfasst: Do, 05. Apr 2007 13:55
von Tom
Und die Active-X-Komponente muß man üblicherweise nicht installieren oder registrieren; das erfolgt bei der Reader-Installation automatisch.

Verfasst: Do, 05. Apr 2007 16:15
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

Verfasst: Do, 05. Apr 2007 16:30
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

Verfasst: Do, 05. Apr 2007 21:20
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

Verfasst: Do, 05. Apr 2007 23:22
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

Verfasst: Do, 12. Apr 2007 7:21
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

Re: Acrobat Objekt -> CreateObject()

Verfasst: Do, 19. Jan 2012 18:43
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

Re: Acrobat Objekt -> CreateObject()

Verfasst: Do, 19. Jan 2012 21:53
von brandelh
entweder über die CMD Schnittstelle oder über QuickPDF z.B. mit HBPrintPDF ;-) einfach danach suchen ;-)

Re: Acrobat Objekt -> CreateObject()

Verfasst: Fr, 20. Jan 2012 17:29
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.

Re: Acrobat Objekt -> CreateObject()

Verfasst: Fr, 18. Jul 2014 11:26
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

Re: Acrobat Objekt -> CreateObject()

Verfasst: Fr, 18. Jul 2014 12:11
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.

Re: Acrobat Objekt -> CreateObject()

Verfasst: Fr, 18. Jul 2014 12:26
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

Re: Acrobat Objekt -> CreateObject()

Verfasst: Fr, 18. Jul 2014 12:55
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

Re: Acrobat Objekt -> CreateObject()

Verfasst: Fr, 18. Jul 2014 13:37
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