Jutta: Inhaltsverzeichnisse aus PDF Dokumenten als HTML-Tabelle

Hallo Leute

ich habe nicht besonders viel Ahnung von HTML und Co, ich kann eigentlich nur die Basics.

Nun zu meiner Frage:
Ich habe hier mehrere 100 PDF-Dokumente, die alle jeweils ein Inhaltsverzeichnis enthalten. Diese Inhaltsverzeichnisse möchte ich rauskopieren und in eine ganz einfache (nicht formatierte) HTML-Tabelle packen. Wenn ich die Inhaltsverzeichnisse rauskopiere, dann habe ich erstmal ja nur einen Fließtext. Z.B.

1 Einleitung ......................................... 2
2 Haupttext .......................................... 3
2.1 Mama ............................................. 7
2.2 Papa ............................................. 9
2.2.1 Opa ........................................... 11
2.2.2 Oma ........................................... 13
2.3 Tochter ......................................... 14
3 Sohn .............................................. 88
4 Fazit ............................................. 99   ;-)

Nur leider sind die echten Inhaltsverzeichnisse noch viiiiel länger als das in diesem Beispiel.

Ich benötige 3 Spalten, in jede Zeile soll eine neue Überschrift. Gibt es eine einfache Möglichkeit (ein Programm oder irgendwas selber programmiertes), daraus ohne mühsames Kopieren der einzelnen Überschriften, Seitenzahlen usw. eine Tabelle im HTML Format erstellen zu lassen? Z.B. irgendetwas, das erkennt, dass die Kapitelnummern in die erste Spalte gehören, die Überschriften in die zweite und die Seitenzahlen in die letzte?

Ich benötige die Inhaltsverzeichnisse in dieser einfachen HTML-Form, da ich sie in eine bestehende Datenbank einpflegen möchte. Für das Inhaltsverzeichnis gibt es in dieser Datenbank ein Textfeld, das HTML sozusagen "versteht"... Damit eine Tabelle entsteht und kein Fießtext, benötige ich daher jeweils immer den Tabellen-HTML-Code.

Ich hoffe, ihr versteht mein Problem und habt vielleichte eine einfache Lösung parat. Das wäre super :-)

Viele Grüße

Jutta

  1. Hallo,

    ich persönlich kenn jetzt kein passendes Tools, aber Google schon ;-)

    Ist auch Freeware dabei. Vielleicht ist es eine Möglichkeit, ganze Dokumente zu konvertieren und dir nur den Inhaltsteil heraus zu kopieren?

    Viele Grüße
    Siri

    1. Hallo,

      ich persönlich kenn jetzt kein passendes Tools, aber Google schon ;-)

      Ist auch Freeware dabei. Vielleicht ist es eine Möglichkeit, ganze Dokumente zu konvertieren und dir nur den Inhaltsteil heraus zu kopieren?

      Viele Grüße
      Siri

      Danke :-) Leider wurden die Inhaltsverzeichnisse der PDF-Dateien nicht in Tabellenformat erstellt. Deswegen wandelt so ein Converter sie wahrscheinlich auch nicht in eine Tabelle um, oder?

      Aber ein Versuch ist es Wert!

      1. Danke :-) Leider wurden die Inhaltsverzeichnisse der PDF-Dateien nicht in Tabellenformat erstellt. Deswegen wandelt so ein Converter sie wahrscheinlich auch nicht in eine Tabelle um, oder?

        Hmm... Vielleicht ist eins von den Tools konfigurierbar? So eine Art Target-HTML? Aber da musst du dich wohl leider durchwühlen.

  2. Om nah hoo pez nyeetz, Jutta!

    Nimm eine Textverarbeitung deiner Wahl und speichere das Dokument als HTML.

    Matthias

    --
    1/z ist kein Blatt Papier.

    1. Om nah hoo pez nyeetz, Jutta!

      ???

      Nimm eine Textverarbeitung deiner Wahl und speichere das Dokument als HTML.

      Wenn das so einfach wäre. Word erstellt beispielsweise nur Müll... Und außerdem muss ich ja trotzdem noch jede einzelne Überschrift und jede einzelne Seitenzahl in die einzelnen Felder hineinkopieren. Die Inhaltsverzeichnisse der PDF-Dateien wurden leider nicht als Tabelle erstellt und lassen sich somit auch nicht als Tabelle herauskopieren...

      :-(

      1. Om nah hoo pez nyeetz, Jutta!

        Ich hab mal folgendes gemacht:

        notepad++

        #1# Ersetze alle ".." durch ""
        #2# Ersetze alle " ." durch ""
        #3# Wandle normale Leerezeichen in Tabulatoren um
        #4# Füg das Ergebnis in Word ein
        #5# Mach ne Tabelle drum

        Schöner wäre natürlich

        #3a# Wandle normale Leerzeichen in "</td><td>"
        #4a# Füge am Anfang jeder Zeile "<tr><td>" ein
        #5a# Füge am Ende jeder Zeile "</td></tr>" ein

        4a und 5a sollte mit einem regulären Ausdruck passen, aber da ich muss ich jetzt passen

        Matthias

        --
        1/z ist kein Blatt Papier.

        1. Hallo Matthias

          #3# Wandle normale Leerezeichen in Tabulatoren um
          #3a# Wandle normale Leerzeichen in "</td><td>"

          Das würde aber problematisch, wenn ein Titel aus mehr als einem Wort besteht.

          Eine Variante wäre

          • das erste Leerzeichen wird TAB oder "</td><td>" und
          • die Kombination " .." wird TAB oder "</td><td>"

          Voraussetzung ist natürlich, dass

          • keine Leerzeichen in der Aufzählung sind
          • immer Leerzeichen zwischen Titel und Punkten sind
          • keine zwei Punkte in Folge im Titel vorkommen

          Gruß
          Ole

  3. Hallo Jutta!

    ich habe nicht besonders viel Ahnung von HTML und Co, ich kann eigentlich nur die Basics.

    HTML-Kenntnisse sind so ziemlich das Letzte, was du in diesem Fall brauchst ...! ;-)

    Nun zu meiner Frage:
    Ich habe hier mehrere 100 PDF-Dokumente, die alle jeweils ein Inhaltsverzeichnis enthalten. Diese Inhaltsverzeichnisse möchte ich rauskopieren und in eine ganz einfache (nicht formatierte) HTML-Tabelle packen. Wenn ich die Inhaltsverzeichnisse rauskopiere, dann habe ich erstmal ja nur einen Fließtext. Z.B.

    1 Einleitung ......................................... 2
    2 Haupttext .......................................... 3
    2.1 Mama ............................................. 7
    2.2 Papa ............................................. 9
    2.2.1 Opa ........................................... 11
    2.2.2 Oma ........................................... 13
    2.3 Tochter ......................................... 14
    3 Sohn .............................................. 88
    4 Fazit ............................................. 99   ;-)

    Nur leider sind die echten Inhaltsverzeichnisse noch viiiiel länger als das in diesem Beispiel.

    Sind sie denn immer auf einer/ der ersten Seite, oder gibt es auch da schon Unterschiede?

    Ich benötige 3 Spalten, in jede Zeile soll eine neue Überschrift. Gibt es eine einfache Möglichkeit (ein Programm oder irgendwas selber programmiertes), daraus ohne mühsames Kopieren der einzelnen Überschriften, Seitenzahlen usw. eine Tabelle im HTML Format erstellen zu lassen? Z.B. irgendetwas, das erkennt, dass die Kapitelnummern in die erste Spalte gehören, die Überschriften in die zweite und die Seitenzahlen in die letzte?

    Eine "einfache Möglichkeit" vermutlich nicht - ansonsten hättest du diese ja vermutlich bereits gefunden. Da, soweit ich das richtig verstanden habe, im Original keinerlei "Formatierung/Auszeichnung" vorhanden ist, die eine entsprechende Erkennung/ Verarbeitung ermöglichen würde vorhanden ist, müsste diese ja erstmal "erzeugt" werden (Stichwort "RegExp").

    Ich benötige die Inhaltsverzeichnisse in dieser einfachen HTML-Form, da ich sie in eine bestehende Datenbank einpflegen möchte. Für das Inhaltsverzeichnis gibt es in dieser Datenbank ein Textfeld, das HTML sozusagen "versteht"... Damit eine Tabelle entsteht und kein Fießtext, benötige ich daher jeweils immer den Tabellen-HTML-Code.

    Das ist nach meinem Dafürhalten auch wieder "suboptimal". Anstatt nur jeweils die "reine Information" in einem Feld der Tabelle abzuspeichern, umfasst diese jeweils alle Daten plus den entsprechenden HTML-Code in einem Feld, oder habe ich das falsch verstanden?

    Ich hoffe, ihr versteht mein Problem und habt vielleichte eine einfache Lösung parat. Das wäre super :-)

    Ich denke, dass es darauf hinauslaufen wird eine "Lösung" zu finden, bei der sich der Aufwand für die "Lösung" und der händische Anteil in einem gesunden Verhältnis zueinander befinden.

    Gruß Gunther

    1. Hallo Jutta!

      ich habe nicht besonders viel Ahnung von HTML und Co, ich kann eigentlich nur die Basics.

      HTML-Kenntnisse sind so ziemlich das Letzte, was du in diesem Fall brauchst ...! ;-)

      Nun zu meiner Frage:
      Ich habe hier mehrere 100 PDF-Dokumente, die alle jeweils ein Inhaltsverzeichnis enthalten. Diese Inhaltsverzeichnisse möchte ich rauskopieren und in eine ganz einfache (nicht formatierte) HTML-Tabelle packen. Wenn ich die Inhaltsverzeichnisse rauskopiere, dann habe ich erstmal ja nur einen Fließtext. Z.B.

      1 Einleitung ......................................... 2
      2 Haupttext .......................................... 3
      2.1 Mama ............................................. 7
      2.2 Papa ............................................. 9
      2.2.1 Opa ........................................... 11
      2.2.2 Oma ........................................... 13
      2.3 Tochter ......................................... 14
      3 Sohn .............................................. 88
      4 Fazit ............................................. 99   ;-)

      Nur leider sind die echten Inhaltsverzeichnisse noch viiiiel länger als das in diesem Beispiel.

      Sind sie denn immer auf einer/ der ersten Seite, oder gibt es auch da schon Unterschiede?

      Sie sind leider alle auf unterschiedlichen Seiten und meistens mit 2 bis 3 Seiten Länge! Aber ich könnte sie ja auch in eine txt-Datei kopieren und dann mit dieser txt-Datei weiterarbeiten. Z.B. mit PHP? Ich habe leider Null Ahnung davon ... Ärgerlich :-D

      Ich benötige 3 Spalten, in jede Zeile soll eine neue Überschrift. Gibt es eine einfache Möglichkeit (ein Programm oder irgendwas selber programmiertes), daraus ohne mühsames Kopieren der einzelnen Überschriften, Seitenzahlen usw. eine Tabelle im HTML Format erstellen zu lassen? Z.B. irgendetwas, das erkennt, dass die Kapitelnummern in die erste Spalte gehören, die Überschriften in die zweite und die Seitenzahlen in die letzte?

      Eine "einfache Möglichkeit" vermutlich nicht - ansonsten hättest du diese ja vermutlich bereits gefunden. Da, soweit ich das richtig verstanden habe, im Original keinerlei "Formatierung/Auszeichnung" vorhanden ist, die eine entsprechende Erkennung/ Verarbeitung ermöglichen würde vorhanden ist, müsste diese ja erstmal "erzeugt" werden (Stichwort "RegExp").

      ?!

      Ich benötige die Inhaltsverzeichnisse in dieser einfachen HTML-Form, da ich sie in eine bestehende Datenbank einpflegen möchte. Für das Inhaltsverzeichnis gibt es in dieser Datenbank ein Textfeld, das HTML sozusagen "versteht"... Damit eine Tabelle entsteht und kein Fießtext, benötige ich daher jeweils immer den Tabellen-HTML-Code.

      Das ist nach meinem Dafürhalten auch wieder "suboptimal". Anstatt nur jeweils die "reine Information" in einem Feld der Tabelle abzuspeichern, umfasst diese jeweils alle Daten plus den entsprechenden HTML-Code in einem Feld, oder habe ich das falsch verstanden?

      Genau so ist es. Ist nicht meine Datenbank. Ich soll's einfach nur einfügen :-)

      Ich hoffe, ihr versteht mein Problem und habt vielleichte eine einfache Lösung parat. Das wäre super :-)

      Ich denke, dass es darauf hinauslaufen wird eine "Lösung" zu finden, bei der sich der Aufwand für die "Lösung" und der händische Anteil in einem gesunden Verhältnis zueinander befinden.

      Kann man nicht irgendwas mit PHP (oder so) programmieren, das mir aus der txt-Datei eine neue txt-Datei erstellt, die den Fließtext in den HTML-Code einbaut? So im Sinne von "Nach dem ersten Leerzeichen folgt die zweite Spalte, nach den Punkten folgt die dritte Spalte", "nach einem Zeilenumbruch im txt-Dokument folgt die nächste Zeile"... Das muss doch gehen. Ich weiß leider nur nicht, wo ich anfangen muss zu lesen, um mir soetwas zu erstellen! Ich glaube jedoch, dass es sich lohnen würde... bei der Menge der Inhaltsverzeichnisse und Überschriften :-)

      Gruß Gunther

      1. Hi

        Kann man nicht irgendwas mit PHP (oder so) programmieren, das mir aus der txt-Datei eine neue txt-Datei erstellt, die den Fließtext in den HTML-Code einbaut? So im Sinne von "Nach dem ersten Leerzeichen folgt die zweite Spalte, nach den Punkten folgt die dritte Spalte", "nach einem Zeilenumbruch im txt-Dokument folgt die nächste Zeile"... Das muss doch gehen. Ich weiß leider nur nicht, wo ich anfangen muss zu lesen, um mir soetwas zu erstellen! Ich glaube jedoch, dass es sich lohnen würde... bei der Menge der Inhaltsverzeichnisse und Überschriften :-)

        Alles was du in exakte Regeln packen kannst, kannst du auch programmieren. Solltest du mit PHP arbeiten wollen könntest du z.B. einen Blick auf str_replace ff. oder strpos ff. werfen.
        Ein weiteres Thema sind dann z.B. auch Arrays.

        Gruß
        Ole

      2. Hallo Jutta!

        1 Einleitung ......................................... 2
        2 Haupttext .......................................... 3
        2.1 Mama ............................................. 7
        2.2 Papa ............................................. 9
        2.2.1 Opa ........................................... 11
        2.2.2 Oma ........................................... 13
        2.3 Tochter ......................................... 14
        3 Sohn .............................................. 88
        4 Fazit ............................................. 99   ;-)

        Sind sie denn immer auf einer/ der ersten Seite, oder gibt es auch da schon Unterschiede?

        Sie sind leider alle auf unterschiedlichen Seiten und meistens mit 2 bis 3 Seiten Länge! Aber ich könnte sie ja auch in eine txt-Datei kopieren und dann mit dieser txt-Datei weiterarbeiten. Z.B. mit PHP?

        Das wäre schonmal ein guter Anfang, wenn du die alle in einer TXT_Datei hättest.
        BTW: Spielt der Dateiname der jeweiligen PDF-Datei eigentlich keine Rolle?
        Sonst weiß doch hinterher keiner zu welcher Datei das jeweilige Inhaltsverzeichnis gehört!?

        Kann man nicht irgendwas mit PHP (oder so) programmieren, das mir aus der txt-Datei eine neue txt-Datei erstellt, die den Fließtext in den HTML-Code einbaut? So im Sinne von "Nach dem ersten Leerzeichen folgt die zweite Spalte, nach den Punkten folgt die dritte Spalte", "nach einem Zeilenumbruch im txt-Dokument folgt die nächste Zeile"... Das muss doch gehen.

        Ja, das siehst du schon völlig richtig!
        Man muss jetzt vorher nur sicherstellen, dass die so definierten Bedingungen auch tatsächlich für alle möglichen Varianten (also Inhalte einer Zeile) so zutreffen.

        Ich weiß leider nur nicht, wo ich anfangen muss zu lesen, um mir soetwas zu erstellen! Ich glaube jedoch, dass es sich lohnen würde... bei der Menge der Inhaltsverzeichnisse und Überschriften :-)

        Bis ich jetzt eine "fehlerfrei funktionierende" Version gebastelt habe, haben wir auch schon Weihnachten. ;-)
        Aber ich bin mir sicher, dass dir hier einer der PHP-Profis schnell weiterhelfen kann.

        Der "grobe" Ablauf sieht so aus:

        • TXT-Datei (zeilenweise) einlesen
        • Zeile "zerlegen" in die 3 gesuchten Bestandteile und jeweils den benötigten HTML-Code einfügen
        • umgewandelte Zeile speichern

        Für das Einlesen und das Zerlegen gibt es verschiedene Optionen. Ole hat ja schon einige davon genannt. Es kämen aber auch noch die preg-Funktionen mit Regulären Ausdrücken in Frage.

        Da es sich um ein "Einmal-Projekt" handelt, spielt Performance hier ja keine Rolle.

        Gruß Gunther

  4. Hallo Jutta!

    Ich habe dir jetzt mal ein Quick'n & Dirty PHP Skript erstellt, was eine TXT-Datei mit exakt dieser Struktur als Eingabe verarbeitet, und die Ausgabe in eine neue Textdatei schreibt (Achtung: Eine bereits vorhandene Datei dieses Namens wird überschrieben!)

    1 Einleitung ......................................... 2
    2 Haupttext .......................................... 3
    2.1 Mama ............................................. 7
    2.2 Papa ............................................. 9
    2.2.1 Opa ........................................... 11
    2.2.2 Oma ........................................... 13
    2.3 Tochter ......................................... 14
    3 Sohn .............................................. 88
    4 Fazit ............................................. 99

    Konventionen sind u.a.:
    -- zwischen der Kapitelnummer und dem Namen muss ein Leerzeichen sein

    • Die Kapitelbezeichnung darf keine 2 aufeinanderfolgenden Punkte '..' beinhalten
    • zwischen den Punkten und der Seitenzahl muss ein Leerzeichen sein

    Hier das Skript:

      
    <?php  
    $lines = file('Content-Table.txt'); // EDIT: Pfad zur Datei und ggf. Dateinamen anpassen!  
    $html = array();  
    foreach($lines as $key => $line) {  
    	$line = trim($line);  
    	$str_out = "<tr><td>";  
    	$pos_first = strpos($line, ' ');  
    	$pos_last = strrpos($line, ' ');  
    	if ($pos_first !== false && pos_last !== false) {  
    		$str_start = substr($line, 0, $pos_first);  
    		$str_out .= $str_start."</td><td>";  
    		$str_tmp = substr($line, strlen($str_start), $pos_last);  
    		$suchmuster = '/\.{2}/';  
    		preg_match($suchmuster, $str_tmp, $treffer, PREG_OFFSET_CAPTURE);  
    		if(isset($treffer[0][1])) {  
    			$str_out .= trim(substr($str_tmp, 0, $treffer[0][1]))."</td><td>";  
    		}  
    		$str_out .= trim(substr($line, $pos_last))."</td></tr>";  
    		array_push($html, $str_out);  
    	}  
    }  
    $fh = fopen('Content-Table-HTML.txt', 'w'); // EDIT: Pfad zur Datei und ggf. Dateinamen anpassen!  
    foreach($html as $value) fputs($fh, $value."\n");  
    echo 'Datei erfolgreich erstellt - fertig!' . PHP_EOL;  
    ?>  
    
    

    Die Stellen, wo du ggf. die Dateinamen und deren Pfadangaben ändern musst, sind entsprechend gekennzeichnet.

    Das Skript verzichtet (fast) auf jegliche Prüfung. Die Struktur der Ausgangsdatei muss also "passen", ansonsten funktioniert es nicht. Und das Skript sollte nur lokal für diesen Zweck verwendet werden!

    Ich hoffe, es hilft und erfüllt seinen Zweck - Viel Erfolg!

    Gruß Gunther