Improved installation checks again.
[openoffice-python:openoffice-python.git] / sample-scripts / PrintToWriter.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 #**********************************************************************
4 #
5 #  PrintToWriter.py - sample script for openoffice-python
6 #
7 # This implements a simple class which makes it easy and convenient
8 # to print a bunch of text into a Writer document.
9 #
10 #  http://openoffice-python.origo.ethz.ch/
11 #
12 #**********************************************************************
13 #
14 # Copyright (c) 2003-2004 Danny Brewer <d29583@groovegarden.com>
15 # Copyright (c) 2008 by Hartmut Goebel <h.goebel@goebel-consult.de>
16 #
17 # This library is free software; you can redistribute it and/or modify
18 # it under the terms of the GNU Lesser General Public License as
19 # published by the Free Software Foundation; either version 2.1 of the
20 # License, or (at your option) any later version.
21 #
22 # This library is distributed in the hope that it will be useful, but
23 # WITHOUT ANY WARRANTY; without even the implied warranty of
24 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
25 # Lesser General Public License for more details.
26 #
27 # You should have received a copy of the GNU Lesser General Public
28 # License along with this library; if not, write to the Free Software
29 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
30 # USA
31 #
32 # See:  http://www.gnu.org/licenses/lgpl.html
33 #
34 #**********************************************************************
35 #
36 # If you make changes, please append to the change log below.
37 #
38 # Change Log
39 # Danny Brewer     2004-06-05 Revised 
40 # Hartmut Goebel   2008-03-09 Major changes, adopted for
41 #                             openoffice-python
42 #
43 #**********************************************************************
44
45 import uno
46 import openoffice.interact
47
48 _ControlCharacter = "com.sun.star.text.ControlCharacter"
49
50 PARAGRAPH_BREAK  = uno.getConstantByName(_ControlCharacter+ ".PARAGRAPH_BREAK")
51 LINE_BREAK       = uno.getConstantByName(_ControlCharacter+ ".LINE_BREAK")
52 HARD_HYPHEN      = uno.getConstantByName(_ControlCharacter+ ".HARD_HYPHEN")
53 SOFT_HYPHEN      = uno.getConstantByName(_ControlCharacter+ ".SOFT_HYPHEN")
54 HARD_SPACE       = uno.getConstantByName(_ControlCharacter+ ".HARD_SPACE")
55 APPEND_PARAGRAPH = uno.getConstantByName(_ControlCharacter+ ".APPEND_PARAGRAPH")
56
57 class PrintToWriter:
58     """
59     A class which allows conveniently printing stuff into a Writer
60     document.
61     
62     Very useful for debugging, general output purposes, or even for
63     creating reports.
64     """
65     
66     def __init__(self, desktop=None):
67         if not desktop:
68             desktop = openoffice.interact.Desktop() # todo: defaultDesktop?
69         self._doc = desktop.newDoc('swriter', )#target='_blank', hidden=1)
70         self._text = self._doc.getText()
71         self._cursor = self._text.createTextCursor()
72
73     def writeControlCharacter(self, char, absorb=False):
74         # todo: what does 'absort' mean?
75         self._text.insertControlCharacter(self._cursor, char, absorb)
76
77     def write(self, string, absorb=False):
78         self._text.insertString(self._cursor, str(string), absorb)
79
80     def writelines(self, lines, absorb=False):
81         for line in lines:
82             self._text.insertString(self._cursor, line, absorb)
83
84     def writeTab(self, absorb=False):
85         self.write("\t", absorb)
86
87     def paragraphBreak(self, absorb=False):
88         self.writeControlCharacter(PARAGRAPH_BREAK, absorb)
89
90     def writeLn(self, *args):
91         self.writelines(args)
92         self.paragraphBreak()
93
94     def writeTabSeparated(self, *args):
95         if not args:
96             return
97         arg = args[0]
98         self.write(arg)
99         for arg in args[1:]:
100             self.writeTab()
101             self.write(arg)
102
103
104 if __name__ == '__main__':
105     """
106     An example of how to use the PrintToWriter class to trivially
107     create a new Writer document, and write out text into it.
108     """
109     doc = PrintToWriter()
110     doc.writeLn("Hello World")
111     doc.writeTabSeparated("String", 123, 456.23, True)
112     doc.writeLn()
113     doc.writeLn()
114
115     doc.writeLn("Tab delimited values ...")
116    
117     doc.writeTabSeparated(123, 456, 789); doc.writeLn()
118     doc.writeTabSeparated(465, 522, 835); doc.writeLn()
119     doc.writeTabSeparated(886, 164, 741); doc.writeLn()