odk/Package_examples.mk | 4 + odk/examples/cpp/lokconvert/Makefile | 75 +++++++++++++++++++++++++++++ odk/examples/cpp/lokconvert/lokconvert.cxx | 46 +++++++++++++++++ odk/examples/cpp/lokconvert/test.odt |binary 4 files changed, 125 insertions(+)
New commits: commit f635bf0b78fe77b4febb608361fe53d44665ba11 Author: Hossein <hoss...@libreoffice.org> AuthorDate: Thu Jul 4 15:17:26 2024 +0200 Commit: Christian Lohmaier <lohmaier+libreoff...@googlemail.com> CommitDate: Wed Jul 24 13:01:41 2024 +0200 Add lokconvert odk example This exmaple converts a file to PDF using LibreOfficeKit library. Change-Id: Idc4afafc9541986617f0cc4d46cd89e25ae12051 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169998 Tested-by: Jenkins Reviewed-by: Hossein <hoss...@libreoffice.org> (cherry picked from commit abf2f24e5b58608bc6526a2703ef68c66ab1df0f) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170880 Reviewed-by: Christian Lohmaier <lohmaier+libreoff...@googlemail.com> diff --git a/odk/Package_examples.mk b/odk/Package_examples.mk index 5588b74d7ea0..28d60b329016 100644 --- a/odk/Package_examples.mk +++ b/odk/Package_examples.mk @@ -427,6 +427,10 @@ $(eval $(call gb_Package_add_files_with_dir,odk_examples,$(SDKDIRNAME)/examples, basic/text/modifying_text_automatically/using_regular_expressions.odt \ cpp/Convertor/Convertor.cxx \ cpp/Convertor/Makefile \ + cpp/Convertor/test.odt \ + cpp/lokconvert/lokconvert.cxx \ + cpp/lokconvert/Makefile \ + cpp/lokconvert/test.odt \ cpp/Draw/Draw.cxx \ cpp/Draw/Makefile \ cpp/DocumentLoader/DocumentLoader.cxx \ diff --git a/odk/examples/cpp/lokconvert/Makefile b/odk/examples/cpp/lokconvert/Makefile new file mode 100644 index 000000000000..fa72a5256ebf --- /dev/null +++ b/odk/examples/cpp/lokconvert/Makefile @@ -0,0 +1,75 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*- +# +# 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/. +# + +# Builds the C++ lokconvert example of the SDK. + +PRJ=../../.. +SETTINGS=$(PRJ)/settings + +include $(SETTINGS)/settings.mk +include $(SETTINGS)/std.mk + +# Define non-platform/compiler specific settings +COMPONENT_NAME=lokconvert + +OUT_COMP_INC = $(OUT_INC)/$(COMPONENT_NAME) +OUT_COMP_GEN = $(OUT_MISC)/$(COMPONENT_NAME) +OUT_COMP_OBJ=$(OUT_OBJ)/$(COMPONENT_NAME) + +CXXFILES = lokconvert.cxx + +OBJFILES = $(patsubst %.cxx,$(OUT_SLO_COMP)/%.$(OBJ_EXT),$(CXXFILES)) + +# Targets +.PHONY: ALL +ALL : \ + CpplokconvertExample + +include $(SETTINGS)/stdtarget.mk + +$(OUT_COMP_OBJ)/%.$(OBJ_EXT) : %.cxx $(SDKTYPEFLAG) + -$(MKDIR) $(subst /,$(PS),$(@D)) + $(CC) $(CC_FLAGS) $(CC_INCLUDES) -I$(OUT_COMP_INC) $(CC_DEFINES) $(CC_OUTPUT_SWITCH)$(subst /,$(PS),$@) $< + +$(OUT_BIN)/lokconvert$(EXE_EXT) : $(OUT_COMP_OBJ)/lokconvert.$(OBJ_EXT) + -$(MKDIR) $(subst /,$(PS),$(@D)) + -$(MKDIR) $(subst /,$(PS),$(OUT_COMP_GEN)) +ifeq "$(OS)" "WIN" + $(LINK) $(EXE_LINK_FLAGS) /OUT:$@ /MAP:$(OUT_COMP_GEN)/$(basename $(@F)).map \ + $< $(CPPUHELPERLIB) $(CPPULIB) $(SALHELPERLIB) $(SALLIB) +else + $(LINK) $(EXE_LINK_FLAGS) $(LINK_LIBS) -o $@ $< \ + $(CPPUHELPERLIB) $(CPPULIB) $(SALHELPERLIB) $(SALLIB) $(STDC++LIB) +ifeq "$(OS)" "MACOSX" + $(INSTALL_NAME_URELIBS_BIN) $@ +endif +endif + +CpplokconvertExample : $(OUT_BIN)/lokconvert$(EXE_EXT) + @echo -------------------------------------------------------------------------------- + @echo The example loads the "$(QM)test.odt$(QM)" document in the lokconvert example directory + @echo and convert it to PDF + @echo - + @echo Use the following command to execute the example! + @echo - + @echo $(MAKE) lokconvert.run + @echo - + @echo -------------------------------------------------------------------------------- + +%.run: $(OUT_BIN)/lokconvert$(EXE_EXT) + cd $(subst /,$(PS),$(OUT_BIN)) && $(basename $@) $(subst \,/,$(subst /,$(PS),"$(OO_SDK_HOME)/examples/cpp/lokconvert/test.odt" "$(PWD)/test.pdf")) + +.PHONY: clean +clean : + -$(DELRECURSIVE) $(subst /,$(PS),$(OUT_COMP_INC)) + -$(DELRECURSIVE) $(subst /,$(PS),$(OUT_COMP_GEN)) + -$(DELRECURSIVE) $(subst /,$(PS),$(OUT_COMP_OBJ)) + -$(DEL) $(subst \,\,$(subst /,$(PS),$(OUT_BIN)/lokconvert*)) + +# vim: set noet sw=4 ts=4: diff --git a/odk/examples/cpp/lokconvert/lokconvert.cxx b/odk/examples/cpp/lokconvert/lokconvert.cxx new file mode 100644 index 000000000000..123d1190e040 --- /dev/null +++ b/odk/examples/cpp/lokconvert/lokconvert.cxx @@ -0,0 +1,46 @@ +#include <iostream> +#include "LibreOfficeKit/LibreOfficeKit.hxx" + +int main(int argc, char* argv[]) +{ + if (argc < 3) + { + std::cout << "Usage: lokconvert <input_file_path> <output_file_path> "; + return 1; + } + const char* input = argv[1]; + const char* output = argv[2]; + + lok::Office* llo = NULL; + try + { + const char* lo_bin_dir = std::getenv("OO_SDK_URE_BIN_DIR"); + llo = lok::lok_cpp_init(lo_bin_dir); + if (!llo) + { + std::cerr << "Error: could not initialise LibreOfficeKit "; + return 1; + } + + lok::Document* lodoc = llo->documentLoad(input, NULL /* options */); + if (!lodoc) + { + std::cerr << "Error: could not load document: " << llo->getError() << " "; + return 1; + } + + if (!lodoc->saveAs(output, "pdf", NULL /* options */)) + { + std::cerr << "Error: could not export document: " << llo->getError() << " "; + return 1; + } + } + catch (const std::exception& e) + { + std::cerr << "Error: LibreOfficeKit exception: " << e.what() << " "; + return 1; + } + + std::cerr << "Success! "; + return 0; +} diff --git a/odk/examples/cpp/lokconvert/test.odt b/odk/examples/cpp/lokconvert/test.odt new file mode 100644 index 000000000000..dc4efecac071 Binary files /dev/null and b/odk/examples/cpp/lokconvert/test.odt differ