Python Scripte

PDF im Batch mit OpenOffice und Python

Mit Python lässt sich OpenOffice wunderbar zur Konvertierung von Dokumenten im Batch automatisieren. Das folgende Python Script ist ein Office zu PDF Batch Converter, basierend auf der OpenOffice PyUNO API. Es wird am besten mit dem Python Interpreter aus OpenOffice aufgerufen und konvertiert alle Dokumente in einem angegebenen Verzeichnis zu PDF.

Vorraussetzung ist natürlich, dass die PyUNO API bei der OpenOffice-Installation mitinstalliert und OpenOffice Im Servermodus gestartet wurde:

soffice "-accept=socket,host=localhost,port=2002;urp;"

Und hier ein beispielhafter Aufruf des Programms:

c:\\programme\\OpenOffice\\program\\python.bat c:\\converter\\ooconvert.py c:\\testdocs\\doc

Und nun der Python Quellcode:

 
# For a list of possible export formats see 
# http://www.openoffice.org/files/documents/25/111/filter_description.html 
# or 
# /opt/OpenOffice.org/share/registry/data/org/openoffice/Office/TypeDetection.xcu  

import sys, os, uno 
from com.sun.star.beans import PropertyValue  
export_format="writer_pdf_Export" 
export_extension="pdf"  
def usage():
     print """Usage: %s in_dir out_dir All files in in_dir will be opened with OpenOffice.org and saved to out_dir You must start OpenOffice with this line before starting this script:   soffice "-accept=socket,host=localhost,port=2002;urp;"     """ % (os.path.basename(sys.argv[0]))  
def do_file(file, desktop, out_url):
     # Load File
     file=os.path.abspath(file)
     url="file:///%s" % file
     properties=[]
     p=PropertyValue()
     p.Name="Hidden"
     p.Value=True
     properties.append(p)
     doc=desktop.loadComponentFromURL(
         url, "_blank", 0, tuple(properties));
     if not doc:
         print "Failed to open '%s'" % file
         return
     # Save File
     properties=[]
     p=PropertyValue()
     p.Name="Overwrite"
     p.Value=True
     properties.append(p)
     p=PropertyValue()
     p.Name="FilterName"
     p.Value=export_format
     properties.append(p)
     p=PropertyValue()
     p.Name="Hidden"
     p.Value=True
     basename=os.path.basename(file)
     idx=basename.rfind(".")
     assert(idx!=-1)
     basename=basename[:idx]
     url_save="%s/%s.%s" % (out_url, basename, export_extension)
     try:
         doc.storeToURL(
             url_save, tuple(properties))
     except:
         print "Failed while writing: '%s'" % file
     doc.dispose()
 def main():
     if len(sys.argv)!=3:
         usage()
         sys.exit(1)
     in_dir=sys.argv[1]
     out_dir=sys.argv[2]
     out_url="file://%s" % os.path.abspath(out_dir)
     print out_url
     # Init: Connect to running soffice process
     context = uno.getComponentContext()
     resolver=context.ServiceManager.createInstanceWithContext(
         "com.sun.star.bridge.UnoUrlResolver", context)
     try:
         ctx = resolver.resolve(
             "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
     except:
         print "Could not connect to running openoffice."
         usage()
         sys.exit()
      smgr=ctx.ServiceManager
     desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop",ctx)
     files=os.listdir(in_dir)
     files.sort()
      for file in files:
         print "Processing %s" % file
         file=os.path.join(in_dir, file)
         do_file(file, desktop, out_url)
  if __name__=="__main__":
     main()

Eine Antwort schreiben

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.