[Решено] Basic. как заставить работать PrintReversed в макросе

Автор maksvlad, 24 марта 2016, 10:01

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

maksvlad

Хочу использовать макрос для печати в обратном порядке (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

JohnSUN

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

maksvlad

#2
Цитата: JohnSUN от 24 марта 2016, 10:31
Добро пожаловать на форум!
Слушай, несколько раз перечитал этот фрагмент сверху вниз и, на всякий случай, снизу вверх... Чего-то тут не хватает...
Ну да, в переменную 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" мне мало помогает, чтобы понять как эти все сервисы-интерфейсы-объекты работают между собой


JohnSUN

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

maksvlad

#4
Согласно документации есть еще сервис 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 пока не получилось.

Но как-то же через диалог печати (Файл>Печать...) обратный порядок устанавливается и печатается, вот что абыдно

rami

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

maksvlad

#6
Цитата: rami от 24 марта 2016, 20:09
Но если нужно печатать листы в обратном порядке, можно явно прописать порядок листов:
Pages = "3-1"напечатает от третьего до первого листа
Спасибо за подсказку :)
Похоже так и придется делать.
Хотелось малой кровью, так сказать.
Есть макрос, который реализует печать с двух сторон для принтера, не поддерживающего дуплекс (такая фича была еще в Ворде 2003).
Сначала задает печать всех страниц нечетных в нужном количестве копий, а потом - всех четных.
Все  было просто, пока не возникло желание использовать принтеры ХП.
А у них для разных лотков различается положение стороны для печати.
Перекладывая отпечатанные листы из одного лотка в другой, получаем что копии последних листов оказываются первыми...

maksvlad

#7
В общем, в указанном первом посте коде проблема обходится так:

Pages = oDoc.CurrentController.PageCount & "-1"


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

P.S.
Все-таки интересно, как же оно печатает через диалог... (Ubuntu 14.04)