/* * 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/. */ using System; using com.sun.star.awt; using com.sun.star.beans; using com.sun.star.container; using com.sun.star.drawing; using com.sun.star.frame; using com.sun.star.lang; using com.sun.star.sheet; using com.sun.star.table; using com.sun.star.text; using com.sun.star.uno; XComponentContext xRemoteContext = null; XMultiComponentFactory xRemoteServiceManager = null; try { UseWriter(); UseCalc(); UseDraw(); return 0; } catch (UnoException e) { Console.Error.WriteLine(e.Message); return 1; } void UseWriter() { // Create a new Writer document, and manipulate the text content XComponent xWriterComponent = NewDocComponent("swriter"); XTextDocument xTextDocument = xWriterComponent.query(); XText xText = xTextDocument.getText(); ManipulateText(xText); // Get the internal service factory of the document XMultiServiceFactory xWriterFactory = xTextDocument.query(); // Insert a TextTable, and manipulate the text content of the cell XTextContent xTextContentTable = xWriterFactory.createInstance("com.sun.star.text.TextTable").query(); xText.insertTextContent(xText.getEnd(), xTextContentTable, false); XCellRange xCellRange = xTextContentTable.query(); XCell xCell = xCellRange.getCellByPosition(0, 1); XText xCellText = xCell.query(); ManipulateText(xCellText); ManipulateTable(xCellRange); XShape xWriterShape = xWriterFactory.createInstance("com.sun.star.drawing.RectangleShape").query(); xWriterShape.setSize(new Size(10000, 10000)); XTextContent xTextContentShape = xWriterShape.query(); xText.insertTextContent(xText.getEnd(), xTextContentShape, false); // Wrap the text inside the shape XPropertySet xShapeProps = xWriterShape.query(); xShapeProps.setPropertyValue("TextContourFrame", new Any(true)); XText xShapeText = xWriterShape.query(); ManipulateText(xShapeText); ManipulateShape(xWriterShape); // Create and name a bookmark IQueryInterface bookmark = xWriterFactory.createInstance("com.sun.star.text.Bookmark"); XNamed xNamed = bookmark.query(); xNamed.setName("MyUniqueBookmarkName"); // Insert the bookmark at the end of the document XTextContent xTextContent = bookmark.query(); xText.insertTextContent(xText.getEnd(), xTextContent, false); // Get all bookmarks from the XBookmarksSupplier XBookmarksSupplier xBookmarksSupplier = xWriterComponent.query(); XNameAccess xNamedBookmarks = xBookmarksSupplier.getBookmarks(); XTextContent xFoundBookmark = xNamedBookmarks.getByName("MyUniqueBookmarkName").cast(); XTextRange xFound = xFoundBookmark.getAnchor(); xFound.setString(" The throat mike, glued to her neck, " + "looked as much as possible like an analgesic dermadisk."); // Get all tables from the XTextTablesSupplier XTextTablesSupplier xTablesSupplier = xWriterComponent.query(); XNameAccess xNamedTables = xTablesSupplier.getTextTables(); XIndexAccess xIndexedTables = xNamedTables.query(); // Get the tables XPropertySet xTableProps = null; for (int i = 0; i < xIndexedTables.getCount(); i++) { xTableProps = xIndexedTables.getByIndex(i).cast(); xTableProps.setPropertyValue("BackColor", new Any(0xC8FFB9)); } } void UseCalc() { // Create a new Calc document, and manipulate text in a cell XComponent xCalcComponent = NewDocComponent("scalc"); XSpreadsheetDocument xCalcDocument = xCalcComponent.query(); XSpreadsheetDocument xSpreadsheetDocument = xCalcDocument.query(); XIndexAccess xIndexedSheets = xSpreadsheetDocument.getSheets().query(); XCellRange xSpreadsheetCells = xIndexedSheets.getByIndex(0).cast(); // Get cell A2 from the first sheet XCell xCell = xSpreadsheetCells.getCellByPosition(0, 1); XText xCellText = xCell.query(); XPropertySet xCellProps = xCell.query(); xCellProps.setPropertyValue("IsTextWrapped", new Any(true)); ManipulateText(xCellText); ManipulateTable(xSpreadsheetCells); // Get the internal service factory of the document XMultiServiceFactory xCalcFactory = xCalcDocument.query(); XDrawPageSupplier xDrawPageSupplier = xIndexedSheets.getByIndex(0).cast(); XDrawPage xDrawPage = xDrawPageSupplier.getDrawPage(); // Create and insert a RectangleShape, and manipulate its shape text XShape xCalcShape = xCalcFactory.createInstance("com.sun.star.drawing.RectangleShape").query(); xCalcShape.setSize(new Size(10000, 10000)); xCalcShape.setPosition(new Point(7000, 3000)); xDrawPage.add(xCalcShape); // Wrap the text inside the shape XPropertySet xShapeProps = xCalcShape.query(); xShapeProps.setPropertyValue("TextContourFrame", new Any(true)); XText xShapeText = xCalcShape.query(); ManipulateText(xShapeText); ManipulateShape(xCalcShape); } void UseDraw() { // Create a new Draw document, and insert a rectangle XComponent xDrawComponent = NewDocComponent("sdraw"); XDrawPagesSupplier xDrawPagesSupplier = xDrawComponent.query(); XIndexAccess xIndexedDrawPages = xDrawPagesSupplier.getDrawPages(); XDrawPage xDrawPage = xIndexedDrawPages.getByIndex(0).cast(); // Get the internal service factory of the document XMultiServiceFactory xDrawFactory = xDrawComponent.query(); XShape xDrawShape = xDrawFactory.createInstance("com.sun.star.drawing.RectangleShape").query(); xDrawShape.setSize(new Size(10000, 20000)); xDrawShape.setPosition(new Point(5000, 5000)); xDrawPage.add(xDrawShape); // Wrap the text inside the shape XPropertySet xShapeProps = xDrawShape.query(); xShapeProps.setPropertyValue("TextContourFrame", new Any(true)); XText xShapeText = xDrawShape.query(); ManipulateText(xShapeText); ManipulateShape(xDrawShape); } void ManipulateText(XText xText) { // Set the entire text at once xText.setString("He lay flat on the brown, pine-needled floor of the forest, " + "his chin on his folded arms, and high overhead the wind blew in the tops " + "of the pine trees."); // Create a text cursor for selecting and formatting XTextCursor xTextCursor = xText.createTextCursor(); XPropertySet xCursorProps = xTextCursor.query(); // Use the cursor to select "He lay", and apply bold and italic formatting xTextCursor.gotoStart(false); xTextCursor.goRight(6, true); xCursorProps.setPropertyValue("CharPosture", new Any(FontSlant.ITALIC)); xCursorProps.setPropertyValue("CharWeight", new Any(FontWeight.BOLD)); xTextCursor.gotoEnd(false); xText.insertString(xTextCursor.getStart(), " The mountainside sloped gently where he lay; " + "but below it was steep and he could see the dark of the oiled road " + "winding through the pass. There was a stream alongside the road " + "and far down the pass he saw a mill beside the stream and the falling water " + "of the dam, white in the summer sunlight.", false); xText.insertString(xTextCursor.getStart(), "\n \"Is that the mill?\" he asked.", false); } void ManipulateTable(XCellRange xCellRange) { // Set column titles and a cell value XCell xCell = xCellRange.getCellByPosition(0, 0); XText xCellText = xCell.query(); xCellText.setString("Quotation"); xCell = xCellRange.getCellByPosition(1, 0); xCellText = xCell.query(); xCellText.setString("Year"); xCell = xCellRange.getCellByPosition(1, 1); xCell.setValue(1940); XCellRange xSelectedCells = xCellRange.getCellRangeByName("A1:B1"); XPropertySet xCellProps = xSelectedCells.query(); string backColorPropertyName = null; XPropertySet xTableProps = null; // Format the table headers and borders XServiceInfo xServiceInfo = xCellRange.query(); if (xServiceInfo.supportsService("com.sun.star.sheet.Spreadsheet")) { backColorPropertyName = "CellBackColor"; xSelectedCells = xCellRange.getCellRangeByName("A1:B2"); xTableProps = xSelectedCells.query(); } else if (xServiceInfo.supportsService("com.sun.star.text.TextTable")) { backColorPropertyName = "BackColor"; xTableProps = xCellRange.query(); } // Set cell background color xCellProps.setPropertyValue(backColorPropertyName, new Any(0x99CCFF)); // Set table borders (blue line, width 10) BorderLine theLine = new BorderLine() { Color = 0x000099, OuterLineWidth = 10, }; // Use the above defined line for all borders and enable them TableBorder bord = new TableBorder() { VerticalLine = theLine, HorizontalLine = theLine, LeftLine = theLine, RightLine = theLine, TopLine = theLine, BottomLine = theLine, IsVerticalLineValid = true, IsHorizontalLineValid = true, IsLeftLineValid = true, IsRightLineValid = true, IsTopLineValid = true, IsBottomLineValid = true, }; xTableProps.setPropertyValue("TableBorder", new Any(bord)); bord = xTableProps.getPropertyValue("TableBorder").cast(); Console.WriteLine(bord.TopLine.Color); } void ManipulateShape(XShape xShape) { XPropertySet xShapeProps = xShape.query(); xShapeProps.setPropertyValue("FillColor", new Any(0x99CCFF)); xShapeProps.setPropertyValue("LineColor", new Any(0x000099)); xShapeProps.setPropertyValue("RotateAngle", new Any(3000)); xShapeProps.setPropertyValue("TextLeftDistance", new Any(0)); xShapeProps.setPropertyValue("TextRightDistance", new Any(0)); xShapeProps.setPropertyValue("TextUpperDistance", new Any(0)); xShapeProps.setPropertyValue("TextLowerDistance", new Any(0)); } XComponent NewDocComponent(string docType) { XMultiComponentFactory xRemoteServiceManager = GetRemoteServiceManager(); XComponentLoader xComponentLoader = xRemoteServiceManager .createInstanceWithContext("com.sun.star.frame.Desktop", xRemoteContext) .query(); string loadUrl = $"private:factory/{docType}"; return xComponentLoader.loadComponentFromURL(loadUrl, "_blank", 0, new PropertyValue[0]); } XMultiComponentFactory GetRemoteServiceManager() { if (xRemoteContext == null && xRemoteServiceManager == null) { xRemoteContext = NativeBootstrap.bootstrap(); Console.WriteLine("Connected to a running office ..."); xRemoteServiceManager = xRemoteContext.getServiceManager(); } return xRemoteServiceManager; }