Руководство разработчика

Установка принтера программы и печать

В системе Windows в списке доступных принтеров присутствуют как аппаратные принтеры, так и виртуальные принтеры. Виртуальный принтер работает по принципу драйвера физического принтера, только виртуальный принтер не управляет работой реального принтера. Документ, отправленный на печать виртуальному принтеру, вместо вывода на бумагу, сохраняется в файл формата, который поддерживается виртуальным принтером. В Windows 10 в качестве стандартного виртуального принтера используется Microsoft Print to PDF.

Платформа позволяет осуществлять печать следующих типов форм: отчетов, бланков, табличных форм. Перед непосредственным процессом печати есть возможность указать, какой принтер будет использовать платформа для печати форм. В качестве принтера платформы можно задать принтер, используемый системой Windows по умолчанию, или другой доступный принтер по имени. Определить имя принтера, используемого по умолчанию системой, можно при помощи функции ПРИНТЕР_ПО_УМОЛЧ. Чтобы получить список всех доступных принтеров в системе Windows, в том числе и сетевых, используется функция СПИСОК_ПРИНТЕРОВ. Функция возвращает массив имен принтеров системы. Если в системе нет доступных принтеров, то стандартная команда печати формы будет недоступна. Узнать имя, используемого программой принтера в данный момент, можно при помощи функции ТЕК_ПРИНТЕР.

Для установки принтера, который используется по умолчанию системой Windows применяется функция УСТ_ПРИНТЕР_ПО_УМОЛЧ. Функция УСТ_ТЕК_ПРИНТЕР позволяет установить в платформе доступный принтер по его имени.

Для программной печати форм используется функция ПЕЧАТЬ. По умолчанию при программной печати используется текущий принтер программы (тот, что используется в данный момент), но имеется возможность указать другой доступный принтер в системе, используя его имя в качестве необязательного параметра функции. Также в качестве параметров используется логическое значение для показа стандартного диалога печати, целое значение для указания числа печатаемых копий и имя выходного файла.

При указании имени выходного файла PDF, XPS и подобные им принтеры создают файл с указанным именем без запроса пользователя. Если имя выходного файла не задано, то такие принтеры будут показывать стандартный диалог сохранения файла. Рекомендуется указывать полный путь к выходному файлу, т.к. платформа не может контролировать расположение создаваемого принтером файла.

Программная печать форм производится только если форма показана на экране, либо из обработчика открытие до показа формы.

Пример

В качестве примера рассматривается показ диалогового окна после открытия отчета. Диалоговое окно предназначено для отображения списка всех доступных принтеров, имени текущего принтера и имени принтера, используемого по умолчанию в системе. Кроме того, при помощи этого диалога можно выбрать текущий принтер для программы из списка доступных или принтер, используемый по умолчанию в системе, для дальнейшей программной печати отчета.

ТИП ОТЧЕТ
[
  ПОДМЕНА после_открытия = {Показ_диалога};
  ФУНКЦИЯ Показ_диалога
    д.ПОКАЗАТЬ
  КОНЕЦ_ФУНКЦИИ
]
ПЕРЕМ Отчет1: отч;

ТИП Диалог_принтеры(ДИАЛОГ)
[
  ПОДМЕНА до_открытия = {До_откр};
  КНОПКА: КнопкаОК = [ ...
                       текст = "ОК",
                       нажатие = {НажатаОК} ];
  КНОПКА: КнопкаОтмена = [ ...
                           текст = "Отмена",
                           нажатие = {НажатаОтмена} ];
  РЕДАКТОР: Редактор1 = [...];
  КНОПКА: Кнопка1 = [ ...
                      текст = "Узнать имя текущего принтера",
                      нажатие = {Узнать_имя_тек_принтера} ];
  КНОПКА: Кнопка2 = [ ...
                      текст = "Установить принтер из списка",
                      нажатие = {Уст_тек_принтер_из_списка} ];
  СПИСОК: Список1 = [ ...
                      элементы = () ];
  ТЕКСТ: Текст2 = [ ...
                    текст = "список всех принтеров" ];
  КНОПКА: Кнопка3 = [ ...
                      текст = "Узнать имя принтера по умолчанию",
                      нажатие = {Принтер_по_умол} ];
  КНОПКА: Кнопка4 = [ ...
                      текст = "Установить принтер по умолчанию",
                      нажатие = {Нажата_уст_по_умол} ];
  КНОПКА: Кнопка5 = [ ...
                      текст = "Печать",
                      нажатие = {Нажата_печать} ];

  ...
  ФУНКЦИЯ Узнать_имя_тек_принтера(ПЕРЕМ КНОПКА: кнопка)
    Редактор1.текст = ТЕК_ПРИНТЕР
    ОБНОВИТЬ
  КОНЕЦ_ФУНКЦИИ

  ФУНКЦИЯ Уст_тек_принтер_из_списка(ПЕРЕМ КНОПКА: кнопка)
    УСТ_ТЕК_ПРИНТЕР(Список1.элементы[Список1.выбор])
  КОНЕЦ_ФУНКЦИИ

  ФУНКЦИЯ ЛОГИКА: До_откр
    РЕЗУЛЬТАТ = ДА
    ПЕРЕМ список = СПИСОК_ПРИНТЕРОВ
    ЦИКЛ ИНДЕКС (эл = список[номер])
      Список1.элементы[номер] = эл
    КОНЕЦ_ЦИКЛА
  КОНЕЦ_ФУНКЦИИ


  ФУНКЦИЯ Принтер_по_умол(ПЕРЕМ КНОПКА: кнопка)
    Редактор1.текст = ПРИНТЕР_ПО_УМОЛЧ
    ОБНОВИТЬ
  КОНЕЦ_ФУНКЦИИ

  ФУНКЦИЯ Нажата_уст_по_умол(ПЕРЕМ КНОПКА: кнопка)
    УСТ_ПРИНТЕР_ПО_УМОЛЧ
  КОНЕЦ_ФУНКЦИИ

  ФУНКЦИЯ Нажата_печать(ПЕРЕМ КНОПКА: кнопка)
    отч.ПЕЧАТЬ(ДА, 0, "doc.pdf", "Microsoft Print to PDF")
  КОНЕЦ_ФУНКЦИИ
  ...
]
ПЕРЕМ Диалог_принтеры: д;
ВЫЧИСЛИТЬ
  отч.ПОКАЗАТЬ
КОНЕЦ

См. также: