def generate(document, values, save_to): for k in values.keys(): replace(document, k, values[k]) file_name = 'file://' + save_to if file_name[-4:] != '.odt': file_name += '.odt' try: document.storeAsURL(file_name, ()) except ErrorCodeIOException, e: error(__name__, "File writing error: %s" % e.Message)
def get_document(file_name): path = os.path.join(MEDIA_ROOT, "template_docs/" + file_name) debug(__name__, path) local = uno.getComponentContext() resolver = local.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", local) document = None try: context = resolver.resolve( "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext" ) desktop = context.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", context) document = desktop.loadComponentFromURL("file://" + path, "_blank", 0, ()) except UnoException, e: error(__name__,"OpenOffice connection error: %s" % e.Message) return None
def act(task, rewrite=False): if task.doc_url and not rewrite: return task.doc_url requests = task.request_set.all() document = get_document("act.odt") if document: search = document.createSearchDescriptor() search.SearchString = '$table' found = document.findFirst(search) if found: table = document.createInstance( "com.sun.star.text.TextTable" ) table.initialize(1,4) text = document.Text text.insertTextContent(found.Start, table, 0) # head table.getCellByPosition(0, 0).Text.setString(u'Наименование') table.getCellByPosition(1, 0).Text.setString(u'Инв. номер') table.getCellByPosition(2, 0).Text.setString(u'Год приобретения') table.getCellByPosition(3, 0).Text.setString(u'Состояние') #data for r in requests: index = table.Rows.Count table.Rows.insertByIndex(index, 1) table.getCellByPosition(0, index).Text.setString(r.device) table.getCellByPosition(1, index).Text.setString(r.number) table.getCellByPosition(2, index).Text.setString(r.year) path = os.path.join(MEDIA_ROOT, "docs/") + str(task.pk) + '.odt' try: document.storeAsURL('file://' + path, ()) except ErrorCodeIOException, e: error(__name__, "File writing error: %s" % e.Message) url = os.path.join(MEDIA_URL, "docs/" + str(task.pk) + ".odt") task.doc_url = url task.save() document.dispose() return url