55 lines
2.1 KiB
Python
55 lines
2.1 KiB
Python
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)
|
|
|
|
# after generation, run:
|
|
# pdftk $(ls -v *.pdf) cat output Einsatzrapporte2024.pdf
|