Поделиться через


Функция WritePrinter

Функция WritePrinter уведомляет средство spooler печати о том, что данные должны быть записаны на указанный принтер.

Замечание

WritePrinter поддерживает только печать GDI и не должна использоваться для печати XPS. Если задание печати использует путь печати XPS или OpenXPS, используйте API печати XPS. Отправка заданий печати XPS или OpenXPS в spooler с помощью WritePrinter не поддерживается и может привести к неопределенным результатам.

Синтаксис

BOOL WritePrinter(
  _In_  HANDLE  hPrinter,
  _In_  LPVOID  pBuf,
  _In_  DWORD   cbBuf,
  _Out_ LPDWORD pcWritten
);

Параметры

hPrinter [in]

Дескриптор принтера. Используйте функцию OpenPrinter или AddPrinter для получения дескриптора принтера.

pBuf [in]

Указатель на массив байтов, содержащий данные, которые должны быть записаны на принтер.

cbBuf [in]

Размер массива в байтах.

pcWritten [out]

Указатель на значение, которое получает количество байтов данных, записанных на принтер.

Возвращаемое значение

Если функция выполнена успешно, возвращаемое значение является ненулевое значение.

Если функция завершается ошибкой, возвращаемое значение равно нулю.

Замечания

Замечание

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

Последовательность задания печати выглядит следующим образом:

  1. Чтобы начать задание печати, вызовите StartDocPrinter.
  2. Чтобы начать каждую страницу, вызовите StartPagePrinter.
  3. Чтобы записать данные на страницу, вызовите WritePrinter.
  4. Чтобы завершить каждую страницу, вызовите EndPagePrinter.
  5. Повторите 2, 3 и 4 для максимально необходимых страниц.
  6. Чтобы завершить задание печати, вызовите EndDocPrinter.

Когда высокоуровневый документ (например, файл Adobe PDF или Microsoft Word) или другие данные принтера (например, PCL, PS или HPGL) отправляются непосредственно на принтер, параметры печати, определенные в документе, принимают прецедент над параметрами печати Windows. Документирует выходные данные, когда значение элемента pDatatype структуры DOC_INFO_1, переданной в параметре pDocInfo вызова StartDocPrinter, должно полностью описать параметры задания печати в стиле DEVMODE на языке, понятном оборудованием.

В версиях Windows до Windows XP, когда страница в spooled-файле превышает около 350 МБ, она может не печатать и не отправлять сообщение об ошибке. Например, это может произойти при печати больших EMF-файлов. Ограничение размера страницы в версиях Windows до Windows XP зависит от многих факторов, включая объем доступной виртуальной памяти, объем памяти, выделяемый процессами вызова, и объем фрагментации в куче процесса. В Windows XP и более поздних версиях Windows EMF-файлы должны иметь размер 2 ГБ или меньше. Если WritePrinter используется для записи данных, отличных от EMF, например PDL, готовых к принтеру, размер файла ограничен только доступным местом на диске.

Примеры

Пример программы, использующего эту функцию, см. в разделе "Практическое руководство. Печать с помощью API печати GDI".

Требования

Требование Ценность
Минимальный поддерживаемый клиент
Windows 2000 Professional [только классические приложения]
Минимальный поддерживаемый сервер
Windows 2000 Server [только классические приложения]
Заголовок
Winspool.h (включая Windows.h)
Библиотека
Winspool.lib
Библиотека dll
Spoolss.dll

См. также

Печать

Функции API печати spooler

EndDocPrinter

EndPagePrinter

ОткрытьПринтер

StartDocPrinter

StartPagePrinter