fixed typo
[openoffice-python:openoffice-python.git] / sample-scripts / odf2pdf.py
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3 """
4 This sample script opens a ODF file using OpenOffice.org and
5 exports it as PDF.
6 """
7 #
8 # Copyright (c) 2008 by Hartmut Goebel <h.goebel@goebel-consult.de>
9 # Licenced under the GNU General Public License v3 (GPLv3)
10 # see file LICENSE-gpl-3.0.txt
11 #
12 # Based on some ideas from LX-office's 'oo-uno-convert-pdf.py'
13 # (see <http:///www.lx-office.org>).
14 #
15 # This is just a sample script for openoffice-python. If you are
16 # looking for a covnerter wich supports more formats, you may have a
17 # look at <http://www.artofsolving.com/opensource/pyodconverter>
18 # (which does not use openoffiec-python).
19 #
20
21 import openoffice.interact
22 import unohelper
23 from com.sun.star.beans import PropertyValue
24
25 import sys
26 import os.path
27
28 def write_pdf(doc, pdf_filename):
29     out_props = (
30         PropertyValue("FilterName", 0, "writer_pdf_Export", 0),
31         PropertyValue("Overwrite", 0, True, 0),
32         )
33     pdf_filename = os.path.expanduser(pdf_filename)
34     pdf_filename = os.path.abspath(pdf_filename)
35     pdf_url = unohelper.systemPathToFileUrl(pdf_filename)
36     print >> sys.stderr, pdf_url
37     doc.storeToURL(pdf_url, out_props)
38
39
40 def convert2pdf(odf_filename, pdf_filename=None, teardown=False):
41     desktop = openoffice.interact.Desktop()
42     # If the file does not exist, this will fail with:
43     # openoffice.interact.IllegalArgumentException: URL seems to be
44     #                      an unsupported one.
45     # (where the module name is missleading!)
46     doc = desktop.openFile(odf_filename, hidden=True)
47     if not pdf_filename:
48         pdf_filename = os.path.splitext(odf_filename)[0] + '.pdf'
49     write_pdf(doc, pdf_filename)
50     doc.dispose()
51     if teardown:
52         desktop.teardown()
53
54
55 if __name__ == '__main__':
56     import optparse
57     parser = optparse.OptionParser()
58     parser.add_option('--tear-down', action='store_true',
59                       help="tear down OOo after convertion")
60     opts, args = parser.parse_args()
61     if len(args) == 0 or len(args) > 2:
62         parser.error('expects one or two arguments')
63     convert2pdf(*args, **{'teardown': opts.tear_down})