diff options
Diffstat (limited to '')
-rw-r--r-- | odk/examples/python/Text/GraphicsInserter.py | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/odk/examples/python/Text/GraphicsInserter.py b/odk/examples/python/Text/GraphicsInserter.py new file mode 100644 index 0000000000..3d09aedd5a --- /dev/null +++ b/odk/examples/python/Text/GraphicsInserter.py @@ -0,0 +1,100 @@ +# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +import argparse +import sys +import traceback +from os.path import isfile, dirname, join + +import officehelper +from com.sun.star.beans import PropertyValue +from com.sun.star.text.TextContentAnchorType import AT_PARAGRAPH + +LOG_FILE = join(dirname(__file__), "log.txt") + + +def insert_graphic(filename): + remote_context = officehelper.bootstrap() + srv_mgr = remote_context.getServiceManager() + desktop = srv_mgr.createInstanceWithContext("com.sun.star.frame.Desktop", remote_context) + + doc_url = "private:factory/swriter" + doc = desktop.loadComponentFromURL(doc_url, "_blank", 0, tuple()) + + log_file = open(LOG_FILE, "w") + + text = doc.getText() + cursor = text.createTextCursor() + + try: + graphic = doc.createInstance("com.sun.star.text.TextGraphicObject") + except: + traceback.print_exc(file=log_file) + return + + log_file.write("inserting graphic\n") + try: + text.insertTextContent(cursor, graphic, True) + except: + print("Could not insert Content") + traceback.print_exc() + return + + log_file.write("adding graphic\n") + try: + graphic_url = f"file://{filename}".replace("\\", "/") + print("insert graphic: %s", graphic_url) + graphic_provider = srv_mgr.createInstanceWithContext( + "com.sun.star.graphic.GraphicProvider", remote_context + ) + loaded_graphic = graphic_provider.queryGraphic( + (PropertyValue(Name="URL", Value=graphic_url),) + ) + + # Setting the graphic url + graphic.setPropertyValue("Graphic", loaded_graphic) + + # Set properties for the inserted graphic + graphic.setPropertyValue("AnchorType", AT_PARAGRAPH) + # Setting the horizontal position + graphic.setPropertyValue("HoriOrientPosition", 5500) + # Setting the vertical position + graphic.setPropertyValue("VertOrientPosition", 4200) + # Setting the width + graphic.setPropertyValue("Width", 4400) + # Setting the height + graphic.setPropertyValue("Height", 4000) + except: + print("Couldn't set property 'GraphicURL'") + traceback.print_exc(file=log_file) + + log_file.close() + + +def is_file(value): + if not isfile(value): + raise argparse.ArgumentTypeError(f"File {value} is not an image file.") + return value + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("image", type=is_file, help="Path to an image file.") + args = parser.parse_args() + try: + insert_graphic(args.image) + except: + traceback.print_exc() + sys.exit(1) + + +if __name__ == "__main__": + main() + +# vim: set shiftwidth=4 softtabstop=4 expandtab: |