PDA

Vollständige Version anzeigen : Plaintext aus PDF extrahieren


ebs17
18.01.2011, 23:57
Manchmal besteht die Notwendigkeit, aus einem PDF-Dokument den enthaltenen Text zu ermitteln, um daraus bestimmte Teile zu extrahieren.

Die nachfolgende Funktion zeigt unter Verwendung von pdftotext, wie man eine resultierende Textdatei erzeugt:
Public Function fGetPDFText(ByVal sExecuteFile As String, _
ByVal sSourcePDF As String, _
ByVal sTargetTXT As String) As Boolean
'// ------------------------------------------------------------------------------------
'// Methode: | Erzeugen einer Textdatei aus einem PDF-Dokument
'// ------------------------------------------------------------------------------------
'// Parameter: | sExecuteFile - vollständiger Pfad der pdftotext.exe
'// | sSourcePDF - vollständiger Pfad des Quelldokumentes (PDF)
'// | sTargetTXT - vollständiger Pfad des Zieldokumentes (TXT)
'// ------------------------------------------------------------------------------------
'// Rückgabe: | True bei Erfolg
'// ------------------------------------------------------------------------------------
'// Autor: | ebs17
'// ------------------------------------------------------------------------------------
'// Hinweis: | pdftotext.exe beziehbar über http://www.foolabs.com/xpdf/download.html
'// | aktueller Download zum 18.01.2011:
'// | ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.02pl5-win32.zip
'// ------------------------------------------------------------------------------------

Dim sCommand As String
Dim vResult As Variant
sCommand = sExecuteFile & " -raw " & sSourcePDF & " " & sTargetTXT
vResult = Shell(sCommand, vbHide)
fGetPDFText = Not IsNull(vResult)
End Function

Scorefun
19.01.2011, 11:44
bei dieser Version geht allerdings das Layout der PDF-Datei verloren.

Um das zu vermeiden, sollte statt des Paramters -raw der Parameter -layout eingesetzt werden ;)

ebs17
19.01.2011, 12:29
Der Hinweis auf weitere mögliche Parameter ist richtig. Die Wahl sollte man aber von eigenen Erfordernissen abhängig machen.
Bei einem Test mit einer zwei- bis vierspaltigen Zeitung wurden bei Beibehaltung des Layouts zusammengehörige Texte zerstückelt, was dann eine nachfolgende Analyse nicht leichter macht.

In dem oben erwähnten Zip-File gibt es auch eine pdftotext.txt, die über die Parameter informiert.

Scorefun
19.01.2011, 12:42
Der Hinweis auf weitere mögliche Parameter ist richtig. Die Wahl sollte man aber von eigenen Erfordernissen abhängig machen.


Da hast Du wohl recht ;)

MrSchnabel
23.07.2013, 08:20
So nun kram ich dieses Thema nochmal heraus.

Erstmal vielen Danke für dieses Tutorial. Es funktioniert wunderbar.

Jetzt hab ich nochmal eine Frage : Wie behandelt ihr Leerzeichen in Datei und/oder Pfadnamen. Bei mir funktioniert die Umwandlung in die Txt nicht, wenn ein Leerzeichen drin ist.

Hier mein Aufruf :

sCommand = "" & TempDir & "pdftotext.exe" & " -layout " & TempDir & FileNameShort & " " & TempDir & Left(FileNameShort, Len(FileNameShort) - 3) & "txt"

Tempdir ist dabei der Pfad zum Ordner von PdfToText

FileNameShort ist der Dateiname(ohne Pfad)

Scorefun
23.07.2013, 13:53
Dann müssen da doppelte anführungszeichen drum

MrSchnabel
23.07.2013, 14:57
hey,

ja das hatte ich mir gedacht, jedoch habe ichs nicht hinbekommen, könntest du mir netterweise sagen wo ich die hinmachen soll? hatte es so versucht, dass ich jeden dateipfad einmal mit den Ausrufezeichen umschließe, hat aber irgendwie nicht hingehauen.


schon mal vielen Dank

Scorefun
23.07.2013, 17:37
tempDatei = """C:\Eigene Dateien mit Leerzeichen\Deine Datei.pdf"""

oder

tempDatei = chr(13) & "C:\Eigene Dateien mit Leerzeichen\Deine Datei.pdf" & chr(13)

MrSchnabel
24.07.2013, 12:29
Danke, habs jetzt hinbekommen.

abby741
04.02.2014, 10:16
In dem oben erwähnten Zip-File gibt es auch eine pdftotext.txt, die über die Parameter informiert.

ebs17
27.10.2014, 08:21
Kleine Korrektur zu Beitrag #8: Maskierung des Pfades erfolgt besser mit Doublequotes.
tempDatei = chr(34) & "C:\Eigene Dateien mit Leerzeichen\Deine Datei.pdf" & chr(34)

SMP4000
04.04.2017, 16:35
Hallo Zusammen

Ich hab den Code von MOFGuru auspropiert und er läuft Super.
Nur meine Frage der bearbeitet aber nur die erste Seite was mach ich mit einem Dokument was mehrer Seiten hat?

für eure Hilfe Danke ich euch schon mal

Vg

SMP