Forum: PC-Programmierung Adobe Acrobat: wie öffnet man ein nicht lokales pdf-Dokument


von Mehmet K. (mkmk)


Lesenswert?

Servus allerseits

Seit mehreren Tagen wühle ich mich durch Guides und Webseiten: habe zwar 
dabei vieles dazugelernt, aber nicht das, was ich wollte.

In einer VisualFoxPro Form will ich mit Hilfe einer OCX eine PDF-Datei, 
die im WEB abgelegt ist, laden und sie dann lokal unter einem anderen 
Namen abspeichern. Und zwar ohne dass ein Dialog-Fenster erscheint.

Lange Zeit versuchte ich das mit der "acroPDF.PDF.1" Klasse, die ja mit 
dem Acrobat Reader geliefert wird, zu lösen. Aber damit geht es nicht. 
Ich kann damit zwar das Remote-Dokument im IE oder in einer beliebigen 
Form anzeigen, aber ohne Dialog gelang es mir nicht, es lokal 
abzuspeichern.

Also habe ich die Trial-Version von "Adobe Acrobat 9 Standard" 
installiert und mich mit der "AcroExch.App" Klasse herumgeplagt. Geht 
auch nur lokal.

Die Idee, die Datei zuerst mit einer Download-Funktion runterzuladen 
greift hier nicht, da die Remote-Site einen download nicht erlaubt.
Keine Ahnung wieso.
1
cUrl_x = "E:\Data\Vfp\BKS\x.pdf"
2
cUrl_y = "E:\Data\Vfp\BKS\y.pdf"
3
cUrl_remote = "http://www.adobe.com/devnet/reader/articles/reader_compatibility/readercomp_pdfrendering.pdf"
4
5
FUNCTION Beispiel_0()
6
  oAdobe = CREATEOBJECT("AcroExch.App")
7
  oPDDoc = CREATEOBJECT("AcroExch.PDDoc")
8
*  oAdobe.SHOW()
9
10
  oPDDoc.OPEN(cURL_x)       && funktioniert
11
  oPDDoc.OPEN(cURL_remote)  && funktioniert nicht
12
13
  oPDDoc.SAVE(0x01, cURL_y)
14
  oPDDoc.CLOSE()
15
  oAdobe.EXIT()
16
  RELEASE oPDDoc
17
  RELEASE oAdobe
18
ENDFUNC


Die AxAcroPDFLib.AxAcroPDF Klasse verfügt zwar über eine Methode 
LoadFile, aber darauf zuzugreifen ist mir nicht gelungen.

Einige Stunden habe ich mich auch mit QuickPdf herumgeschlagen, aber 
auch dort kann man nur lokale Dokumente laden.

Wie würdet Ihr dieses Problem angehen? Dank im voraus.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die beiden Varianten, die funktionieren, greifen auf Dateien zu.
Die dritte aber verwendet eine URL, das ist etwas ganz anderes. Dahinter 
steckt kein Dateisystem (jedenfalls kein sichtbares, auch wenn es auf 
den ersten Blick auf Dateien abbildbar zu sein scheint).
Nahezu alle Programme, die Dateien öffnen können, wissen nichts mit URLs 
anzufangen.

Hier ist ein zweistufiger Lösungsansatz möglich:

Im ersten Schritt musst Du die Datei auf Deinen Rechner übertragen, das 
geht z.b. mit wget oder curl oder sonst einem http-Downloader.

Und dann im zweiten Schritt kannst Du Dein Acrobat-Control diese Datei 
laden lassen.

von Axel G. (axelg) Benutzerseite


Lesenswert?

KDE bzw. Qt haben netzwerktransparente Dateidialoge (egal ob ssh, ftp, 
html oder was auch immer). Qt gibt es auch für Windows, vielleicht 
kannst du dir da etwas rausholen?

Gruß
Axel

von Sven P. (Gast)


Lesenswert?

KDE hat die, das sind diese kio_-Plugins, die andauernd abschmieren :-}

Ich würd auch zu CURL tendieren.

von Mehmet K. (mkmk)


Lesenswert?

Rufus t. Firefly schrieb:
> Nahezu alle Programme, die Dateien öffnen können, wissen nichts mit URLs
> anzufangen.
Wenn ich im Acrobat Reader File -> Open eine URL eingebe, so hat das 
Program keine Probleme damit. Ich gehe also davon aus, dass der Acrobat 
zwischen lokaten und remoten Dateien unterscheiden kann.

> Hier ist ein zweistufiger Lösungsansatz möglich:
>
> Im ersten Schritt musst Du die Datei auf Deinen Rechner übertragen, das
> geht z.b. mit wget oder curl oder sonst einem http-Downloader.
>
> Und dann im zweiten Schritt kannst Du Dein Acrobat-Control diese Datei
> laden lassen.

Wie bereits erwaehnt: die Remote-Seite verweigert mir einen direkten 
Download.

von Εrnst B. (ernst)


Lesenswert?

Mehmet Kendi schrieb:
> Wie bereits erwaehnt: die Remote-Seite verweigert mir einen direkten
> Download.

Dann finde raus, woran der Remote Server das festmacht.
Evtl musst du einen passenden Referer-Header mitsenden oder den 
User-Agent auf "Adobe Acrobat" o.ä. stellen, Sitzungs-Cookie akzeptieren 
und zurücksenden...

Einfach mal mit Wireshark den Adobe Reader beim Download belauschen, und 
das dann genauso machen.

von Mehmet K. (mkmk)


Lesenswert?

Εrnst B✶ schrieb:
> Mehmet Kendi schrieb:
>> Wie bereits erwaehnt: die Remote-Seite verweigert mir einen direkten
>> Download.
>
> Dann finde raus, woran der Remote Server das festmacht.

Auf der Remote-Seite laeuft ein Ajax Program und die Verbindung basiert 
auf einem SSL Kanal. Nach Studium der *.js Dateien ist es mir zwar 
gelungen, diese für mich relevante Funktion von meiner Seite her zu 
triggern, aber ich bin nicht so der Hecht im Teich, wenn es um 
web-basierte Applikationen geht.

Das mit Wireshark ist schon eine Ueberlegung wert. Aber ehrlich gesagt 
nur als letzte Notlösung, da ich eh schon seit Tagen mit dem 
Blindenstock herumstochere.

von Gustav (Gast)


Lesenswert?

Mehmet Kendi schrieb:
> Auf der Remote-Seite laeuft ein Ajax Program und die Verbindung basiert
> auf einem SSL Kanal. Nach Studium der *.js Dateien ist es mir zwar
> gelungen, diese für mich relevante Funktion von meiner Seite her zu
> triggern, aber ich bin nicht so der Hecht im Teich, wenn es um
> web-basierte Applikationen geht.
>
> Das mit Wireshark ist schon eine Ueberlegung wert. Aber ehrlich gesagt
> nur als letzte Notlösung, da ich eh schon seit Tagen mit dem
> Blindenstock herumstochere.

Wenns HTTPS ist probier mal:

- https://addons.mozilla.org/de/firefox/addon/49856

- https://addons.mozilla.org/de/firefox/addon/1843

- http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project

- http://www.owasp.org/index.php/OWASP_WebScarab_NG_Project

von Mehmet K. (mkmk)


Lesenswert?

Ja, ist https.
Aber ich glaube nicht, dass mein Problem hier liegt.
Ich beherrsche das System soweit, dass ich mich remote einloggen kann, 
alle Queries remote steuern kann etc.

Es ist nur so, dass dieses Remote-System mir die Resultate als pdf 
sendet.
Ich kann diese Pdf's auch empfangen und wo auch immer ich will anzeigen.
Mein Problem ist nur: ich kann es nicht abspeichern.

Und sobald ich auf diese Datei, die ich mit einem Query erstellt habe, 
mit einem Download zugreife, steht in der  heruntergeladenen Datei: "Für 
diesen Zugriff müssen Sie im System sich angemeldet haben".

von Mehmet K. (mkmk)


Lesenswert?

Der Tip von Sven mit cURL hat mir die Augen geöffnet. Als ich die 
Funktionen von cCurl durchging, stutzte ich bei der Erklaerung zu 
HttpDownloadFile: "Downloads a remote file to a local file using the 
HTTP/HTTPS protocol."

Als ich dann meine Download-Funktion kontrollierte, bemerkte ich, dass 
meine selbstgestrickte Funktion ( via wininet.dll ) https nicht 
unterstützte.
Jetzt klappt der Download.

Nochmals danke!

von Sven P. (Gast)


Lesenswert?

Benutz doch einfach CURL, das gibt es schon ne Weile und die Entwickler 
machen zumindest den Anschein, etwas davon zu verstehen :->

von Mehmet K. (mkmk)


Lesenswert?

Sven P. schrieb:
> ... und die Entwickler
> machen zumindest den Anschein, etwas davon zu verstehen :->

Zumindest mehr als ich, das ist schon mal sicher. Habe auch gleich damit 
begonnen, diese Library in mein Program einzubinden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.