Hi!
This script will convert files to PDF with OpenOffice.
Other formats (html, doc ...) should be possible, too.
Have a nice day,
thomas
# OpenOffice1.1 comes with its own python interpreter.
# This Script needs to be run with the python from OpenOffice.org:
# /opt/OpenOffice.org/program/python
# Start the Office before connecting:
# soffice "-accept=socket,host=localhost,port=2002;urp;"
#
# pyUNO Imports
import uno
from com.sun.star.beans import PropertyValue
# Python Imports
import os
import sys
# For a list of possible export formats see
# http://www.openoffice.org/files/docu...scription.html
# or
# /opt/OpenOffice.org/share/registry/data/org/openoffice/Office/TypeDetection.xcu
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 the office 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.createInstanceWith Context(
"com.sun.star.bridge.UnoUrlResolver", context)
try:
ctx = resolver.resolve(
"uno:socket,host=localhost,port=2002;urp;StarOffic e.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()