OpenDocument ODT i Python
14 July 2008
Comments
Pliki Open Document Text (ODT) stosowane są m.in. w pakietach OpenOffice czy Koffice. Pliki ODT to w rzeczywistości pliki ZIP zawierające określony zestaw plików. By przekonwertować plik ODT do XHTML musimy:- Otworzyć plik zip i odczytać potrzebne pliki
- Pobrać zawartość pliku content.xml z treścią
- Pobrać potencjalne grafiki i zapisać je pod określoną nazwą
- Dokonać konwersji content.xml za pomocą szablonu XSL do kodu XHTML
- Zapisać wynik :)
Prosty kod wyglądałby tak:
# -*- coding: utf-8 -*-
import zipfile, sha, re
#4suite http://4suite.org/index.xhtml
from Ft.Xml.Xslt import Transform
#otwieramy plik ODT - ZIP
z = zipfile.ZipFile("oofice.odt", "r")
images = {}
# przechodzimy w pętli wszystkie pliki w archiwum
for zfile in z.namelist():
# wyciągamy wszystkie grafiki
if zfile.find('Pictures/') != -1:
zfile_content = z.read(zfile)
digest = sha.new(zfile_content).hexdigest()
x = open('files/'+digest, 'w')
images[zfile.replace('Pictures/', '')] = digest
x.write(zfile_content)
x.close()
# czytamy treść
content = z.read('content.xml')
# wyszukujemy grafiki
tags = re.findall('<draw:image xlink:href="Pictures/([a-z .A-Z_0-9]*)" (.*?)/>', content)
for pic in tags:
# i oszukańczo wstawiamy XHTML
content = content.replace('<draw:image xlink:href="Pictures/'+ pic[0] +'" '+ pic[1] +'/>', '<draw:image xlink:href="Pictures/'+ pic[0] +'" '+ pic[1] +'/><img src="files/' +images[pic[0]] + '" alt="" />')
# konwertujemy XML do XHTML za pomocą szablonu XSL
result = Transform(content, 'template.xsl')
# zapis wyniku
x = open('res.html', 'w')
x.write(result.replace('<img', '<img').replace('/>', '/>'))
x.close()
Oto zawartość template.xsl używanego przez kod:
RkBlog
Comment article