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

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

26 Октябрь 2020, 13:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: [Решено] Basic. как заставить работать PrintReversed в макросе  (Прочитано 3334 раз)
0 Пользователей и 1 Гость смотрят эту тему.
maksvlad
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Иркутск
Сообщений: 158


« Стартовое сообщение: 24 Март 2016, 10:01 »

Хочу использовать макрос для печати в обратном порядке (PrintReversed)
Код:
Sub PrintRevers
Dim CopyNo As Integer
Dim iDalee As Integer
Dim  oPageCount, oDoc, oDocSettings, dispatcher
Dim Pages As String
oDoc = ThisComponent
rem get access to the document
Pages = "1-" & oDoc.CurrentController.PageCount
oDocSettings = oDoc.createInstance("com.sun.star.text.DocumentSettings")
oDocSettings.PrintLeftPages=true
oDocSettings.PrintRightPages=false
oDocSettings.PrintReversed=true
DIM mPrintOpts(3) AS NEW com.sun.star.beans.PropertyValue
   mPrintOpts(0).Name = "CopyCount"
   mPrintOpts(0).Value = 1
   mPrintOpts(1).Name = "Collate"
   mPrintOpts(1).Value = False
   mPrintOpts(2).Name = "Pages"
   mPrintOpts(2).Value = Pages
   mPrintOpts(3).Name = "Wait"
   mPrintOpts(3).Value = True      
   REM Print
   oDoc.Print(mPrintOpts())
End Sub


Не могу "победить" свойство PrintReversed сервиса com.sun.star.text.DocumentSettings
Присвоенное значение "true" почему-то игнорируется при выполнении макроса, хотя другие свойства (.PrintLeftPages и .PrintRightPages) срабатывают как положено.

Вопрос: как печатать в обратном порядке через макрос

P.S.
Использую LOO 5.1.1 и 5.0.5
« Последнее редактирование: 25 Март 2016, 04:46 от maksvlad » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #1: 24 Март 2016, 10:31 »

Добро пожаловать на форум!
Слушай, несколько раз перечитал этот фрагмент сверху вниз и, на всякий случай, снизу вверх... Чего-то тут не хватает...
Ну да, в переменную oDocSettings ты сохраняешь новый, только что созданный экземпляр oDocSettings. Устанавливаешь ему три свойства. А потом? Где и на что этот oDocSettings должен влиять?
Записан

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

Пол: Мужской
Расположение: Иркутск
Сообщений: 158


« Ответ #2: 24 Март 2016, 12:00 »

Добро пожаловать на форум!
Слушай, несколько раз перечитал этот фрагмент сверху вниз и, на всякий случай, снизу вверх... Чего-то тут не хватает...
Ну да, в переменную oDocSettings ты сохраняешь новый, только что созданный экземпляр oDocSettings. Устанавливаешь ему три свойства. А потом? Где и на что этот oDocSettings должен влиять?
Привет! Спасибо на добром слове Улыбка
А теперь по вопросу:
oDocSettings - это (как было написано в гайде, не могу щас найти) объект созданный сервисом com.sun.star.text.DocumentSettings, который в свою очередь обеспечивает возможность назначить свойства для текущего документа oDoc

Код:

oDoc = ThisComponent
...
oDocSettings = oDoc.createInstance("com.sun.star.text.DocumentSettings")
API по com.sun.star.text.DocumentSettings
Этот же способ доступа к свойствам текстового документа продемонстрирован и у Питоньяка (ст. 350 - 351 его OOМЕ)

Если я правильно понимаю, то PrintReversed, PrintLeftPages, PrintRightPages = это относятся к свойствам документа, который подлежит печати
и задаются они через com.sun.star.text.DocumentSettings
доступ к которому получаем создавая новый экземпляр

P.S.
Не знаю, что курили разработчики UNO, но даже подход "RTFM" мне мало помогает, чтобы понять как эти все сервисы-интерфейсы-объекты работают между собой

« Последнее редактирование: 24 Март 2016, 12:05 от maksvlad » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #3: 24 Март 2016, 12:32 »

М-да, ерунда какая-то... Настоящего принтера под рукой нет, экспериментирую с "Foxit Reader PDF Printer" (возможно, он свои взгляды на жизнь подсовывает, а "железный" принтер не стал бы выпендриваться). Но результат тот же, что и у тебя - значение PrintReversed на порядок страниц не влияет. (проверял и под АОО  4.4.5.2 - без того же результата)
Записан

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

Пол: Мужской
Расположение: Иркутск
Сообщений: 158


« Ответ #4: 24 Март 2016, 13:11 »

Согласно документации есть еще сервис com.sun.star.view.PrintSettings
Цитата:
provides access to the settings for printing documents. These settings are printer independet but affect the rendering of the document.
по свойствам он такой же как и com.sun.star.text.DocumentSettings, но пока задать свойства через com.sun.star.view.PrintSettings пока не получилось.

Но как-то же через диалог печати (Файл>Печать...) обратный порядок устанавливается и печатается, вот что абыдно
« Последнее редактирование: 24 Март 2016, 13:14 от maksvlad » Записан
rami
Гуру
*******
Offline Offline

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


iMac, LibreOffice и Apache OpenOffice


« Ответ #5: 24 Март 2016, 20:09 »

Но как-то же через диалог печати (Файл>Печать...) обратный порядок устанавливается и печатается, вот что абыдно
У меня даже через диалог не печатает Грустный
Но если нужно печатать листы в обратном порядке, можно явно прописать порядок листов:
Код:
Pages = "3-1"
напечатает от третьего до первого листа
Записан

maksvlad
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Иркутск
Сообщений: 158


« Ответ #6: 25 Март 2016, 04:32 »

Но если нужно печатать листы в обратном порядке, можно явно прописать порядок листов:
Код:
Pages = "3-1"
напечатает от третьего до первого листа
Спасибо за подсказку Улыбка
Похоже так и придется делать.
Хотелось малой кровью, так сказать.
Есть макрос, который реализует печать с двух сторон для принтера, не поддерживающего дуплекс (такая фича была еще в Ворде 2003).
Сначала задает печать всех страниц нечетных в нужном количестве копий, а потом - всех четных.
Все  было просто, пока не возникло желание использовать принтеры ХП.
А у них для разных лотков различается положение стороны для печати.
Перекладывая отпечатанные листы из одного лотка в другой, получаем что копии последних листов оказываются первыми...
« Последнее редактирование: 25 Март 2016, 04:39 от maksvlad » Записан
maksvlad
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Иркутск
Сообщений: 158


« Ответ #7: 25 Март 2016, 04:46 »

В общем, в указанном первом посте коде проблема обходится так:
Код:
Pages = oDoc.CurrentController.PageCount & "-1"

Огромное спасибо rami за дельную мысль Улыбка

P.S.
Все-таки интересно, как же оно печатает через диалог... (Ubuntu 14.04)
« Последнее редактирование: 25 Март 2016, 04:48 от maksvlad » Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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