Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

22 Апрель 2021, 23:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: Макрос - Вывод на печать документы без логотипа в шапке страницы[РЕШЕНО]  (Прочитано 9107 раз)
0 Пользователей и 1 Гость смотрят эту тему.
wlad
Участник
**
Offline Offline

Сообщений: 20


« Стартовое сообщение: 17 Февраль 2016, 17:17 »

Здравствуйте!

У меня один вопрос по макросу в Writer.
Может кто знает как реализовать в макросе вывод документа на печать без определенной картинки(логотипа) в шапке страницы. Именно реализация в макрос, это чтобы потом макрос можно было к кнопке привязать.
Клик на кнопку будет выдавать печать без лого,
Клик просто на печать будет выдавать с логотипом.
Заранее Спасибо

P. S.
Отключения шапки страницы не предлагать.
Отключение все картинок при печати не предлагать.

С уважением,
wlad
« Последнее редактирование: 7 Март 2016, 19:31 от wlad » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 17 Февраль 2016, 18:48 »

А нарисовать белый квадратик поверх логотипа - тоже не предлагать?

Имя-то у логотипа есть? Или оно каждый раз разное?
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
wlad
Участник
**
Offline Offline

Сообщений: 20


« Ответ #2: 18 Февраль 2016, 10:02 »

Спасибо за быстрый ответ JohnSUN

Имя картинки конечно есть, стандартное или можно задать в свойствах картинки.
Белый квадратик конечно очень оригинально, но проще будет тогда в свойствах картинки убрать галочку печать.
Я пришел к решению, создать макрос, который убирает в свойствах картинки "печать" и прикрепить к кнопке. Но опыта написания на языке Basic к сожалению нет.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #3: 18 Февраль 2016, 10:11 »

Написать макрос гораздо проще, чем выдумать файл для его тестирования. Предлагаю разделить работу: мы сделаем что попроще (напишем макрос и расскажем куда и как его прикрутить), а ты взвалишь на себя большую часть работы (подготовишь документ, похожий на твой, и прикрепишь его к следующему сообщению)
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 068


iMac, LibreOffice и Apache OpenOffice


« Ответ #4: 18 Февраль 2016, 10:36 »

Я пришел к решению, создать макрос, который убирает в свойствах картинки "печать" и прикрепить к кнопке.
Убрать печать из свойств:
Код:
Sub main
ThisComponent.GraphicObjects.getByName("Изображение1").Print=false
End Sub
Записан

wlad
Участник
**
Offline Offline

Сообщений: 20


« Ответ #5: 18 Февраль 2016, 13:42 »

Убрать печать из свойств:
Код:
Sub main
ThisComponent.GraphicObjects.getByName("Изображение1").Print=false
End Sub

Большое спасибо rami!

Как раз то что искал!

Хорошего дня!
Записан
wlad
Участник
**
Offline Offline

Сообщений: 20


« Ответ #6: 19 Февраль 2016, 17:20 »

Написать макрос гораздо проще, чем выдумать файл для его тестирования. Предлагаю разделить работу: мы сделаем что попроще (напишем макрос и расскажем куда и как его прикрутить), а ты взвалишь на себя большую часть работы (подготовишь документ, похожий на твой, и прикрепишь его к следующему сообщению)

Выкладываю файл Template.odt, созданный для тестирования, в нем макросы прикрепленные к кнопкам.
withLogo печать с логотипом и withoutLogo соответственно печать без логотипа, кнопки находятся на панели инструментов.
При нажатии кнопок отключается или включается свойство логотипа "Печать", в зависимости от выбранной кнопки, и включается диалог печати для выбора принтера.

Может кому-нибудь пригодится.
Если у кого-нибудь есть более изящнее решение, буду рад услышать предложение! Всё хорошо

С уважением
wlad


* Buttons.jpg (4.45 Кб, 173x34 - просмотрено 19 раз.)
* Template.odt (775.27 Кб - загружено 16 раз.)
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 068


iMac, LibreOffice и Apache OpenOffice


« Ответ #7: 19 Февраль 2016, 17:36 »

Если у кого-нибудь есть более изящнее решение, буду рад услышать предложение!
Хорошо сделано, вряд ли можно улучшить.
Записан

wlad
Участник
**
Offline Offline

Сообщений: 20


« Ответ #8: 22 Февраль 2016, 16:17 »

Привет всем!

У меня возник еще один вопрос на аналогичную тему, только по другому обьекту.
Хочу тоже самое осуществить только теперь с полосой в документе, то есть shape.
Не могу подобраться к ней, к сожалению нехватает знаний по OOO Basic.
Вот что смог найти, но непойму как применить в макросе.
https://www.openoffice.org/api/docs/common/ref/com/sun/star/drawing/GraphicObjectShape.html

Пример тестого документа прикрепляю к сообщению.
Заранее спасибо!

С уважением!
wlad 

* test.odt (12.09 Кб - загружено 13 раз.)
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #9: 22 Февраль 2016, 16:40 »

Как насчет ThisComponent.getDrawPage().getByIndex(<какой-то там номер>)?
В файле-образце три таких Shape - как их отличать друг от друга, если у них нет имён, отдельный вопрос.
Может быть, брать .getPosition() и смотреть какие там X и Y?

(Зачем в Drucken грузить всю библиотеку Tools? В том DispatchSlot всего-то пять строк кода - с тем же успехом можно просто вызвать .uno:Print)
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 068


iMac, LibreOffice и Apache OpenOffice


« Ответ #10: 22 Февраль 2016, 16:59 »

В файле-образце три таких Shape - как их отличать друг от друга, если у них нет имён, отдельный вопрос.
Первый объект — линия, второй по имени "Shape" — тот что нужен, а третий — врезка. Нужно перебрать сравнивая по имени.
Записан

rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 068


iMac, LibreOffice и Apache OpenOffice


« Ответ #11: 22 Февраль 2016, 17:31 »

Отключить печать для графического объекта по имени "Shape"
Код:
Sub EnumShape
Dim vEnum, oShape
vEnum = thisComponent.getDrawPage().createEnumeration()
Do While vEnum.hasMoreElements()
   oShape = vEnum.nextElement()
      If oShape.Name="Shape" Then oShape.Printable=false
Loop
End Sub
Записан

wlad
Участник
**
Offline Offline

Сообщений: 20


« Ответ #12: 22 Февраль 2016, 18:18 »

Спасибо за быстрые ответы JohnSUN и rami!

rami взял ваш код, работает идеально!

В итоге получилось так с учетом замечаний от JohnSUN:
печать c logo i shape:
Код:
Sub withLogos

Dim vEnum, oShape
vEnum = thisComponent.getDrawPage().createEnumeration()
Do While vEnum.hasMoreElements()
   oShape = vEnum.nextElement()
      If oShape.Name="Shape" Then oShape.Printable=true
Loop
ThisComponent.GraphicObjects.getByName("Grafik").Print=true
 createUnoService("com.sun.star.frame.DispatchHelper").executeDispatch(ThisComponent.CurrentController.Frame, ".uno:Print", "", 0, Array()) 
End Sub

печать без logo i shape:
Код:
Sub withoutLogos

Dim vEnum, oShape
vEnum = thisComponent.getDrawPage().createEnumeration()
Do While vEnum.hasMoreElements()
   oShape = vEnum.nextElement()
      If oShape.Name="Shape" Then oShape.Printable=false
Loop
ThisComponent.GraphicObjects.getByName("Grafik").Print=false
 createUnoService("com.sun.star.frame.DispatchHelper").executeDispatch(ThisComponent.CurrentController.Frame, ".uno:Print", "", 0, Array()) 
End Sub

Файл примера прикрепляю к сообщению

* test2.odt (774.74 Кб - загружено 9 раз.)
Записан
wlad
Участник
**
Offline Offline

Сообщений: 20


« Ответ #13: 22 Февраль 2016, 18:24 »

Походу на этом форуме я на постоянно  Улыбка.

У меня короткий вопрос.

Как можно сделать чтобы после выполнения кода:
Код:
Sub withoutLogos

Dim vEnum, oShape
vEnum = thisComponent.getDrawPage().createEnumeration()
Do While vEnum.hasMoreElements()
   oShape = vEnum.nextElement()
      If oShape.Name="Shape" Then oShape.Printable=false
Loop
ThisComponent.GraphicObjects.getByName("Grafik").Print=false
 createUnoService("com.sun.star.frame.DispatchHelper").executeDispatch(ThisComponent.CurrentController.Frame, ".uno:Print", "", 0, Array()) 
End Sub

Printable i Print возвращались на значение true.
Тогда можно было бы  обойтись одной кнопкой и одним макросом!
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 068


iMac, LibreOffice и Apache OpenOffice


« Ответ #14: 22 Февраль 2016, 18:43 »

Как можно сделать чтобы после выполнения кода:
Код:
Sub withoutLogos

Dim vEnum, oShape
vEnum = thisComponent.getDrawPage().createEnumeration()
Do While vEnum.hasMoreElements()
   oShape = vEnum.nextElement()
      If oShape.Name="Shape" Then oShape.Printable=false
Loop
ThisComponent.GraphicObjects.getByName("Grafik").Print=false
 createUnoService("com.sun.star.frame.DispatchHelper").executeDispatch(ThisComponent.CurrentController.Frame, ".uno:Print", "", 0, Array()) 
End Sub

Printable i Print возвращались на значение true.
Тогда можно было бы  обойтись одной кнопкой и одним макросом!
В таком случае не после кода, а после печати, но до завершения макроса — перед окончанием макроса записать:
Код:
............
'после печати
oShape.Printable=true
ThisComponent.GraphicObjects.getByName("Grafik").Print=true
End Sub
Записан

Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!