Макрос - Вывод на печать документы без логотипа в шапке страницы[РЕШЕНО]

Автор wlad, 17 февраля 2016, 17:17

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

wlad

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

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

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

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

JohnSUN

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

Имя-то у логотипа есть? Или оно каждый раз разное?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

wlad

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

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

JohnSUN

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

rami

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

wlad

Цитата: rami от 18 февраля 2016, 08:36Убрать печать из свойств:
Код:
Sub main
ThisComponent.GraphicObjects.getByName("Изображение1").Print=false
End Sub

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

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

Хорошего дня!

wlad

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

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

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

С уважением
wlad

rami

Цитата: wlad от 19 февраля 2016, 15:20Если у кого-нибудь есть более изящнее решение, буду рад услышать предложение!
Хорошо сделано, вряд ли можно улучшить.

wlad

Привет всем!

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

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

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

JohnSUN

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

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

rami

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

rami

Отключить печать для графического объекта по имени "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

Спасибо за быстрые ответы 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


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

wlad

Походу на этом форуме я на постоянно  :).

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

Как можно сделать чтобы после выполнения кода:
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

Цитата: wlad от 22 февраля 2016, 16: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.
Тогда можно было бы  обойтись одной кнопкой и одним макросом!
В таком случае не после кода, а после печати, но до завершения макроса — перед окончанием макроса записать:
............
'после печати
oShape.Printable=true
ThisComponent.GraphicObjects.getByName("Grafik").Print=true
End Sub