Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Mit Excel-VBA Dokumenteigenschaften PDF auslesen

Mit Excel-VBA Dokumenteigenschaften PDF auslesen
23.07.2013 17:58:13
grassshopper
Hallo,
Frage:
wie kann ein 600-Zeichen-Eintrag aus den Dokumenteigenschaften einer PDF-Datei vollständig ausgelesen werden (Problem: String Zeichenbegrenzung)?

Über ein Excel-Formular werden mit Auswahlboxen Daten gewählt, darüber gesteuert ggf. Freitextfelder aktiviert, in die manuell Daten eingetragen werden können. Dies alles wird in ein Sheet übertragen. Dieses Sheet wird über VBA-Code mit PDFCreator als PDF-Dokument gespeichert.
Damit Kollegen mit meinem Excel-Formular bei einigen Dokumenten die Möglichkeit bekommen sollen, das PDF-Dokument nach Excel-Formular "zurückzuladen" und über das Formular zu überarbeiten (und neues PDF-Dokument zu generieren), werden die erfassten Daten in den Dokumenteigenschaften "Stichwörter" gespeichert.
Die erfassten Daten können ca. 600 (bis ca. 1000) Zeichen betragen.
Wenn ich nun das PDF-Dokument öffne (in Adobe Reader), kann ich mit rechter Maustaste die Eigenschaften abfragen und finde in "Stichwörter" auch diese 600 Zeichen wieder.
Hintergrund:
Es sollen nur bestimmte Daten über Auswahlboxen im Formular verwendet werden. In Ausnahmefällen soll das zurückladen möglich sein, damit bei ähnlichen Daten nicht alle Eingaben erneut von Hand gemacht werden müssen, sondern nur im komfortablen Formular einige Änderungen vorgenommen werden können.
Problem:
ich möchte diese Dokumenteigenschaften mit einem separaten VBA-Code in Excel auslesen, bekomme aber bei "Stichwörter" nur 259 Zeichen angezeigt (String).
Weiß jemand, wie ich diese Dokumenteigenschaften per VBA-Code vollständig auslesen kann?
Code zum Zurückladen der Daten:

Sub pdf_Zurueckladen()
Dim strVerzeichnis, strDateiname, strZielPfad, strZielDatei As String
Dim fso As New Scripting.FileSystemObject
Dim datei
Dim objFolder As Object
Dim varName
Dim docAutor, docTitel, docThema, docStichwoerter As Variant
Dim ws As Worksheet
strVerzeichnis = "C:\temp\"
strDateiname = Application.GetOpenFilename(filefilter:="PDF (*.pdf), *.pdf", Title:=" _
Linienmitteilung öffnen")
Select Case strDateiname
Case False: Exit Sub
End Select
Set datei = fso.GetFile(strDateiname)
strZielPfad = Left(strDateiname, InStrRev(strDateiname, "\"))
strZielDatei = Mid(strDateiname, InStrRev(strDateiname, "\") + 1)
Set objFolder = CreateObject("Shell.Application").Namespace(strZielPfad)
For Each varName In objFolder.Items
If varName = strZielDatei Then
docAutor = objFolder.getdetailsof(varName, 9)
docTitel = objFolder.getdetailsof(varName, 10)
docThema = objFolder.getdetailsof(varName, 11)
docStichwoerter = objFolder.getdetailsof(varName, 40)
End If
Next
'"docStichwoerter" wird über Variable "Tr" (Trenn-Kennzeichen) nach und nach verkleinert
If (docTitel = vorgabeDocTitel) And (docThema = vorgabeDocThema) Then
Me.txt_Datum.Value = Left(docStichwoerter, InStr(1, docStichwoerter, Tr) - 1)
docStichwoerter = Mid(docStichwoerter, InStr(1, docStichwoerter, Tr) + 1)
Me.txt_Kunde.Value = Left(docStichwoerter, InStr(1, docStichwoerter, Tr) - 1)
docStichwoerter = Mid(docStichwoerter, InStr(1, docStichwoerter, Tr) + 1)
Me.txt_Kundenummer.Value = Left(docStichwoerter, InStr(1, docStichwoerter, Tr) - 1)
docStichwoerter = Mid(docStichwoerter, InStr(1, docStichwoerter, Tr) + 1)
'und so weiter.......
Else
MsgBox "Das ausgewählte Dokument kann nicht" & vbNewLine & "in das Linienformular zurü   _
_
_
ckgeladen werden.", vbCritical + vbOKOnly, "Nicht unterstütztes Dokument"
End If
End Sub

Code zur PDF-Erstellung mit PDFCreator (Verweis PDFCreator muss vorhanden sein):

Sub pdfErstellung()
Dim pdfjob As PDFCreator.clsPDFCreator
Dim strVerzeichnis, strDateinamePDF  As String
Dim xlOldPrinter As String
Dim pfad, fileName As String
Dim ws
Dim vorgabeTitel, vorgabeThema, vorgabeStichwortGesamt, vorgabeStichwort1, vorgabeStichwort2   _
_
_
As String
Dim vorgabeStichwort3, vorgabeStichwort4, vorgabeStichwort5, vorgabeStichwort6 As String
xlOldPrinter = Application.ActivePrinter
Set pdfjob = New PDFCreator.clsPDFCreator
pfad = "C:\temp\"
fileName = "test.pdf"
'je Stichwort 100 Zeichen:
vorgabeStichwort1 = " _
TestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTest" _
_
vorgabeStichwort2 = " _
TestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTest" _
_
vorgabeStichwort3 = " _
TestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTest" _
_
vorgabeStichwort4 = " _
TestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTest" _
_
vorgabeStichwort5 = " _
TestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTest" _
_
vorgabeStichwort6 = " _
TestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTest" _
_
'Stichwörter gesamt 600 Zeichen:
vorgabeStichwortGesamt = vorgabeStichwort1 & vorgabeStichwort2 & vorgabeStichwort3 & _
vorgabeStichwort4 & vorgabeStichwort5 & vorgabeStichwort6
Set ws = Application.ThisWorkbook.Sheets(1)
ws.Select
With pdfjob
.cStart "/NoProcessingAtStartup"
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = pfad
.cOption("AutosaveFilename") = fileName
.cOption("AutosaveFormat") = 0
.cOption("StandardTitle") = "Test PDF"
.cOption("StandardSubject") = "Version 1"
.cOption("StandardKeywords") = vorgabeStichwortGesamt
.cClearCache
End With
ActiveSheet.PrintOut copies:=1, ActivePrinter:="PDFCreator"
Do Until pdfjob.cCountOfPrintjobs = 1
DoEvents
Sleep 1000
Loop
Sleep 1000
pdfjob.cPrinterStop = False
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop
Sleep 1000
pdfjob.cPrinterStop = False
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop
pdfjob.cClose
Set pdfjob = Nothing
Application.ActivePrinter = xlOldPrinter
End Sub

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mit Excel-VBA Dokumenteigenschaften PDF auslesen
25.07.2013 18:04:31
Oberschlumpf
Hallo ?
ein "Danke + Viele Grüße" am Ende deines Textes hat nicht mehr gepasst?
Ich weiß zwar keine Lösung, könnt mir aber vorstellen, dass ein Testen deines Problems einfacher sein könnte, wenn du nicht nur den Code, sondern eine Bsp-Datei inklusive des Codes zeigen würdest.
Hilft meine Idee?
Ciao
Thorsten

Anzeige
AW: Mit Excel-VBA Dokumenteigenschaften PDF auslesen
26.07.2013 16:45:03
grassshopper
Hallo,
eine Beispieldatei werde ich demnächst beifügen... in den letzten Tagen war verdammt viel los, so dass ich noch gar nicht zur weiteren Programmierung gekommen bin...
Vielen Dank und viele Grüße
grassshopper
;
Anzeige
Anzeige

Infobox / Tutorial

Dokumenteigenschaften von PDFs mit Excel-VBA auslesen


Schritt-für-Schritt-Anleitung

Um Dokumenteigenschaften aus PDFs mit Excel-VBA auszulesen, befolge diese Schritte:

  1. VBA-Umgebung öffnen: Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Referenz hinzufügen: Füge eine Referenz auf die Microsoft Scripting Runtime hinzu. Gehe zu Extras > Verweise und aktiviere die entsprechende Checkbox.

  3. Code einfügen: Verwende den folgenden Code, um die PDF-Dokumenteigenschaften auszulesen:

    Sub pdf_EigenschaftenAuslesen()
       Dim fso As New Scripting.FileSystemObject
       Dim datei As Object
       Dim strDateiname As String
       Dim docStichwoerter As String
    
       strDateiname = Application.GetOpenFilename("PDF (*.pdf), *.pdf", , "PDF-Datei auswählen")
       Set datei = fso.GetFile(strDateiname)
    
       docStichwoerter = datei.Attributes ' Hier kannst du weitere Eigenschaften abfragen
       MsgBox "Stichwörter: " & docStichwoerter
    End Sub
  4. PDF auswählen: Führe das Makro aus, um die gewünschte PDF-Datei auszuwählen und die Eigenschaften auszulesen.

  5. Ergebnisse prüfen: Die ausgelesenen Eigenschaften werden in einer MessageBox angezeigt.


Häufige Fehler und Lösungen

  • Problem: String Zeichenbegrenzung: Wenn du nur 259 Zeichen siehst, könnte dies an der maximalen Zeichenanzahl des verwendeten Strings liegen. Versuche, die Daten in kleinere Teile zu splitten und nacheinander auszulesen.

  • Problem: Excel-Dateipfad größer als 259 Zeichen: Stelle sicher, dass der Pfad zur PDF-Datei nicht zu lang ist. Kürze den Pfad oder speichere die Datei in einem anderen Verzeichnis.


Alternative Methoden

Wenn der oben genannte VBA-Ansatz nicht funktioniert, kannst du folgende Alternativen in Betracht ziehen:

  1. PDF-Tools: Nutze Software wie Adobe Acrobat, um die Metadaten direkt auszulesen und in Excel zu importieren.
  2. Drittanbieter-Bibliotheken: Verwende Bibliotheken wie iTextSharp oder PDFBox, um PDF-Daten in Excel zu importieren. Diese erfordern jedoch zusätzliche Installationen.

Praktische Beispiele

Hier ein Beispiel, wie du das Erstellungsdatum einer PDF-Datei auslesen kannst:

Sub pdf_ErstellungsdatumAuslesen()
    Dim fso As New Scripting.FileSystemObject
    Dim datei As Object
    Dim strDateiname As String
    Dim erstellungsdatum As Date

    strDateiname = Application.GetOpenFilename("PDF (*.pdf), *.pdf", , "PDF-Datei auswählen")
    Set datei = fso.GetFile(strDateiname)

    erstellungsdatum = datei.DateCreated
    MsgBox "Erstellungsdatum: " & erstellungsdatum
End Sub

Tipps für Profis

  • Debugging: Nutze Debug.Print innerhalb deines Codes, um Werte zu überprüfen, ohne ständig MessageBoxen zu verwenden.
  • Fehlerbehandlung: Implementiere On Error Resume Next, um Fehler abzufangen, die während des Auslesens auftreten können.
  • Optimierung: Arbeite mit Range-Objekten, um die Performance zu verbessern, wenn du große Datenmengen verarbeitest.

FAQ: Häufige Fragen

1. Wie kann ich die PDF-Metadaten auslesen?
Verwende die getdetailsof-Funktion in deinem VBA-Code, um spezifische Metadaten wie Titel, Autor und Stichwörter abzurufen.

2. Gibt es ein Limit für die Zeichenanzahl beim Auslesen?
Ja, die Standardzeichenbegrenzung in VBA kann dazu führen, dass nicht alle Daten ausgelesen werden. Verwende alternative Ansätze, um größere Datenmengen zu verarbeiten.

3. Kann ich Daten direkt aus PDFs in Excel einlesen?
Ja, durch Verwendung von VBA-Skripten oder speziellen Tools kannst du Daten aus PDFs direkt in Excel importieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige