Mustafa Görmezer

 
  • Decrease font size
  • Default font size
  • Increase font size
arrow Home
PDF im Batch mit OpenOffice und Python PDF Drucken E-Mail
Benutzer Bewertung: / 64
SchlechtSehr Gut 
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()

Relevante Beiträge (automatisch):

 
< Voriger Artikel

Sag nein!

.ausgestrahlt

Statistik

Besucher: 11018634
Aktuell 11 Gäste online

Feedback

Wenn dir die Seite nützlich war, gib ihr doch ein +1:

Kurz-Tipps:

3DXML-Player unterstützt jetzt auch CGR
Der 3DXML-Player von Dassault Systemes unterstützt seit kurzem neben dem hauseigenen 3D XML-Format auch das leichtgewichtige CGR-Format aus CATIA.
Weiterlesen …
 

Kommentare

  • Hallo, PyScripter gefällt mir auch wirklich sehr gut. Etwas nervig ist aber, dass bei jedem Aufruf von input() ein Dialogfenster für die Eingabe aufge... weiter...
  • Hallo Zusammen, vielen Dank für die hilfreiche Unterstützung beim Erstellen des ersten eigenen 3d-PDF. Für eine Technikerarbeit soll ich ein Bauteil i... weiter...
  • Suche nach einem Mindmapping-Tool für mein Projekt und ich fand joomla über Ihre Website, danke! Grüße aus Barcelona weiter...
RSS

Weiteres