arrow Home

Translate

RSS Feed

Kurz-Tipps:

An fontcapture.com kann man die eingescannte Handschrift hinschicken und erhält wenige Sekunden später kostenlose Truetype Fonts für die eigene Textverarbeitung. Daumen hoch!
 
PDF im Batch mit OpenOffice und Python PDF Drucken E-Mail
Benutzer Bewertung: / 63
SchlechtSehr Gut 
10. Mai 2007

ImageMit 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):

Letzte Aktualisierung ( 13. Dezember 2008 )
 
< Voriger Artikel

Website merken

 
 
Diese Seite darf verlinkt werden  Diese Seite verlinken

Mein Skype-Status

Mein Status

Anzeigen

Weiteres

Who's Online

Aktuell 15 Gäste online

Statistik

Besucher: 8135327