Ich verwende zunächst das Tool "pdftotext" um den Inhalt einer PDF-Datei als Text-datei zu speichern.
Schon die PDF-Datei selber enthält XML-Code und dieser soll dann durch mein Python-Skript eingelesen und geparst werden.
Ich erhalte also eine .txt-Datei mit genau dem richtigen Inhalt. 2Dinge sind aber möglicherweise problematisch:
1. Die Einrückungen aus dem Original-PDF fehlen.
2. DIe Datei schein am ENde irgendein Sonderzeichen zu enthlaten. Es sieht aus wie ein kleines Kästchen mit winzigen Zahlen drin.
Sieht für mich aus wie:
0 0
0 C
Ist es möglich, daß das anschliessende EInlesen deswegen fehlschlägt?
DIe Fehlermeldung verweist jedenfalls auf diese Zeile, column 0
XML einlesen - ein Zeichen am Ende scheint zu stören
@drnicolas: Das ist immer ein wenig problematisch zu beschreiben wie ein Zeichen aussieht, weil das von der Schriftart und vom System abhängen kann. Ich vermute einfach mal, dass es sich um das Zeichen '\u000c' handelt. Das ist ein Steuerzeichen, nämlich der Seitenvorschub (engl. Form Feed). Es könnte sein, dass das nach jeder Seite aus dem PDF eingefügt wird. Innerhalb von XML darf das allerdings nicht vorkommen:
Edit: An der Fehlermeldung sieht man übrigens auch ganz gut, dass es sich um einen Seitenvorschub handelt (Wert 12) ohne das man irgendeine Zeichendarstellung beschreiben muss. Fehlermeldungen am besten immer 1:1 kopieren.
Code: Alles auswählen
In [5]: etree.fromstring(u'<root>\u000c</root>')
File "<string>", line unknown
XMLSyntaxError: PCDATA invalid Char value 12, line 1, column 7
Das scheint exakt so zu sein. Immerhin stammt der XML-COde als Extrakt aus einer PDF-Datei!
Stellt sich die Frage ob es einen Weg gibt dieses Steuerzeichen zu unterdrücken (eher nicht - Effekt von pdftotext) oder loszuwerden (aus dem XML-Code).
Kann man irgendwie mit Python solche STeuerzeichen filtern ?
Stellt sich die Frage ob es einen Weg gibt dieses Steuerzeichen zu unterdrücken (eher nicht - Effekt von pdftotext) oder loszuwerden (aus dem XML-Code).
Kann man irgendwie mit Python solche STeuerzeichen filtern ?