Compartir a través de


Función WritePrinter

La función WritePrinter notifica al administrador de impresión que los datos se deben escribir en la impresora especificada.

Nota:

WritePrinter solo admite la impresión GDI y no debe usarse para la impresión XPS. Si el trabajo de impresión usa la ruta de impresión XPS o OpenXPS, use la API de impresión XPS. No se admite el envío de trabajos de impresión xpS o OpenXPS al colador mediante WritePrinter y puede dar lugar a resultados no predeterminados.

Sintaxis

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

Parámetros

hPrinter [in]

Identificador de la impresora. Use la función OpenPrinter o AddPrinter para recuperar un identificador de impresora.

pBuf [in]

Puntero a una matriz de bytes que contiene los datos que se deben escribir en la impresora.

cbBuf [in]

Tamaño, en bytes, de la matriz.

pcWritten [out]

Puntero a un valor que recibe el número de bytes de datos escritos en la impresora.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es un valor distinto de cero.

Si se produce un error en la función, el valor devuelto es cero.

Observaciones

Nota:

Se trata de una función de bloqueo o sincrónica que podría no devolverse inmediatamente. La rapidez con que devuelve esta función depende de factores en tiempo de ejecución, como el estado de red, la configuración del servidor de impresión y los factores de implementación del controlador de impresora que son difíciles de predecir al escribir una aplicación. Llamar a esta función desde un subproceso que administra la interacción con la interfaz de usuario podría hacer que la aplicación parezca que no responde.

La secuencia de un trabajo de impresión es la siguiente:

  1. Para iniciar un trabajo de impresión, llame a StartDocPrinter.
  2. Para comenzar cada página, llame a StartPagePrinter.
  3. Para escribir datos en una página, llame a WritePrinter.
  4. Para finalizar cada página, llame a EndPagePrinter.
  5. Repita 2, 3 y 4 para tantas páginas como sea necesario.
  6. Para finalizar el trabajo de impresión, llame a EndDocPrinter.

Cuando un documento de alto nivel (como un archivo Adobe PDF o Microsoft Word) u otros datos de impresora (como PCL, PS o HPGL) se envía directamente a una impresora, la configuración de impresión definida en el documento toma precedentes sobre la configuración de impresión de Windows. Los documentos se generan cuando el valor del miembro pDatatype de la estructura de DOC_INFO_1 que se pasó en el parámetro pDocInfo de la llamada a StartDocPrinter es "RAW" debe describir completamente la configuración del trabajo de impresión de estilo DEVMODE en el idioma comprendido por el hardware.

En versiones de Windows anteriores a Windows XP, cuando una página de un archivo en cola supera aproximadamente 350 MB, puede no imprimir y no enviar un mensaje de error. Por ejemplo, esto puede ocurrir al imprimir archivos EMF grandes. El límite de tamaño de página en versiones de Windows anteriores a Windows XP depende de muchos factores, incluida la cantidad de memoria virtual disponible, la cantidad de memoria asignada mediante la llamada a procesos y la cantidad de fragmentación en el montón de procesos. En Windows XP y versiones posteriores de Windows, los archivos EMF deben tener un tamaño de 2 GB o menos. Si WritePrinter se usa para escribir datos que no sean EMF, como PDL listos para impresora, el tamaño del archivo solo está limitado por el espacio en disco disponible.

Ejemplos

Para obtener un programa de ejemplo que use esta función, consulte How To: Print Using the GDI Print API.

Requisitos

Requisito Importancia
Cliente mínimo compatible
Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows 2000 Server [solo aplicaciones de escritorio]
Cabecera
Winspool.h (incluya Windows.h)
Biblioteca
Winspool.lib
Archivo DLL
Spoolss.dll

Consulte también

Impresión

de funciones de API de administrador de trabajos de impresión

EndDocPrinter de

endPagePrinter de

OpenPrinter

startDocPrinter de

startPagePrinter de