#!/usr/bin/python # -*- coding: utf8 -*- """ MyPasswordSafe2pdf Converts xml-exports from MyPasswordSafe to pdf-files. If you have a good printer, you can use pdfnup to get it smaller. Execute "MyPasswordSafe2pdf " and make shure there are no files called "secure-file.tex", "secure-file.aux", "secure-file.log" and "secure-file.pdf". THEY WILL BE DELETED! Needs LaTeX. """ from xml.dom import minidom import subprocess, sys, os, getopt VERSION="0.2" # Benutzungshinweise, gegliedert def Usage (nachricht): if nachricht != "": print nachricht else: print """Benutzung: MyPasswordSafe2pdf """ def main(argv=None): # Werbung # print "MyPasswordSafe2pdf, Version "+VERSION+" (c) Thomas Lauckner" ############################## # Lese Argumente ############################## if argv==None: argv=sys.argv try: opts, args = getopt.getopt(argv, '') # Das Zweite sind die Optionen wie '-d foo' => opts[0]=('-d', 'foo') except getopt.error, msg: Usage(msg) ############################## # Bearbeite Argumente ############################## if len (args) >= 2: # Dateinamen einlesen und Erweiterung abtrennen INFILE=args[1]; OUT_PATH=os.path.splitext(INFILE)[0] OUT_EXT=os.path.splitext(INFILE)[1] else: Usage("Bitte geben Sie einen XML-Dateinamen an.") return 2 ############################## # Erstelle .tex-Datei ############################## # Temporäre tex-Datei f=file(OUT_PATH+".tex", 'w') # Funktionen def ausgabe_klar (text2): text=text2.encode("utf8") f.write(text) def ausgabe (text2): text=text2.encode("utf8") f.write("\\begin{minipage}{15 em}\\begin{verbatim*}"+text+"\\end{verbatim*}\\end{minipage}") # LaTeX-Präambel ausgabe_klar (""" \\documentclass[a4paper, 10pt]{scrartcl} \n \\usepackage[utf8]{inputenc} \\usepackage{a4wide} \\pagestyle{empty} \\begin{document}""") # LaTeX-Inhalt # Try stoppt hier z.B. bei falschen oder nicht existenten Dateien try: # Datei einlesen xmlinput = minidom.parse (INFILE) except: Usage("Die angegebene Datei konnte nicht verarbeitet werden.") return 2 refgroup = xmlinput.getElementsByTagName('group') for gruppe in refgroup: ausgabe_klar ("\\section{" + gruppe.attributes["name"].value + "}\n") ausgabe_klar ("\\begin{tabular}{ccc} \n") refitem = gruppe.getElementsByTagName('item') for item in refitem: # try ... except ist notwendig, falls die XML-Daten leer sind, z.B. bei . # In diesem Fall gibt es kein ".data"-Element. try: name = item.getElementsByTagName('name')[0].firstChild.data except: name = "" try: user = item.getElementsByTagName('user')[0].firstChild.data except: user = "" try: password = item.getElementsByTagName('password')[0].firstChild.data except: password = "" ausgabe(name) ausgabe_klar(" & ") ausgabe(user) ausgabe_klar(" & ") ausgabe(password) ausgabe_klar("\\\\\n") ausgabe_klar("\\end{tabular}") ausgabe_klar("\\end{document}") f.close() ############################## # Erstelle .pdf-Datei ############################## # Zwei Durchläufe - Um LaTeX - Spinnereien vorsorglich zu beheben for i in range (1,2): subprocess.Popen(["pdflatex "+OUT_PATH+".tex"], shell=True, executable="/bin/bash", stdout=file("/dev/null", 'a'), stdin=None).wait() # LaTeX-Dateien aufräumen os.remove(OUT_PATH+".tex") os.remove(OUT_PATH+".aux") os.remove(OUT_PATH+".log") ############################## # Das Hauptprogramm :) ############################## if __name__ == "__main__": sys.exit(main())