AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PDF to Txt

Ein Thema von waldforest · begonnen am 2. Apr 2010 · letzter Beitrag vom 3. Apr 2010
Antwort Antwort
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#1

PDF to Txt

  Alt 2. Apr 2010, 10:21
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 ?
mfg wf
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
427 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: PDF to Txt

  Alt 2. Apr 2010, 11:19
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

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
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#3

Re: PDF to Txt

  Alt 2. Apr 2010, 17:41
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 ?
mfg wf
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#4

Re: PDF to Txt

  Alt 2. Apr 2010, 18:24
Ähm such mal nach pdftotxt.exe, die kann das
Ich werd morgen mal das ganze auf der Arbeit zusammensuchen und hier posten
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#5

Re: PDF to Txt

  Alt 2. Apr 2010, 19:12
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.
mfg wf
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
427 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: PDF to Txt

  Alt 3. Apr 2010, 08:20
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 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