Добавление разрыва страницы во Writer

Автор zhukovia, 4 декабря 2019, 16:11

0 Пользователи и 1 гость просматривают эту тему.

mikekaganski

Цитата: zhukovia от  5 декабря 2019, 10:13
Подскажите еще по последнему вопросу. Как вставить картинку в текст? Хотя бы команда как называется.

Создаёте объект XGraphic. Для этого нужно использовать сервис "GraphicProvider".
Затем используете метод XText.insertTextContent.
xProvider = ServiceManager.createInstance("com.sun.star.graphic.GraphicProvider")

Prop = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Prop.Name = "URL";
Prop.Value = imgurl;
Args = Новый COMSafeArray("VT_VARIANT", 1);
Args.SetValue(0, Prop);

TextPointer.insertTextContent(CursorPointer, xProvider.queryGraphic(Args), false)
С уважением,
Михаил Каганский

zhukovia

#16
Цитата: mikekaganski от  5 декабря 2019, 10:46Создаёте объект XGraphic. Для этого нужно использовать сервис "GraphicProvider".
Затем используете метод XText.insertTextContent.
Сделал немного по другому (нашел на просторах интернета)
oBitmaps = Document.createInstance( "com.sun.star.drawing.BitmapTable" );

If Not oBitmaps.hasByName(ИмяФайла) Then
oBitmaps.insertByName(ИмяФайла, ПутьКФайлуКартинки)
EndIf;
LoadGraphicIntoDocument = oBitmaps.getByName(ИмяФайла);
oImage = Document.createInstance("com.sun.star.text.GraphicObject");
oImage.GraphicURL = LoadGraphicIntoDocument;
//oImage.AnchorType = "com.sun.star.text.TextContentAnchorType.AS_CHARACTER";
//oImage.Width = 4000
//oImage.Height = 3000
//Вставляем этот графический объект в ячейку таблицы
//oTextTable = Document.getTextTables().getByIndex(0);
//oCellByName = oTextTable.getCellByName("B2");
//oText = oCellByName.getText()
TextPointer.insertTextContent( CursorPointer, oImage, False );

Такой метод хуже?
Картинка вставилась но маленькая, надо наверное параметры высоты и ширины вставить. А нельзя чтобы автоматически по ширине страницы вставлялось или хотя бы пропорционально чтобы расширялось? Т.е. указать ширину, а высота автоматом. И обтекание как убрать? Чтобы снизу текст был, а не сбоку.
//oImage.AnchorType = "com.sun.star.text.TextContentAnchorType.AS_CHARACTER";
На эту строку почему то ругается, а как я понимаю она и дает обтекание.

mikekaganski

#17
Цитата: zhukovia от  5 декабря 2019, 11:07
//oImage.AnchorType = "com.sun.star.text.TextContentAnchorType.AS_CHARACTER";
На эту строку почему то ругается, а как я понимаю она и дает обтекание.

Уже было: "com.sun.star.text.TextContentAnchorType.AS_CHARACTER" - это не строка, а числовой идентификатор. Поищите в предыдущих ответах подобное замечание и ссылку на код с константами, среди которых поищите AS_CHARACTER.

Цитата: zhukovia от  5 декабря 2019, 11:07
Такой метод хуже?

Да, потому что используются устаревшие и нерекомендованные свойства - в частности, GraphicURL.
С уважением,
Михаил Каганский

bigor

Цитата: zhukovia от  5 декабря 2019, 11:07//oImage.AnchorType = "com.sun.star.text.TextContentAnchorType.AS_CHARACTER";

На эту строку почему то ругается, а как я понимаю она и дает обтекание.
Это привязка картинки. Якорь
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

zhukovia

#19
Цитата: mikekaganski от  5 декабря 2019, 10:46Создаёте объект XGraphic. Для этого нужно использовать сервис "GraphicProvider".
Затем используете метод XText.insertTextContent.
Пытаюсь сделать как вы подсказали но вылазит ошибка. Пишет что типы не совпадают. Как я понимаю вот здесь xProvider.queryGraphic(Args).
Что может быть не так?
И ссылку давать на файл на диске или на "вшитый" файл?

zhukovia

Цитата: Bigor от  5 декабря 2019, 11:19Это привязка картинки. Якорь
Спасибо уже разобрался. Нужно было просто писать oImage.AnchorType = 1;. Спасибо mikekaganski за подсказку.

mikekaganski

xProvider = ServiceManager.createInstance("com.sun.star.graphic.GraphicProvider");

Prop = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Prop.Name = "URL";
Prop.Value = ПутьКФайлуКартинки;
Args = Новый COMSafeArray("VT_VARIANT", 1);
Args.SetValue(0, Prop);

oImage = xProvider.queryGraphic(Args);
oImage.AnchorType = 1;
//oImage.Width = 4000
//oImage.Height = 3000
//Вставляем этот графический объект в ячейку таблицы
//oTextTable = Document.getTextTables().getByIndex(0);
//oCellByName = oTextTable.getCellByName("B2");
//oText = oCellByName.getText()
TextPointer.insertTextContent( CursorPointer, oImage, False );


Вопрос: "ПутьКФайлуКартинки" - это что? дайте пример строки.

Цитата: zhukovia от  5 декабря 2019, 11:34И ссылку давать на файл на диске или на "вшитый" файл?
Вшитый во что?
С уважением,
Михаил Каганский

zhukovia

Цитата: zhukovia от  5 декабря 2019, 11:07TextPointer.insertTextContent( CursorPointer, oImage, False );
Я посмотрел у метода insertTextContent тип второго элемента должен быть xContent, а у объекта xProvider тип GraphicProvider. Или я неправильно понимаю?

mikekaganski

Цитата: zhukovia от  5 декабря 2019, 11:44
Цитата: zhukovia от  5 декабря 2019, 11:07TextPointer.insertTextContent( CursorPointer, oImage, False );
Я посмотрел у метода insertTextContent тип второго элемента должен быть xContent, а у объекта xProvider тип GraphicProvider. Или я неправильно понимаю?

А причём тут тип объекта xProvider? Вы разве xProvider передаёте? не результат выполнения его метода queryGraphic?
С уважением,
Михаил Каганский

economist

zhukovia - парсинг, точнее скрапбукинг сайтов - это поле игры для библиотек Python. Перебрать все ссылки книги и сохранить каждую страничку в PDF (печать на PrimoPDF/doPDF итп виртуальный принтер), а затем соединить все в один файл - это 8-10 строк кода. На сайтах посвященных e-pub/fb2 наверняка можно найти готовый скрипт.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

zhukovia

Цитата: mikekaganski от  5 декабря 2019, 11:43Вопрос: "ПутьКФайлуКартинки" - это что? дайте пример строки.
Это путь к файлу на диске. Вот например file://localhost/c:/temp/ronobe/re_zerro/yuzouni3small1.png

Цитата: zhukovia от  5 декабря 2019, 11:44Вшитый во что?
Как я понимаю вшитый в ODT документ
Bitmaps = Document.createInstance( "com.sun.star.drawing.BitmapTable" );
If Not oBitmaps.hasByName(ИмяФайла) Then
oBitmaps.insertByName(ИмяФайла, ПутьКФайлуКартинки)
EndIf;
LoadGraphicIntoDocument = oBitmaps.getByName(ИмяФайла);

LoadGraphicIntoDocument - это "внутренний" URL картинки

zhukovia

Цитата: mikekaganski от  5 декабря 2019, 10:46Создаёте объект XGraphic. Для этого нужно использовать сервис "GraphicProvider".
Затем используете метод XText.insertTextContent.
Цитата: mikekaganski от  5 декабря 2019, 10:46TextPointer.insertTextContent(CursorPointer, xProvider.queryGraphic(Args), false)
Я просто сделал как вы написали.

zhukovia

Цитата: economist от  5 декабря 2019, 11:48
парсинг, точнее скрапбукинг сайтов - это поле игры для библиотек Python.
Я это понимаю, что можно и проще. Я же написал взял что первое подвернулось под руку (и то что лучше знаю). Заодно и решил разобраться как это работает, должно пригодится.

mikekaganski

Цитата: zhukovia от  5 декабря 2019, 11:49
Цитата: zhukovia от  5 декабря 2019, 11:44Вшитый во что?
Как я понимаю вшитый в ODT документ
Bitmaps = Document.createInstance( "com.sun.star.drawing.BitmapTable" );
If Not oBitmaps.hasByName(ИмяФайла) Then
oBitmaps.insertByName(ИмяФайла, ПутьКФайлуКартинки)
EndIf;
LoadGraphicIntoDocument = oBitmaps.getByName(ИмяФайла);

LoadGraphicIntoDocument - это "внутренний" URL картинки

От BitmapTable Вы получаете URL. Для GraphicProvider неважно, какой это URL - главное, чтобы он был корректный. Так что код для получения URL можно пропускать через BitmapTable, чтобы получать адреса встроенных изображений. Если не получается, дайте конкретный вариант кода, с адресом, чтобы попробовать.
С уважением,
Михаил Каганский

mikekaganski

Цитата: zhukovia от  5 декабря 2019, 11:51
Цитата: mikekaganski от  5 декабря 2019, 10:46Создаёте объект XGraphic. Для этого нужно использовать сервис "GraphicProvider".
Затем используете метод XText.insertTextContent.
Цитата: mikekaganski от  5 декабря 2019, 10:46TextPointer.insertTextContent(CursorPointer, xProvider.queryGraphic(Args), false)
Я просто сделал как вы написали.

Это был ответ на что?
С уважением,
Михаил Каганский