Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Text aus durchsuchbarer PDF-Datei extrahieren (https://www.delphipraxis.net/212183-text-aus-durchsuchbarer-pdf-datei-extrahieren.html)

hoefi 31. Dez 2022 13:39

Text aus durchsuchbarer PDF-Datei extrahieren
 
Hallo,

ich habe mir einen Dokumentenscanner (SnapScan ix1600) gekauft und fange an, Dokumente ins PDF-Format zu scannen, um zukünftig das Papier zu entsorgen.
In Zukunft möchte ich dieses per Delphi-Programm unterstützen und möchte daher aus den durchsuchbaren PDF-Dateien die Texte extrahieren.
Das eigentliche Lesen der PDF-Dateien ist nicht unbedingt das Thema, allerdings finde ich keine Info darüber, wo (in welchem Object) in der PDF-Datei die Texte untergebracht sind.
Die Informationen sind per FlateDecode codiert, was ich eigentlich hinkriegen sollte.
Hat jemand sich schon mal erfolgreich dem Thema gewidmet?
Ich benötige nur die Texte.

himitsu 31. Dez 2022 13:59

AW: Text aus durchsuchbarer PDF-Datei extrahieren
 
Vermutlich wird der Scanner einfach nur das "Bild" als Bild in der PDF ablegen. (z.B. als JPEG oder komprimiertes Bitmap)

Genauso gut kann man sich vom Scanner auch ein TIFF geben lassen, oder einzelne Bilder pro Seite.



So oder so mußt du also noch ein OCR über die Bilder laufen lassen, um aus dem Bild den Text rauszubekommen.
OCR = Optical Character Recognition = Texterkennung

z.B. OCRmyPDF wandelt ein PDF aus Bildern in ein PDF mit Text um.



Und dann kannst du aus dieser PDF die Texte rausholen.

Oder eben die Bilder durch OCR in Text umwandeln und es direkt geben lassen.



Womit ich mal gespielt habe, ist Bei Google suchenOCRmyPDF im Docker innerhalb eines NAS laufen zu lassen.
Scanner scannt die PDF in ein Verzeichnis des NAS, darüber läuft regelmäßig das OCR (Bei Google suchensynOCR) und schiebt die konvertierten PDFs in ein anderes Verzeichnis (oder bennent sie zumindestens um).

Bei Google suchendelphi ocr

hoefi 31. Dez 2022 14:01

AW: Text aus durchsuchbarer PDF-Datei extrahieren
 
Hallo,

die PDF-Datei muss den Text enthalten, da sie durchsuchbar ist. OCR ist also automatisch nach dem Scannen mittels Abbyy Finereader durchgeführt worden.

himitsu 31. Dez 2022 15:47

AW: Text aus durchsuchbarer PDF-Datei extrahieren
 
OK, das hatte wohl jemand vergessen zu sagen.
Die Treiber/Sorftware des Herstellers liefern nur Bilder als JPEG/TIFF/PDF/... :angle2:

Nja, dann brauchst du nun eine PDF-Komponente.
Gibt es z.B. von DevExpress, Synopse oder Gnostice (PDFtoolkit)
Es gibt aber auch Konsolenprogramme, welche PDFs annehmen und z.B. TXT oder RTF rausgeben.




https://www.delphipraxis.net/191782-...trahieren.html
uvm.

oder, wer eine masoristische Ader hat, kann sich auch mit Adobe abquälen
https://www.swissdelphicenter.ch/en/...de.php?id=2169 (nur als Beispiel ... der Code hat schon ein paar kranke "Eigenarten", die man nicht nachmachen sollte, oder welche gar komplett falsch sind, schon auf den ersten Blick)

hoefi 31. Dez 2022 20:05

AW: Text aus durchsuchbarer PDF-Datei extrahieren
 
Hallo,

dann muss ich mich entschuldigen. Ich hatte vorausgesetzt, dass bekannt ist, dass eine durchsuchbare PDF-Datei schon mittels OCR gewandelt wurde.
Weiterhin möchte ich die PDF-Datei nativ lesen, also ohne Zuhilfenahme von Komponenten oder eigenen Programmen.
Hat dafür jemand Bespiel-Code? Es interessieren mich nur die Text-Objekte innerhalb der Datei, Grafiken usw. sind uninteressant.

himitsu 31. Dez 2022 20:19

AW: Text aus durchsuchbarer PDF-Datei extrahieren
 
Niemand hat Lust diesen Dreck selbst zu parsen,
aber wenn du unbedingt magst, dann
https://opensource.adobe.com/dc-acrobat-sdk-docs/
https://www.iso.org/standard/75839.html
https://www.pdfa.org/resource/pdf-specification-index/
https://opensource.adobe.com/dc-acro...32000_2008.pdf
https://resources.infosecinstitute.c...sic-structure/
...

Delphi.Narium 31. Dez 2022 20:43

AW: Text aus durchsuchbarer PDF-Datei extrahieren
 
Naja, betrachten wir es mal (mit 'nem Augenzwinkern) von der einfachen Seite:

'ne PDF ist auch nur 'ne Textdatei mit 'nem als (1:n Streams) eingebetteten und komprimierten Inhalt.

Den Text findest Du zwischen stream und endstream. (Ok, ob es Text ist oder nicht, erfährst Du erst nach dem Entpacken.)

Davor findest Du eine Zeile mit 'ner Info der Form <</Filter/FlateDecode/Length 9999>>
Da steht, wie der Stream kodiert ist und wie lang er ist. Du musst ihn also "nur noch" auslesen und dekodieren.

Das könnte mit Hilfe der ZLib funktionieren: ZLibCompressDecompress (Delphi)

Diverse Ansätze oder ähnliche Fragestellungen: <</Filter/FlateDecode/Length

Ansonsten: Die von himitsu bereits herausgesuchten Dokumentationen lesen und in Delphi umsetzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz