diff --git a/hack/generate-einsatrapporte.py b/hack/generate-einsatrapporte.py new file mode 100644 index 0000000..cebfab9 --- /dev/null +++ b/hack/generate-einsatrapporte.py @@ -0,0 +1,52 @@ +import uno +from com.sun.star.beans import PropertyValue +from com.sun.star.uno import RuntimeException + +def connect_to_libreoffice(port=2002): + localContext = uno.getComponentContext() + resolver = localContext.ServiceManager.createInstanceWithContext( + "com.sun.star.bridge.UnoUrlResolver", localContext) + try: + context = resolver.resolve(f"uno:socket,host=localhost,port={port};urp;StarOffice.ComponentContext") + return context.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", context) + except RuntimeException: + raise Exception("Make sure LibreOffice is running with a listening port (e.g., soffice --accept=\"socket,port=2002;urp;\" --norestore --nologo --nodefault)") + +def export_to_pdf(doc, file_name): + pdf_export_properties = tuple([ + PropertyValue(Name="FilterName", Value="writer_pdf_Export") + ]) + doc.storeToURL(f"file:///{file_name}", pdf_export_properties) + +def replace_text(doc, old_text, new_text): + replaceable = doc.createReplaceDescriptor() + replaceable.setSearchString(old_text) + replaceable.setReplaceString(new_text) + + doc.replaceAll(replaceable) + + + +def main(start_counter, num_documents, document_path): + desktop = connect_to_libreoffice() + + for i in range(num_documents): + counter = start_counter + i + load_props = PropertyValue(Name="Hidden", Value=True), + doc = desktop.loadComponentFromURL(f"file:///{document_path}", "_blank", 0, load_props) + + replace_text(doc, "counter", str(counter)) + + file_name = f"/home/tobru/Documents/Feuerwehr/Stab/Fourier/EinsatzrapporteLeer/Einsatzrapport2024-{counter}.pdf" + export_to_pdf(doc, file_name) + doc.dispose() + +if __name__ == "__main__": + document_path = "/home/tobru/Documents/Feuerwehr/Stab/Fourier/FW-Einsatzrapport FWU.odt" + start_counter = 1 + num_documents = 100 + + # Start libreoffice with: + # soffice --accept="socket,port=2002;urp;" --norestore --nologo --nodefault + main(start_counter, num_documents, document_path) +