{"id":23638031,"url":"https://github.com/turulomio/unogenerator","last_synced_at":"2026-06-07T06:00:44.925Z","repository":{"id":43316513,"uuid":"407227961","full_name":"turulomio/unogenerator","owner":"turulomio","description":"Libreoffice files generator programmatically with python and Libreoffice server instances","archived":false,"fork":false,"pushed_at":"2024-10-27T15:25:51.000Z","size":11467,"stargazers_count":16,"open_issues_count":5,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-12-28T04:38:32.450Z","etag":null,"topics":["docx","libreoffice","libreoffice-api","libreoffice-calc","libreoffice-writer","linux","localc","lowriter","odf","ods","odt","pdf","python","pyuno","reader","translation","uno","writer","xlsx"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/turulomio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-09-16T15:59:39.000Z","updated_at":"2024-12-25T15:52:48.000Z","dependencies_parsed_at":"2023-11-29T19:31:11.484Z","dependency_job_id":"14359d24-3836-424a-b793-b4ec963be4f3","html_url":"https://github.com/turulomio/unogenerator","commit_stats":{"total_commits":241,"total_committers":2,"mean_commits":120.5,"dds":"0.049792531120331995","last_synced_commit":"846bf5f8fb165b40b2af087a263105020997c1f4"},"previous_names":[],"tags_count":42,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/turulomio%2Funogenerator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/turulomio%2Funogenerator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/turulomio%2Funogenerator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/turulomio%2Funogenerator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/turulomio","download_url":"https://codeload.github.com/turulomio/unogenerator/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":231596223,"owners_count":18397866,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docx","libreoffice","libreoffice-api","libreoffice-calc","libreoffice-writer","linux","localc","lowriter","odf","ods","odt","pdf","python","pyuno","reader","translation","uno","writer","xlsx"],"created_at":"2024-12-28T07:21:44.784Z","updated_at":"2026-06-07T06:00:44.919Z","avatar_url":"https://github.com/turulomio.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# UnoGenerator [![PyPI - Downloads](https://img.shields.io/pypi/dm/unogenerator?label=Pypi%20downloads)](https://pypi.org/project/unogenerator/) [![Github - Downloads](https://shields.io/github/downloads/turulomio/unogenerator/total?label=Github%20downloads )](https://github.com/turulomio/unogenerator/) [![Tests](https://github.com/turulomio/unogenerator/actions/workflows/python-app.yml/badge.svg)](https://github.com/turulomio/unogenerator/actions/workflows/python-app.yml)\n\u003cdiv align=\"center\"\u003e\n  \u003cdiv style=\"display: flex; align-items: flex-start;\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/turulomio/unogenerator/main/unogenerator/images/unogenerator.png\" width=\"150\" title=\"Unogenerator logo\"\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n## Description\n\n**UnoGenerator** is a powerful Python module designed to generate LibreOffice documents (ODT and ODS) programmatically with high performance and professional aesthetics.\n\nKey features include:\n- **Professional Defaults**: Automatic text wrapping (`word_wrap=True`) and vertical centering for professional-looking reports out of the box.\n- **High Performance**: Optimized for large datasets. Inserting 10,000 rows with default formatting takes less than 0.3 seconds.\n- **Rich Exports**: Easy export to `.xlsx`, `.docx`, and `.pdf`.\n- **Advanced Helpers**: Flexible totals generation, automatic column width calculation, and complex data block handling.\n- **Multilingual Support**: Built-in support for translations and localized document generation.\n\nIt uses the LibreOffice UNO module, requiring a LibreOffice installation on your system.\n\n## Installation\n\nOnly Linux is supported. See the [installation guide](INSTALL.md) for detailed instructions on main Linux distributions.\n\n## Architecture\n\nUnoGenerator follows a clean, template-based architecture:\n- **ODS/ODT**: Generic base classes for document manipulation.\n- **ODS_Standard / ODT_Standard**: Optimized subclasses that use the built-in professional templates, providing specific styles (like \"Normal\", \"BoldCenter\") and optimized row heights.\n\n## ODT 'Hello World' example\n\nCreate a professional ODT document with just a few lines:\n\n```python\nfrom unogenerator import ODT_Standard\n\nwith ODT_Standard() as doc:\n    doc.addParagraph(\"Hello World\", \"Heading 1\")\n    doc.addParagraph(\"Easy, isn't it\", \"Standard\")\n    doc.save(\"hello_world.odt\")\n    doc.export_docx(\"hello_world.docx\")\n    doc.export_pdf(\"hello_world.pdf\")\n```\n\n## ODS 'Hello World' example\n\nGenerate a styled spreadsheet with automatic wrapping and alignment:\n\n```python\nfrom unogenerator import ODS_Standard\n\nwith ODS_Standard() as doc:\n    # word_wrap and vertical alignment are enabled by default\n    doc.addCellMergedWithStyle(\"A1:E1\", \"Sales Report 2026\", style=\"BoldCenter\")\n    doc.addRowWithStyle(\"A2\", [\"Product\", \"Quantity\", \"Price\", \"Total\"])\n    doc.save(\"sales_report.ods\")\n    doc.export_xlsx(\"sales_report.xlsx\")\n```\n\n## Advanced Features: Totals and Formulas\n\nUnoGenerator provides advanced helpers to generate calculations quickly:\n\n```python\nfrom unogenerator import helpers\n\n# Generates both row and column totals with a custom formula template\nhelpers.cross_totals_from_range(doc, \"B2:D10\", key=\"=SUM({}*1.21)\")\n```\n\n## Unogenerator scripts\n\nThe package includes several useful CLI tools:\n\n### unogenerator_monitor\nMonitors your LibreOffice server instances and their status.\n\n### unogenerator_translation\nTranslate multiple ODT files using standard `.pot` and `.po` files.\n`unogenerator_translation --from_language es --to_language en --input original.odt --output_directory \"translated\"`\n\n### unogenerator_demo\nGenerate comprehensive example files and perform performance benchmarks on your system.\n\n## Documentation\nFull technical [documentation](https://github.com/turulomio/unogenerator/blob/main/doc/unogenerator_documentation_en.odt?raw=true) is available in the `doc` directory, created using UnoGenerator itself.\n\n## Development links\n\n- [LibreOffice code](https://github.com/LibreOffice/core)\n- [LibreOffice API](https://api.libreoffice.org/docs/idl/ref/index.html)\n- [UnoGenerator API (Doxygen)](https://coolnewton.mooo.com/doxygen/unogenerator/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fturulomio%2Funogenerator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fturulomio%2Funogenerator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fturulomio%2Funogenerator/lists"}