pdf-fragender
Goto Top

PDF Datei auf Fehler überprüfen

Hallo zusammen,

Bei meiner Arbeit muss ich momentan eine grosse Anzahl von PDF Dateien kontrollieren (mehrere Hunderttausend).
Leider tritt es häufig auf, dass einige gar nicht geöffnet werden können.

Es kommt meist folgender Fehler:

d5896c6dabea538e79be532ed02fa832

Nun habe ich mir überlegt, die Dateien vorher via Batch zu überprüfen, damit ich diese heraus filtere und somit ungestört weiter Arbeiten kann.
Das ganze muss ich leider über eine Batch Aufgabe lösen, da ich keine Administrationsrechte habe um andere Programme zu installieren.
Die Dateien liegen auf einem Server-Archiv. Dies ist wie folgt aufgebaut (am Ende des Beitrags ein Bild dazu):
Beispiel:
\\archiv01\Archiv\Jahr\Monat\GuteQualität\"hier sind die PDF"

Für jedes Jahr und Monat gibt es einen Ordner. Auch gibt es jeweils einen Ordner mit "SchlechteQualität", dieser wird aber nicht kontrolliert.

Zum besseren Verständnis ein Beispiel:
\\archiv01\Archiv\2011\01\GuteQualität\"hier sind die PDF" <- jeweils um die 180 Stk.
                         \SchlechteQualität\"nicht kontrollieren"
                      \02\GuteQualität\"hier sind die PDF"
                         \SchlechteQualität\"nicht kontrollieren"
                      \03\GuteQualität\"hier sind die PDF"
                         \SchlechteQualität\"nicht kontrollieren"
                      \usw.\GuteQualität\"hier sind die PDF"

\\archiv01\Archiv\2012\01\GuteQualität\"hier sind die PDF"
                         \SchlechteQualität\"nicht kontrollieren"
                      \02\GuteQualität\"hier sind die PDF"
                         \SchlechteQualität\"nicht kontrollieren"
                      \03\GuteQualität\"hier sind die PDF"
                         \SchlechteQualität\"nicht kontrollieren"
                      \usw.\GuteQualität\"hier sind die PDF"


Weiss jemand wie ich dies realisieren könnte. Bzw. wie der Code aussehen müsste. Habe leider nur beschränkte erfahrungen im Batch Scripting.

Das System ist ein Windows XP Computer
Welcher Adobe Reader Version 9.5.2 installiert hat.
Alle Programme sind im Standard Verzeichniss installiert

Hier ein Ausschnitt des Archives:
ba1222d44139c7d39da581964cae5898

Was ich nun umsetzen möchte, kurz zusammengefasst:
-Ein Batch Script welche jeweils in dass Richtige Verzeichnis geht (könnte die Pfade auch in einer .txt datei hinterlegen)
-Kontrolliert ob kein Fehler beim öffnen entsteht
-Wenn ein Fehler entstehen die Datei in einer .txt auflistet (ganzer Pfad)
-Es dürfen nicht mehr als maximal 6 Stück geöffnet werden, da sonst der Computer Probleme hat (ist eine ältere Kiste)

Bin wirklich dankbar für jede Hilfe.
Es muss jetzt nicht ein fix fertiges Skript geschrieben werden, sondern ich bin schon erfreut und erleichtert wenn dies mit dem Beispiel Archiv funktioniert.

Content-Key: 197697

Url: https://administrator.de/contentid/197697

Printed on: April 23, 2024 at 08:04 o'clock

Member: DerWoWusste
DerWoWusste Jan 26, 2013 at 17:20:04 (UTC)
Goto Top
Moin.

Vielleicht so, mit zwei Zeilen von der Kommandozeile? Kreiere eine Liste mit allen PDF-Dateien:
dir <Oberordner>\*.pdf /b /s >%temp%\pdfs.txt
Rufe dann alle nacheinander auf - defekte aufzurufen sollte mit einem Errorlevel ungleich Null belegt werden und das wird in eine Datei geloggt, die Du dann zur Verfügung hast.
for /f %a in (%temp%\pdfs.txt) do <Pfad zum Reader> %a & if %errorlevel% NEQ 0 echo %a >>%temp%\defektePDFs.txt
Member: Friemler
Friemler Jan 26, 2013, updated at Jan 27, 2013 at 22:46:52 (UTC)
Goto Top
Hallo pdf-fragender,

bei dieser Aufgabenstellung gibt es gleich mehrere Probleme:

  1. Der Adobe Reader liefert keinen Exit-Code, der Auskunft darüber gibt, ob ein Dokument geladen werden konnte oder nicht.
  2. Die Dateien liegen auf einer Netzwerkfreigabe und CMD unterstützt nur indirekt mit einem Trick UNC-Pfade.
  3. Wenn das PDF-Dokument defekt ist, erscheint die von Dir schon erwähnte Fehlermeldung, die durch das Script geschlossen werden muss.
  4. Die Zeit, die zum Laden eines PDF-Dokuments benötigt wird, ist davon abhängig
    • wie groß das Dokument ist,
    • welcher PDF-Reader in welcher Version verwendet wird,
    • wie schnell die Daten über das Netzwerk geliefert werden.

Mit dem folgenden Code wird versucht diese Probleme zu lösen:
@echo off & setlocal

::Ausgabedateien
set "GoodFiles=GoodFiles.txt"  
set "BadFiles=BadFiles.txt"  

::Pfad zum Programm WINDOWBUSTER
set "WindowBuster=<Laufwerk>:\<Pfad>\WindowBuster.exe"  

::Auszulassendes Verzeichnis
set "SkipFolder=SchlechteQualität"  

::Name der EXE des PDF-Readers
set "PDFReaderExe=AcroRd32.exe"  

::Fenstertitel der Fehlermeldung beim
::Öffnen eines beschädigten PDF-Dokuments
set "PDFErrorTitle=Adobe Reader"  

::Beschriftung des Buttons in der Fehlermeldung
::beim Öffnen eines beschädigten PDF-Dokuments
set "PDFErrorButton=OK"  

::Zeit in Sekunden, die auf den Abschluss des Ladevorgangs
::für den PDF-Reader und eines PDF-Dokuments gewartet wird
set "WaitForLoad=3"  

::Zeit in Millisekunden, die auf das Erscheinen
::der Fehlermeldung des PDF-Readers gewartet wird
set "WaitForError=300"  


::Netzwerkfreigabe mount
pushd "%~dp0"  

::Für die Erzeugung der Ausgabedateien die Codepage umschalten
chcp 1252 > NUL

::Alle PDF-Dokumente in allen untergeordneten Verzeichnissen prüfen
::Dabei jedoch Dateien in einem bestimmtes Verzeichnis nicht prüfen
(for /f "delims=" %%f in ('dir /s /b /a:-d "*.pdf" 2^>NUL ^| find /i /v "\%SkipFolder%\"') do (  
   call :CheckFile "%%f" && (  
     echo %%f
   ) || (
     1>&2 echo %%f
   )
)) 1>"%GoodFiles%" 2>"%BadFiles%"  

::Netzwerkfreigabe unmount
popd

::Script Ende
exit /b



::Unterprogramm
:CheckFile
  ::PDF-Dokument mit verknüpftem Programm öffnen
  start "" "%~1"  
  
  ::Warten bis es geladen wurde
  ping -n %WaitForLoad% 127.0.0.1 > NUL
  
  ::Fenster des PDF-Readers mit geladenem Dokument suchen
  ::Bei erfolgreichem Laden sollte der Dateiname im Fenstertitel auftauchen
  set /a FileDamaged=1
  
  for /f "skip=1" %%a in ('tasklist /nh /fi "WINDOWTITLE eq %~nx1*"') do (  
    if /i "%%a" equ "%PDFReaderExe%" set /a FileDamaged=0  
  )
  
  ::Falls die Datei beschädigt war, die Fehlermeldung wegklicken
  if %FileDamaged% equ 1 (
    "%WindowBuster%" /WindowTitle="%PDFErrorTitle%" /Button="%PDFErrorButton%" /Action="PressButton" /Exact=True /KeepOpen=False /Interval=%WaitForError% /Timeout=500  
  )

  ::Den PDF-Reader schließen
  taskkill /fi "IMAGENAME eq %PDFReaderExe%" > NUL  
exit /b %FileDamaged%

Damit alles funktioniert müssen folgende Voraussetzungen erfüllt werden:

  • Du benötigst das Konsolenprogramm WINDOWBUSTER, damit die Fehlermeldung geschlossen werden kann. Das Programm muss nicht installiert werden. Du musst in Zeile 8 des Scripts einen vollständigen Pfad zum Programm angeben. Das Programm sucht nach einem Fenster, in dessen Titelleiste der Wert aus der Variablen PDFErrorTitle in Zeile 18 steht. In diesem Fenster wird nach einem Button gesucht, der mit dem Wert aus der Variablen PDFErrorButton in Zeile 22 beschriftet ist und ein Klick auf diesen Button simuliert.
  • Das Script muss auf die Netzwerkfreigabe ins Verzeichnis \\archiv01\Archiv kopiert und von dort gestartet werden, sonst kann die Netzwerkfreigabe nicht gemountet werden (im Konsolenfenster ist zwar eine Fehlermeldung zu sehen, die wird aber direkt beim Start von CMD.exe ausgegeben, bevor die Netzwerkfreigabe gemountet wird).
  • Das Script muss in der Codierung OEM850 gespeichert werden (z.B. mit Notepad++), da das auszunehmende Verzeichnis SchlechteQualität ein ä enthält. Auf der Konsole, also auch in Batchscripts, wird die Codepage OEM850 benutzt. Wenn Du mit dem normalen Notepad speicherst, wird die Codierung ANSI bzw. WINDOWS-1252 benutzt, in der das ä einen anderen Code hat. => Die Ausnahme dieses Verzeichnisses würde nicht funktionieren.
  • Die Variable WaitForLoad in Zeile 26 muss evtl. angepasst werden, vor allem wenn Du eine ältere Maschine benutzt, die etwas länger benötigt, um den Adobe Reader und das PDF-Dokument zu laden.
  • Die Variable WaitForError in Zeile 30 muss evtl. angepasst werden, damit bei einem defekten Dokument das Fenster mit der Fehlermeldung von WINDOWBUSTER gefunden wird.
  • [EDIT] Während das Script läuft, darf der verwendete PDF-Reader nicht nocheinmal gestartet werden. Es könnte sonst in Zeile 79 beim Schließen der Reader-Instanz, die im Script für die Prüfung gestartet wird, zu Verwechslungen kommen und die falsche Instanz beendet werden. [/EDIT]

Es werden wahrscheinlich Fehlschläge registriert werden, die keine sind, außer Du stellst für WaitForLoad einen ziemlich großen Wert ein, der bei der großen Menge an Dateien nicht praktikabel ist. Das Script kann nur dabei helfen, die Menge der Dateien zu verringern, die von Hand geprüft werden müssen. Evtl. kannst Du nach einem ersten Durchlauf den Wert für WaitForLoad erhöhen und nur die vorher als defekt erkannten Dateien nochmal prüfen lassen.

Das Script arbeitet durch die Wartezeiten beim Laden der PDF-Dokumente ziemlich langsam (rechne bei 300.000 PDF-Dokumenten mit ca. 2 Wochen). Evtl. wäre eine Möglichkeit der Beschleunigung, eine 9er-Version des Adobe Readers oder einen anderen PDF-Reader zu verwenden, der die Dokumente schneller lädt. Der Name der EXE des PDF-Readers kann in Zeile 14 eingetragen werden. Bedingung für einen anderen Reader ist, dass der Name eines erfolgreich geladenen PDF-Dokuments im Fenstertitel angezeigt wird. Bei einem Fehlschlag darf der Dokumentname nicht angezeigt werden.

Das Script erzeugt zwei Ausgabedateien, eine für die erfolgreich geöffneten Dokumente und eine für die Dokumente, bei denen das Öffnen fehlgeschlagen ist. In den Dateipfaden wird der Laufwerksbuchstabe angegeben, unter dem die Netzwerkfreigabe automatisch gemountet wird. Diese Dateien werden (wegen Zeile 37) in der Codierung Windows-1252 erzeugt, die normale ANSI-Codierung unter einem deutschen Windows. Falls die Dateien von anderen Batchscripts verarbeitet werden sollen, muss in diesen Batchscripts beim Einlesen ebenfalls auf die Codierung Windows-1252 umgeschaltet werden, damit Dateinamen, die die Buchstaben äöüßÄÖÜ oder andere Sonderzeichen enthalten, richtig eingelesen werden. Oder Du kommentierst Zeile 37 aus, wodurch die Dateien in der Codierung OEM850 erstellt werden.

Gruß
Friemler
Member: pdf-fragender
pdf-fragender Jan 27, 2013, updated at Feb 06, 2013 at 14:53:32 (UTC)
Goto Top
Gibt es evt. auch eine Möglichkeit, dass ganze ohne es ins Archiv Verzeichniss zu kopieren umzusetzen?
Member: bastla
bastla Jan 27, 2013 updated at 16:19:54 (UTC)
Goto Top
Hallo pdf-fragender und willkommen im Forum!
Gibt es evt. auch eine Möglichkeit, dass ganze ohne es ins Archiv Verzeichniss zu kopieren umzusetzen?
Du könntest versuchsweise die Zeilen 33 bis 50 durch
::Quell-Ordner
set "Quelle=\\archiv01\Archiv"  

::Für die Erzeugung der Ausgabedateien die Codepage umschalten
chcp 1252 > NUL

::Alle PDF-Dokumente in allen untergeordneten Verzeichnissen prüfen
::Dabei jedoch Dateien in einem bestimmtes Verzeichnis nicht prüfen
(for /f "delims=" %%f in ('dir /s /b /a:-d "%Quelle%\*.pdf" 2^>NUL ^| find /i /v "\%SkipFolder%\"') do (  
   call :CheckFile "%%f" && (  
     echo %%f
   ) || (
     1>&2 echo %%f
   )
)) 1>"%GoodFiles%" 2>"%BadFiles%"  
ersetzen und in den Zeilen 4 und 5 vollständige Pfade für die Ausgabedateien angeben ...

Grüße
bastla
Member: Friemler
Friemler Jan 27, 2013 updated at 22:24:37 (UTC)
Goto Top
Hallo pdf-fragender und alle die hier mitlesen,

zunächst mal etwas fachchinesisch:

[FACHCHINESISCH]

Ich habe noch ein wenig geforscht und herausgefunden, dass der Adobe Reader eine rudimentäre Scripting-Schnittstelle hat, d.h. man kann ihn über ein Script steuern. Allerdings muss man dazu das ActiveX Control des Browser-Plugins verwenden (das Plugin, durch das man PDF-Dokumente im Browser ansehen kann), d.h. man kann die Programmierschnittstelle nur

  • von einer Webseite aus oder
  • aus einer HTML-Application (*.hta) heraus

ansprechen. Oder man erzeugt per VBScript über die OLE-Schnittstelle des InternetExplorers scriptgesteuert eine IE-Instanz, navigiert nach about:blank (leere Seite) und injiziert über das Document Object Model (DOM) den notwendigen HTML-Code in die Seite, um das Adobe Reader ActiveX Control ansprechen zu können. Man kann dann die Methode LoadFile aufrufen und eine Datei laden. Der Rückgabewert dieser Methode liefert die Information, ob das Dokument erfolgreich geladen werden konnte.

Link zur Doku von Adobe. Dort über das Inhaltsverzeichnis links navigieren nach:

Acrobat Interapplication Communication -> Interapplication Communication API Reference -> OLE Automation -> AxAcroPDFLib.AxAcroPDF

[/FACHCHINESISCH]


Hört sich erstmal gut an. Die Methode hat auch einige Vorteile. Das Script wird dadurch

  • kürzer,
  • zuverlässiger und
  • schneller.

Der Zuwachs an Zuverlässigkeit und Geschwindigkeit kommt dadurch zustande, dass das Script und das Laden der PDF-Dokumente synchron ablaufen, d.h. dann, und genau dann, wenn ein PDF-Dokument fertig geladen ist und die Aussage Erfolg/Fehlschlag gemacht werden kann, läuft das Script weiter. Dadurch wird nur solange gewartet, wie es wirklich notwendig ist, und das Ergebnis der Prüfung ist 100% verlässlich.

So, und jetzt kommen die Nachteile, die besonders für Dich, pdf-fragender, sehr gravierend sind:

  • Das ActiveX Control des Adobe Readers kann keine Netzwerkfreigaben (UNC-Pfade) und
  • keine Netzlaufwerke (als Laufwerk eingebundene Netzwerkfreigaben) ansprechen.

D.h. das untenstehende Script muss auf dem Rechner laufen, auf dem die PDF-Dateien liegen und auf diesem Rechner muss der Adobe Reader installiert werden. face-sad Dafür ist es wie gesagt um einiges schneller und zuverlässiger als die andere Version.

Vielleicht kannst Du Deine Admins überzeugen, wenn Du Ihnen erklärst, dass das andere Script mehrere Wochen laufen müsste um alle PDF-Dokumente zu prüfen und dabei auch noch fehlerhafte Ergebnisse auftreten können. Deshalb hier mal der Code, evtl. ist er auch für jemand anderes hilfreich.

@echo off & setlocal

::Quellverzeichnis
set "SrcFolder=<Laufwerk>:\Pfad\Archiv"  

::Auszulassendes Verzeichnis
set "SkipFolder=SchlechteQualität"  

::Ausgabedateien
set "GoodFiles=GoodFiles.txt"  
set "BadFiles=BadFiles.txt"  

::Pfad zu temporärer VBScript-Datei
set "CheckFile=%TEMP%\CheckPDFDoc.vbs"  


::Temporäre VBScript-Datei schreiben
> "%CheckFile%" echo.Set objIE = CreateObject("InternetExplorer.Application")  
>>"%CheckFile%" echo.  
>>"%CheckFile%" echo.objIE.Visible = False  
>>"%CheckFile%" echo.objIE.Navigate("about:blank")  
>>"%CheckFile%" echo.  
>>"%CheckFile%" echo.Do  
>>"%CheckFile%" echo.Loop Until objIE.ReadyState = 4  
>>"%CheckFile%" echo.  
>>"%CheckFile%" echo.objIE.Document.Write "<HTML><BODY><OBJECT classid=""CLSID:CA8A9780-280D-11CF-A24D-444553540000"" id=""AdobeReader""></OBJECT></BODY></HTML>"  
>>"%CheckFile%" echo.  
>>"%CheckFile%" echo.If objIE.Document.All.AdobeReader.LoadFile(WScript.Arguments(0)) Then  
>>"%CheckFile%" echo.  loadResult = 0  
>>"%CheckFile%" echo.Else  
>>"%CheckFile%" echo.  loadResult = 1  
>>"%CheckFile%" echo.End If  
>>"%CheckFile%" echo.  
>>"%CheckFile%" echo.objIE.Quit  
>>"%CheckFile%" echo.  
>>"%CheckFile%" echo.WScript.Quit loadResult  


::Für die Erzeugung der Ausgabedateien die Codepage umschalten
chcp 1252 > NUL

::Alle PDF-Dokumente in allen untergeordneten Verzeichnissen prüfen
::Dabei jedoch Dateien in einem bestimmtes Verzeichnis nicht prüfen
(for /f "delims=" %%f in ('dir /s /b /a:-d "%SrcFolder%\*.pdf" 2^>NUL ^| find /i /v "\%SkipFolder%\"') do (  
   cscript /nologo "%CheckFile%" "%%f" && (  
     echo %%f
   ) || (
     1>&2 echo %%f
   )
)) 1>"%GoodFiles%" 2>"%BadFiles%"  

::Temporäres VBScript löschen
del "%CheckFile%"  

Gruß
Friemler
Mitglied: 76109
76109 Jan 28, 2013 updated at 10:19:38 (UTC)
Goto Top
Hallo Friemler!

Wobei
If objIE.Document.All.AdobeReader.LoadFile
leider nur funktioniert, wenn z.B. die PDF-Datei nicht gefunden wird. Bei defekten PDF's gibt LoadFile auch True zurück...

Hatte eine ähnliche Idee, allerdings per HTA, was recht schnell geht. Leider habe ich auch keine Idee wie ein Lade-Fehler ausgewertet werden soll.

Der vollständigkeit halber der HTA-Code:
<html>
  <head>
    <title>PDF Test</title>
    <hta:application id="App" scroll="no" windowstate="minimize">  
  </head>
  <body>
    <object classid="CLSID:CA8A9780-280D-11CF-A24D-444553540000" id="AcroRead" height="100%" width="100%"></object>  
    <script type="text/vbscript">  
        Args = Split(App.CommandLine, """ ")  

        If UBound(Args) = 1 Then
            Arg = Trim(Replace(Args(1), """", ""))  
        Else
            MsgBox "Falsche Anzahl an Argumenten", vbExclamation, "Fehler . . ."  
            Window.Close
        End If
 
       'Methoden Siehe AcroPDFLib.AcroPDF  
        If AcroRead.LoadFile(Arg) Then
            MsgBox "OK"  
        Else
            MsgBox "Nicht OK"   'z.B. Datei nicht gefunden  
        End If
        
       'AcroRead.SetShowToolbar False  
       'AcroRead.SetShowScrollbars False  
       'AcroRead.SetLayoutMode "SinglePage"  
       'AcroRead.SetView "Fit"  
        
        Window.Close
   </script>
  </body>
</html>

Gruß Dieter
Member: Friemler
Friemler Jan 28, 2013 at 10:38:19 (UTC)
Goto Top
Hallo Dieter,

Zitat von @76109:
Bei defekten PDF's gibt LoadFile auch True zurück...

das ist natürlich schade. Mangels defekter PDF-Dateien face-wink hatte ich zum Testen eine leere Datei erstellt und mit der Dateierweiterung pdf versehen. In diesem Fall hat LoadFile korrekterweise False zurückgeliefert.

Gruß
Friemler
Mitglied: 76109
76109 Jan 28, 2013 updated at 10:50:13 (UTC)
Goto Top
Hallo Friemler!

das ist natürlich schade. Mangels defekter PDF-Dateien hatte ich zum Testen eine leere Datei erstellt und mit der Dateierweiterung pdf versehen. In diesem Fall hat LoadFile korrekterweise False zurückgeliefert.
Und ich habe zum Testen einfach mit einem Hex-Editor einige Daten am Anfang einer PDF-Datei mit einem x-beliebigen Zeichen überschriebenface-wink

Das ist wirklich schade...face-smile Aber möglicherweise funktionierts ja unter der Einbeziehung von Window-Buster, weil ja auch eine Meldung, wie beim AcorbatReader ausgegeben wird?

Gruß Dieter
Mitglied: 76109
76109 Jan 29, 2013 updated at 10:00:47 (UTC)
Goto Top
Hallo Friemler!

Habe das HTA-Skript ein wenig angepasst und scheint zu funktionieren. Allerdings kann das Skript keinen Exit-Code zurückgeben, aber da ja sowieso Log-Files geschrieben werden sollen/sollten, müssten die MsgBox-Zeilen nur durch entsprechende Codezeilen ersetzt werden.

Nach dem Ladevorgang wird ein Timer gesetzt und nach Ablauf des Timers wird getestet, ob eine Adobe-Meldung aktiviert werden kann (True/False), wobei True auf eine defekte PDF-Datei hinweist. Im Anschluss wird das Browser-Fenster automatisch geschlossen...

<html>
  <head>
    <title>PDF Test</title>
    <hta:application id="App" scroll="no" windowstate="maximize">  
  </head>
  <body>
    <object classid="CLSID:CA8A9780-280D-11CF-A24D-444553540000" id="AcroRead" height="100%" width="100%"></object>  
    <script type="text/vbscript">  
        Args = Split(App.CommandLine, """ ")  

        If UBound(Args) = 1 Then
            Arg = Trim(Replace(Args(1), """", ""))  
        Else
            MsgBox "Falsche Anzahl an Argumenten!", vbExclamation, "Fehler . . ."  
            Window.Close
        End If
 
       'Methoden Siehe AcroPDFLib.AcroPDF  
        If AcroRead.LoadFile(Arg) Then
            Window.SetInterval "TestAcroErr", 500   'Zeit in Millisekunden bei Bedarf anpassen  
        Else
            MsgBox "Fehler"  'Datei nicht gefunden...  
            Window.Close
        End If
        
        Sub TestAcroErr()
            If CreateObject("WScript.Shell").AppActivate("Adobe") Then  
                MsgBox "Fehler"   'Datei defekt...  
            Else
                MsgBox "OK"  
            End If
            Window.Close
        End Sub
 </script>
  </body>
</html>

Gruß Dieter

[edit] etwas nachgebessert und den Titel-Text auf "Adobe" reduziert [/edit]
Member: Friemler
Friemler Jan 29, 2013 at 08:40:54 (UTC)
Goto Top
Moin Dieter,

auf jeden Fall interessant. Aber die ganze Sache mit dem Adobe Reader ActiveX Control scheint nicht so einfach zu sein. Ich habe für meine Tests auch eine PDF-Datei durch Überschreiben einiger Bytes im Datei-Header künstlich zerstört. Beim Öffnen dieser Datei kam dann eine Fehlermeldung, in deren Titelzeile der String "Adobe PDF-Dokument" erschien. Dieses Fenster wurde von AppActivate natürlich nicht gefunden und das Ergebnis für diese Datei war falsch.

Da der TO die Lösung mit dem ActiveX Control höchstwahrscheinlich nicht verwenden kann, werde ich weitere Nachforschungen in dieser Richtung unterlassen.

Gruß
Friemler
Mitglied: 76109
76109 Jan 29, 2013 updated at 09:58:19 (UTC)
Goto Top
Hallo Friemler!

OKface-wink ist aber auch kein Problem, da bei AppActivate der Titel-Text nicht vollständig sein muss.

So würde es auch gehen:
Result = objShell.AppActivate "Adobe"   

Gruß Dieter

PS. Den letzten Code entsprechend nachgebessert...