Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Solved: pyUNO Converter

Reply
Thread Tools

Solved: pyUNO Converter

 
 
Thomas Guettler
Guest
Posts: n/a
 
      11-27-2003
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()

 
Reply With Quote
 
 
 
 
Andreas Kuntzagk
Guest
Posts: n/a
 
      11-28-2003
On Thu, 27 Nov 2003 17:41:07 +0100, Thomas Guettler wrote:

> This script will convert files to PDF with OpenOffice. Other formats
> (html, doc ...) should be possible, too.


Nice.

Is there any way to start soffice without a display?
Could be used to offer a webservice-documentconverter.

Murple
 
Reply With Quote
 
 
 
 
Thomas Guettler
Guest
Posts: n/a
 
      11-28-2003
Am Fri, 28 Nov 2003 14:18:12 +0100 schrieb Andreas Kuntzagk:

> On Thu, 27 Nov 2003 17:41:07 +0100, Thomas Guettler wrote:
>
>> This script will convert files to PDF with OpenOffice. Other formats
>> (html, doc ...) should be possible, too.

>
> Nice.
>
> Is there any way to start soffice without a display?
> Could be used to offer a webservice-documentconverter.


No, but there is a special X-Server which does not need
a real display. But I don't think that it is thread save.

Untested:
You could start e.g. 5 office instances listening on 5
different ports and syncronize the access yourself.

Fortunately I only need it for batch processing.

thomas

 
Reply With Quote
 
Duane Kaufman
Guest
Posts: n/a
 
      12-17-2003
"Thomas Guettler" <(E-Mail Removed)> wrote in message news:<(E-Mail Removed)>...

Nice work!

One question though, doesn't this work only for OOo writer files (not
Draw or Calc files)?

I tried hacking it, and in the end, simply tried all output filters
that put out PDF in succession, until one worked.

I _know_ this is a hack, but I couldn't find any information on how to
use pyUNO to query OO and return what _type_ of file it had
opened.....

How _does_ one do that, anyway?

Thanks,
Duane


> 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()

 
Reply With Quote
 
yawar
Guest
Posts: n/a
 
      08-03-2004
One could create the properties list in one go:

properties = [PropertyValue() for i in range(3)]

And then fill it in:

properties[0].Name = ...
properties[0].Value = ...
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: [Python-de] PyUNO with different Python Max Muxe Python 1 02-25-2006 09:53 AM
PyUNO with different Python =?ISO-8859-1?Q?Katja_S=FCss?= Python 7 02-25-2006 09:51 AM
handling xls with pyuno John Hunter Python 1 01-28-2005 08:59 PM
pyUNO: Converting doc/sxw to html/ps Thomas Guettler Python 1 11-26-2003 02:21 PM
PyUNO: Python bridge distributed with new OpenOffice.org Jochen Knuth Python 0 07-15-2003 09:59 AM



Advertisments