lazarus + openoffice

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Аватара пользователя
Astralis
новенький
Сообщения: 45
Зарегистрирован: 06.06.2007 20:33:05
Откуда: Tvercity-Annet
Контактная информация:

Сообщение Astralis »

в документации за распечатку отдельных страниц отвечает параметр Pages
Pages (String) – содержат список страниц, которые будут напечатаны (синтаксис как определено в диалоге печати).
sant
новенький
Сообщения: 23
Зарегистрирован: 23.11.2009 20:52:42

Сообщение sant »

Может через диспетчера попытаться, ввиду того, что Pages тоже не работает.
Аватара пользователя
Astralis
новенький
Сообщения: 45
Зарегистрирован: 06.06.2007 20:33:05
Откуда: Tvercity-Annet
Контактная информация:

Сообщение Astralis »

А может все из-за того что вы используете Copies вместо CopyCount?
http://api.openoffice.org/docs/common/r ... tions.html
sant
новенький
Сообщения: 23
Зарегистрирован: 23.11.2009 20:52:42

Сообщение sant »

Код: Выделить всё

  PrintPar1 := VarArrayCreate([0, 2], varVariant);
  PrintPar1[0]:= MakePropertyValue('"Copies"','1');
  PrintPar1[1]:= MakePropertyValue('"RangeText"','"2"');
  PrintPar1[2]:= MakePropertyValue('"Collate"','true');

    Frame:= Document.getCurrentController.getFrame;
    Dispatcher:= Server.createInstance('com.sun.star.frame.DispatchHelper');
    Dispatcher.executeDispatch(Frame,'.uno:Print', '', 0, PrintPar1);


Так тоже отчего-то не работает!
Openoffice - 3.1.0, XP SP3
Lazarus 9.28 beta (2.2.4)

Добавлено спустя 2 минуты 15 секунд:
Если же написать так, тоже не работает. Единственное вызавается диалог печати, но в него параметры не передаются!

Код: Выделить всё

  PrintPar1 := VarArrayCreate([0, 0], varVariant);
  PrintPar1[0]:= MakePropertyValue('RangeText','2');

    Frame:= Document.getCurrentController.getFrame;
    Dispatcher:= Server.createInstance('com.sun.star.frame.DispatchHelper');
    Dispatcher.executeDispatch(Frame,'.uno:Print', '', 0, PrintPar1);


Добавлено спустя 15 часов 50 минут 53 секунды:
:!: Помогите пожалуйста :!:
sant
новенький
Сообщения: 23
Зарегистрирован: 23.11.2009 20:52:42

Сообщение sant »

А у кого-нибудь работает печать из Openoffice под управлением Lazarus.

Напишите рабочий вариант кода! :!:
sant
новенький
Сообщения: 23
Зарегистрирован: 23.11.2009 20:52:42

Сообщение sant »

Рискну предположить - неправильно (не та кодировка) передачи параметров в OpenOffice Writer/
xcod
постоялец
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Сообщение xcod »

sant писал(а):Если же написать так, тоже не работает. Единственное вызавается диалог печати, но в него параметры не передаются!

Код: Выделить всё

  PrintPar1 := VarArrayCreate([0, 0], varVariant);
  PrintPar1[0]:= MakePropertyValue('RangeText','2');

    Frame:= Document.getCurrentController.getFrame;
    Dispatcher:= Server.createInstance('com.sun.star.frame.DispatchHelper');
    Dispatcher.executeDispatch(Frame,'.uno:Print', '', 0, PrintPar1);



чтобы не выдавался диалог печати сделайте так:

Код: Выделить всё

Dispatcher.executeDispatch(Frame,'.uno:PrintDefault', '', 0, PrintPar1); 

будет сразу идти печатать на принтер используемый по умолчанию в системе
sant
новенький
Сообщения: 23
Зарегистрирован: 23.11.2009 20:52:42

Сообщение sant »

Код: Выделить всё

Dispatcher.executeDispatch(Frame,'.uno:PrintDefault', '', 0, PrintPar1); 


Сразу печатает, но параметры для печати почему-то не воспринимаются!
Неужели никто не выводит на печать определенные листы из документа, поделитесь...
xcod
постоялец
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Сообщение xcod »

по моему в параметрах должно быть вот так вот:

Код: Выделить всё

PrintPar[1]:=MakePropertyValue('CopyCount', 1);
sant
новенький
Сообщения: 23
Зарегистрирован: 23.11.2009 20:52:42

Сообщение sant »

Если

Код: Выделить всё

function MakePropertyValue(PropertyName, PropertyValue: variant):variant;
var
 Structure: variant;
begin
 Structure:= Server.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
 Structure.Name:= PropertyName;
 Structure.Value:= PropertyValue;
 Result:= Structure;
end;

Тогда, можно

Код: Выделить всё

 Frame:= Document.getCurrentController.getFrame;
 Dispatcher:= Server.createInstance('com.sun.star.frame.DispatchHelper');

 PrintPar1 := VarArrayCreate([0, 0], varVariant);
 PrintPar1[0]:= MakePropertyValue('RangeTex', 2);
 Dispatcher.executeDispatch(Frame, '.uno:Print', '', 0, PrintPar1);

Все-равно не работает!
xcod
постоялец
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Сообщение xcod »

попробуйте печать не через диспетчер:

Код: Выделить всё

PrintPar := VarArrayCreate([0, 0], varVariant);
PrintPar[0]:= MakePropertyValue('CopyCount', 1);
Document.Print(PrintPar);


Добавлено спустя 16 часов 18 минут 3 секунды:
Свойство CopyCount определяет кол-во копий документа

Код: Выделить всё

PrintPar[0]:=MakePropertyValue('CopyCount', 1);

а свойство Pages определяет страницы для печати

Код: Выделить всё

PrintPar[1]:=MakePropertyValue('Pages', '1-3,10-15,25'); // страницы разделяются "," или ";" точно не помню проверьте сами
sant
новенький
Сообщения: 23
Зарегистрирован: 23.11.2009 20:52:42

Сообщение sant »

Все крылось в функцие формирования параметров:

Код: Выделить всё

function MakePropertyValue(PropertyName, PropertyValue: variant):variant;

Код: Выделить всё

PrintPar := VarArrayCreate([0, 1], varVariant);
 PrintPar[0]:= MakePropertyValue('Pages', '2,3,4');
 PrintPar[1]:= MakePropertyValue('CopyCount',i);
 Document.Print(PrintPar);

Все работает!
Ответить