PDF2Text-Prototype via Procedure: IMA (gelöst)

Für allgemeine Fragen zur Programmierung mit PureBasic.
sibru
Beiträge: 265
Registriert: 15.09.2004 18:11
Wohnort: hamburg

PDF2Text-Prototype via Procedure: IMA (gelöst)

Beitrag von sibru »

Hallo Allerseits,

ich knabbere immer noch am PDF-zu-TXT-Problem.
Ich rufe die via Prototype definierte DLL-Fnc auf: alles klappt wunderbar (kriege den Textanteil einer PDF-Datei ins ClipBoard).
Bei einem indirekten Aufruf via Procedure laufe ich auf einen Invalid Memory Access beim ProcedureReturn
oder "The debugged executable quit unexpectedly." :angry:

Kann mir da jemand ´n Tipp geben ?

Code: Alles auswählen

#PDF2Text_Dir="???" <-- Euer Download-SubDir der DLL-Dateien (siehe unten)

EnableExplicit

Prototype.l PDF_SeitenProto(PDF_File$) ;liefert Seiten-Anzahl einer PDF-Datei
Prototype.l PDF2TextProto(PDF_File$, Ziel, Hash, Quick, TXT_File$, Trim, SeitenPre$, PosShow, Seite);,SandUhr,MultiSpace,Sekunden,WortList)
;PDF_File$= vollständiger Dateiname der ZielDatei (incl.Pfad & Extension {PDF})
;Ziel: 1=TextDatei (siehe Option TXT_File$) (=Vorgabe)
;      2=ClipBoard
;      3=ResultString
;Hash: 0=Result ist kein Hashwert (=Vorgabe)
;      1=Result ist md5-HashWert
;Quick:0=liefert sortierte Strings
;      1=liefert Strings ähnlich der PDF-Position (incl. Leerzeichen...) (=Vorgabe)
;TXT_File$: vollständiger Dateiname der ZielDatei (incl.Pfad & Extension {TXT})
;Trim: 0=führende Leerzeichen bleiben erhalten (=Vorgabe)
;      1=führende Leerzeichen werden entfernt
;SeitenPre$: Text vor Seitenangabe (SeitenPre$ SeitenNr / TotalSeiten)
;PosShow: 0=ohne Positionsangabe der Texte
;         1=vor jedem Text: aktuelle Seite, TotalSeiten, ZeilenNr [pixel] und SpaltenNr [pixel] (nur mit Quik=0)
;Seite:0=alle Seiten aus PDF extrahieren
;     >0:Nur diese Seite  aus PDF extrahieren

Global PDF_Lib = OpenLibrary(#PB_Any, #PDF2Text_Dir+"PDFtext.dll")
Debug "PDF_Lib="+Str(PDF_Lib)

If PDF_Lib
  Global ExtraktPDF_Text.PDF2TextProto = GetFunction(PDF_Lib, "GetPDFText")
  Global PDF_Seiten.PDF_SeitenProto = GetFunction(PDF_Lib, "GetPDFPageCount")
EndIf

Procedure PDF2Text(PDF_File$, TXT_File$ = "", Seite = 0);Parameter-vereinfachter Aufruf
  Protected File, result, Ziel
  If TXT_File$ = "" : Ziel = 2 : Else : Ziel = 1 : EndIf ;ClipBoard oder TextDatei
  Debug "PDF2Text(" + #DQUOTE$ + PDF_File$ + #DQUOTE$ + ", " + #DQUOTE$ + TXT_File$ + #DQUOTE$ + "): Ziel="+Str(Ziel)
  result = ExtraktPDF_Text(PDF_File$, Ziel, 0, 1, TXT_File$ + "", 0, "Seite ", 0, Seite);,0,0,0,0)
  Debug "result=" + Str(result)
  ProcedureReturn result
EndProcedure

DisableExplicit 
PDF$ = #PDF2Text_Dir+"PDFtext.dll.pdf"
TXT$ = #PDF2Text_Dir+"PDFtext.dll.txt"

;Vorprüfung
Seiten = PDF_Seiten(PDF$)
If Seiten=9001 
  Debug "Datei nicht vorhanden: "+PDF$
  End
EndIf
Debug PDF$ + " enthält " + Str(Seiten) + " Seiten"

;direkter Aufruf der Prototype-Funktion
res = ExtraktPDF_Text(PDF$, 2, 0, 1, TXT$, 0, "Seite ", 0, 4)  
Debug "Result=" + Str(res)
Debug GetClipboardText()

;indirekter Aufruf der Prototype-Funktion
res = PDF2Text(PDF$, "", 4) 
Debug "Result=" + Str(res) 
Debug GetClipboardText()
und hier die Dateien:
https://www.file-upload.net/download-13 ... t.dll.html
https://www.file-upload.net/download-13 ... l.pdf.html

Danke im Vorraus :allright:

sibru
Zuletzt geändert von sibru am 27.02.2020 12:00, insgesamt 1-mal geändert.
Bild Bild
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: PDF2Text-Prototype via Procedure: IMA

Beitrag von HeX0R »

Code: Alles auswählen

Prototype.l PDF_SeitenProto(PDF_File.p-utf8) ;liefert Seiten-Anzahl einer PDF-Datei
Prototype.i PDF2TextProto(PDF_File.p-utf8, Ziel, Hash, Quick, TXT_File.p-utf8, Trim, SeitenPre.p-utf8, PosShow, Seite, clock, blank, ende, wlist)
Wieso lässt Du Parameter einfach weg, die Mandatory sind?
Klar, dass Du damit den Stack verhagelst.

Ausserdem habe ich keine Ahnung, mit welcher Vorkriegsversion von PB Du noch arbeitest, aber ohne die Pseudotypes, funktionierte erst mal überhaupt nichts!
sibru
Beiträge: 265
Registriert: 15.09.2004 18:11
Wohnort: hamburg

Re: PDF2Text-Prototype via Procedure: IMA (gelöst)

Beitrag von sibru »

Danke, das mit dem verhagelten Stack war´s !!!
(Testweise mal nicht benötigte Parameter weggelassen und vergessen...)
Bild Bild
Antworten