Generating a report: Python to ODT (OOO) or doc

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Schonmal vielen Dank, ich schaue mir das gleich an und halte euch über Ergebnisse auf dem laufenden.

Vielen Dank und Grüße.
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

hallo zusammen,

ich hab mich heute ein bisl gespielt und denke ich mache es jetzt über ODFPY.
http://odfpy.forge.osor.eu/.

Allerdings habe ich noch ein paar Schwierigkeiten.
Ich habe jetzt ein Template (odt file mit ein paar variablen, footer, header, mainpage, index) angelegt.
Nun möchte ich, nach dem Inhaltsverzeichnis, anfangen die Struktur aufzubauen.
Also h1 element, text, h1 elment, h2 element , text element und so weiter.

Allerings habe ich es bis dato nicht hinbekommen, an eine bestimmte Stelle zu springen und dort dann "einfach"
Text anzuhängen.Versucht habe ich das indem ich eine variable im odt file definiert habe und diese über

Code: Alles auswählen

mydoc.text.VariableGet("content")
ansprechen wollte.

Anbei ein Beispiel

Code: Alles auswählen

from odf.opendocument import OpenDocumentText
from odf.style import Style, TextProperties
from odf.text import H, P, Span
from opendocument import load

mydoc = load("GS_Beispiel.odt")
position = mydoc.text.VariableGet("content")
h=P(text="Hello World!")
position.text.addElement(h)
mydoc.save("newReport.odt")
FehlerMeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Entwicklungsecke\EclipseWorkspace\x_OOOExport\src\tutorial\helloWord.py", line 14, in <module>
    position = mydoc.text.VariableGet("content")
AttributeError: Element instance has no attribute 'VariableGet'
An sich logisch, da nach Api das Anhängen an einer Variable nicht möglich ist, jedenfalls so wie ich das verstehe.
Aber wie dann *grübel*


Das eigentliche Problem ist allerdings für mich das ich aus der Api/Dokumentation nicht schau werde.
http://odfpy.forge.osor.eu/manual/

Die Beispiele beschäftigen sich immer mit dem kompletten Neuaufbau, jedoch will ich wie ich das durch Xpath und genshi kenne an eine Stelle springen und dort Text anfügen. Sicherlich möglich aber mir wohl noch nicht bekannt.

Hat von euch vielleicht einer ein Beispiel? Wahrscheinlich stehe ich schon wieder auf dem Schlauch.

Danke und schönes Wochenende.
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Hallo und guten Morgen an diesen schönen regnerischen Tag,

ich finde mich langsam in ODFPY rein, obwohl da sicherlich noch viel ausprobieren notwendig ist.
Allerdings stehe ich immer noch vor einem größen Problem, wer hätte das jetzt erwartet? Ich habe
in der Datenbank bzw. als Quelle Wiki-Texte vorliegen.

Kennt einer von euch ein Modull wie ich nun die Wiki Formatierung zu OO.org xml-Formatierung umwandle.
Sicherlich, das könnte man selber schreiben, aber das hat doch bestimmt schon einer in einer schönen
lib gemacht?

Grüße
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Welche Wikisyntax wurde denn verwendet?
Gibt es nicht schon einen Konverter für deine Wikisyntax?
Musst du die Seiten noch nachbearbeiten?
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Hallo Snede

verwendet werden würde MoinMoin. Allerdings habe ich jetzt die Eingabe umgestellt von Wiki zu HTML.
Die HTML Eingabe wird durch eine neue Editorerweiterung realisiert.

Folglich muss ich "nur" noch HTML zu ODT wandeln.
Da habe ich im Forum etree einmal aus der Standardlib oder aus lxml hier i als Empfehlung gefunden.

Bis jetzt habe ich die Änderungen noch nicht genau verglichen, denke aber das die Standardlib
reichen sollte da ich wie gesagt "nur" von (x)html zu odt (XML) muss und keine nachträgliche Änderung
mittels xpath durchfühern will. Ansonsten würd ich auch hier wieder auf Genshi zurück greifen.

Wichtig ist mir eigentlich nur das das Format (Farbe, Einrücken, Zeilenumbrüche) erhalten bleibt, Umlaute
richtig übersetzt werden so das ich das ganze möglichst einfach mittels odfpy in ein file schreiben kann.

Schaunma mal
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Freitag Nachmittag, mein Gehirn schaltet sich ab, oder so..

Aber um nochmal festzuhalten

Ich erstelle mit ODFPY aus einem vorhanden oo-file ein neues und schreibe dort Informationen rein.
Diese Informationen sind teilweise HTML und müssen (mit der vorhanden Formatierung, Einrückungen etc)
umgewandelt werden, um diese mit ODFPY in das File mit Formatierungen abzuspeichern.

Es ist möglich die Umwandlung diese Umwandlung mit lxml bzw. ElementTree zu machen?
D.h. ich kann nach meiner idealistischen Auffwassung vorne html reinstecken und bekomme hinten xml raus?

Externe Formatierungsangaben sind hierfür nicht notwendig?

Ansonsten sollte ich fast über einen anderen WEg generell nachdenken, um aus python einen odf report zu generieren?

schönes Wochenende
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Hallo zusammen,

entschuldigt das ich euch schon wieder in Beschlag nehme.

Themenstellung: (x)html -> odt

Ich Versuche jetzt mittels lxml, was hier ja empfohlen wird, einen html-String mittels eines xslt in ein odt zu transformieren.

Allerdings wird quasi nicht ein einziger Tag erkannt.

Als XSLT verwende ich http://gitorious.org/xhtml2odt/xhtml2odt/

Aufruf in Python ist dann relativ unspektakulär

Code: Alles auswählen

        xslt_doc = etree.parse("xhtml2odt.xsl")
        transform = etree.XSLT(xslt_doc)

        xhtml = etree.fromstring(xhtml) # must be valid xml
        odt = transform(xhtml,debug="1")
        return str(odt).replace('<?xml version="1.0" encoding="utf-8"?>','')
Allerdings bekomme ich dank debug-funktion angezeigt, das kein Tag erkannt wurde.

Input

Code: Alles auswählen

"<html><head><title></title></head><body><p><strong>headline</strong></p><p> \
    text text text</p><ul><li>punkt 1</li> <li>punkt 2</li> <li> punkt 3</li></ul></body></html>"
Output:

Code: Alles auswählen

<!--Unknown tag : htmlheadline text text textpunkt 1 punkt 2 punkt 3--> <html> <!--Unknown tag : head--> <head> <!--Unknown tag : title--> <title/> </head> <!--Unknown tag : bodyheadline text text textpunkt 1 punkt 2 punkt 3--> <body> <!--Unknown tag : pheadline--> <p> <!--Unknown tag : strongheadline--> <strong>headline</strong> </p> <!--Unknown tag : p text text text--> <p> text text text</p> <!--Unknown tag : ulpunkt 1 punkt 2 punkt 3--> <ul><!--Unknown tag : lipunkt 1--><li>punkt 1</li> <!--Unknown tag : lipunkt 2--><li>punkt 2</li> <!--Unknown tag : li punkt 3--><li> punkt 3</li></ul> </body> </html> 
Kennt evtl jemand von euch das Verfahren und könnt mir einen Wink mit dem Zaunpfahl geben, was ich hier falsch mache?


Vielen Dank für eure Hilfe.

Grüße
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Nach dem ich wohl ein paarmal meinen Kopf gegen die Wand geschlagen habe ist mir dann doch noch
der "dumme" Fehler aufgefallen.
Es kann ausschließlich xhtml zu odt gewandelt werden und nicht html zu odt. xHTML unterscheidet sich zu html "natürlich" darin, das eine Angabe wie xmlns=\"http://www.w3.org/1999/xhtml\" erfolgen muss.
Dann klappt das schon gleich viel besser.

Geht es nur noch darum odfpy klar zu machen , dass der übergebene xhtml String nicht als String sondern eben
als xml in content.xml eingefügt werden soll. Die Api ist zwar nicht gut, aber ich bin mir sicher das auch sowas möglich sein sollte. Ich geb euch bescheid, falls ich es gefunden habe.

Grüße
Antworten