Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi PDF to Txt (https://www.delphipraxis.net/149913-pdf-txt.html)

waldforest 2. Apr 2010 09:21


PDF to Txt
 
Hallo,
ich befasse mich derzeit mit dem Auslesen einer PDF. Mei Ziel ist es diese in eine z.B. Textdatei zu konvertieren. Im Netz

http://www.swissdelphicenter.ch/de/showcode.php?id=2169 Text aus PDF auslesen, ohne ActiveX

habe ich eine Anleitung gefunden, mit der ich die einzelnen Texte auslesen kann. Nach einer kleinen Modifikation wird der Text nun Zeilenweise in einem memo dargestellt.
Leider werden nur die einzelnen Wörter ausgelesen, Spaces und sonstige Formate werden ignoriert.

Nun möchte ich dies verfeinern und den Inhalt in einem RichEdit mit den Fonts und Formate darstellen.
Wie kann ich aus dem PDF-File die entsprechenden Fonts/Formate auslesen ?

Hier komme ich nicht weiter, und brauche mal ein paar Tipps
Hat jemand soetwas schon einmal gemacht ?? Wenn ja, wie kann ich dies angehen ?

ULIK 2. Apr 2010 10:19

Re: PDF to Txt
 
Hallo,

Wenn Du das selbst schreiben willst, mußt Du Dir "erst einmal" einen kompletten PDF Renderer schreiben, der dann in der Lage ist, die gefundenen Elemente in ein RTF zu schreiben. Und selbst dann wirst Du bei Leerzeichen zwischen Worten etc. Probleme haben: In PDF werden Leerzeichen ja nicht unbedingt als solche eingefügt und gerendert. Oft definiert sich ein Abstand zwischen zwei Wörtern nur dadurch, das das der erste Buchstabe des zweiten Wortes einfach weiter rechts positioniert wird.
Lies Dir einfach mal die PDF Spec durch :twisted:

Selbst die kommerziellen Sachen (PDF XChange SDK, QuickPDF, ...), die Text extrahieren können haben alle noch so ihre Schwächen. Man sollte sich halt mal eingestehen: PDF ist ein Druckformat und nicht unbedingt geeignet die Semantik der Information zu erhalten.

Grüße,
Uli

waldforest 2. Apr 2010 16:41

Re: PDF to Txt
 
Hallo,

vom Grundsatz ist die Antwort ja OK. Denn auch kostenlose Tools, die soetwas bewerkstelligen gibt es ja wie Sand am Meer, z.B.wie A-PDF Text Extractor.

Mich reizt auch vielmehr zu verstehen, wie man so etwas machen kann.
Lassen wir erts einmal die Fonts weg, gibt's denn einen Tipp, wie ich z.B. die Leerzeichen, sowie Zeilenumbrüche auslesen kann, welche nicht direkt mit einem text verbunden sind ?

dominikkv 2. Apr 2010 17:24

Re: PDF to Txt
 
Ähm such mal nach pdftotxt.exe, die kann das
Ich werd morgen mal das ganze auf der Arbeit zusammensuchen und hier posten

waldforest 2. Apr 2010 18:12

Re: PDF to Txt
 
Danke für den Tipp,
fertige Tools habe ich im Netz auch gefunden. Ich würde soetwas aber gerne einmal selber coden und verstehen wollen.

ULIK 3. Apr 2010 07:20

Re: PDF to Txt
 
Wenn Du es selbst machen willst:

--> PDF Spec durcharbeiten

Dann einen PDF Parser schreiben, der Dir die Textelemente bestimmt (Verschlüsselungsalgorithmen, verschachtelte/gestreamte Crossreferenzen, linearisierte PDFs, Codetabellen beachten). Dann schauen, daß Du den zugehörigen Font aus den Eigenschaften des Textelements bzw. des umgebenden graphischen Containers auslesen kannst.

Was die Leerzeichen betrifft: Wenn Du noch die Koordinaten der einelnen Zeichen bekommst, dann kannst Du hergehen und schauen, ob sie sich auf einer y-Koordinate befinden. Wenn nicht, dann entweder Fontwechsel oder neue Zeile. Für die Leerzeichen zwischen zwei Worten: wenn der Font einer mit fester Zeichenbreite ist, dann die kannst Du anhand der Abstände zwischen den beiden Wörtern bestimmen, ob da ein Zeichen reinpaßt. Wenn ja, dann Leerzeichen.
Bei Fonts ohne fixe Zeichenbreite helf ich mir gerade damit, daß ich mir über den ganzen Text die durchschnittliche Zeichenbreite des Fonts berechne und dann für ein Leerzeichen diese Durchschnittsbreite verwende. Mit ein bischen tricksen an einer geeigneten Skalierung krieg ich dann ganz gute Ergebnisse (aber halt selten völlig korrekte).


Grüße,
Uli


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 Uhr.

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