Печать документа

Автор Борис_С, 14.11.18, 11:20:32

« предыдущая - следующая »

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

Борис_С

Всем доброго дня!
Хочу напечатать документ. В справке нашел функцию
int ksPrintKompasDocument(const char * fileName,
const char * toFile,
double scale);
Второй параметр этой функции = NULL, если нужно печатать сразу на принтер.
Задал ему значение NULL.
Получил сообщение
Could not convert variant of Type (NULL) into type (OleStr).
И кстати, в папке примеров нет ни одного, как работать с функцией ksPrintKompasDocument.


Sabahs

Передать пустую строку не пробовали?

Борис_С

Спасибо. Это работает.

Борис_С

Мне нужно перед выводом документа на печать установить параметры печати:
ориентацию страницы, размер листа, диапазон листов, подгонка масштаба листов, цвет вывода, отсутствие внешней рамки
Как это можно сделать?

Sabahs

В справке есть целый раздел.

Борис_С

Если я правильно понял, для обращения к свойствам и методам интерфейса IPrintJob_PrinterSettings
нужно вызвать процедуру GetNewKompasAPI

procedure GetNewKompasAPI;
var
  disp : IDispatch;
begin
   if appl7 = nil then
  begin
    disp := IDispatch(CreateKompasApplication);
    appl7 := disp As IApplication;
  end;
end;

Процедура инициализирует интерфейс IApplication.
Я собрал задачу с этой процедурой, но при ее запуске получил сообщение
Запуск программы невозможен, т.к. на компьютере отсутствует kAPI7.dll


Борис_С

Спасибо. Все получилось. Использовал интерфейс IPrintJob и задание на печать.

Борис_С

Все работает, но как-то кривовато. Мне хотелось бы вызвать форму Печать документа, а не Предварительный просмотр,
установить свойства Подгонка масштаба листов/Вписать лист в страницу, Фильтры  вывода/элементы листа/Без внешней рамки.
Сейчас я все это реализовал, использовав механизм Задание на печать.  Можно ли это сделать, не используя Задание на печать?

Борис_С

Проблема все равно осталась. Когда печать идет из одного файла, можно воспользоваться воспользоваться файлом
Задание на печать, но мне нужно печатать разные файлы.

Попробовал использовать интерфейс IPrintJob_PrinterSettings, но он не меняет ни размер бумаги, ни ориентацию страницы,
когда я захожу напрямую в Печать из меню Файл / Печать

print := kompas7.PrintJob;
if print <> nil then
begin
     printSettings := print As IPrintJob_PrinterSettings;
     if Not printSettings.InitPrinterSettings(NamePrinter, False, 0, 841, 594, DMBIN_AUTO) then
       Application.MessageBox('Ошибка настройки параметров принтера.', 'ERROR', MB_OK OR MB_ICONERROR);
end;