Funzione WritePrinter
La funzione WritePrinter notifica allo spooler di stampa che i dati devono essere scritti nella stampante specificata.
Nota
WritePrinter supporta solo la stampa GDI e non deve essere utilizzata per la stampa XPS. Se il processo di stampa usa xps o il percorso di stampa OpenXPS, usare l'API di stampa XPS. L'invio di processi di stampa XPS o OpenXPS allo spooler tramite WritePrinter non è supportato e può comportare risultati non determini.
Sintassi
BOOL WritePrinter(
_In_ HANDLE hPrinter,
_In_ LPVOID pBuf,
_In_ DWORD cbBuf,
_Out_ LPDWORD pcWritten
);
Parametri
-
hPrinter [in]
-
Handle per la stampante. Utilizzare la funzione OpenPrinter o AddPrinter per recuperare un handle della stampante.
-
pBuf [in]
-
Puntatore a una matrice di byte che contiene i dati da scrivere nella stampante.
-
cbBuf [in]
-
Dimensione, in byte, della matrice.
-
pcWritten [out]
-
Puntatore a un valore che riceve il numero di byte di dati scritti nella stampante.
Valore restituito
Se la funzione ha esito positivo, il valore restituito è un valore diverso da zero.
Se la funzione ha esito negativo, il valore restituito è zero.
Commenti
Nota
Si tratta di una funzione di blocco o sincrona e potrebbe non restituire immediatamente. La velocità di restituzione di questa funzione dipende da fattori di runtime come lo stato della rete, la configurazione del server di stampa e i fattori di implementazione del driver della stampante difficili da prevedere durante la scrittura di un'applicazione. Chiamando questa funzione da un thread che gestisce l'interazione con l'interfaccia utente, l'applicazione potrebbe sembrare non rispondente.
La sequenza per un processo di stampa è la seguente:
- Per avviare un processo di stampa, chiama StartDocPrinter.
- Per iniziare ogni pagina, chiama StartPagePrinter.
- Per scrivere dati in una pagina, chiamare WritePrinter.
- Per terminare ogni pagina, chiamare EndPagePrinter.
- Ripetere 2, 3 e 4 per tutte le pagine necessarie.
- Per terminare il processo di stampa, chiamare EndDocPrinter.
Quando un documento di alto livello (ad esempio un file Adobe PDF o Microsoft Word) o altri dati della stampante (ad esempio PCL, PS o HPGL) viene inviato direttamente a una stampante, le impostazioni di stampa definite nel documento hanno precedenza sulle impostazioni di stampa di Windows. L'output dei documenti viene restituito quando il valore del membro pDatatype della struttura DOC_INFO_1 passata nel parametro pDocInfo della chiamata StartDocPrinter è "RAW" deve descrivere completamente le impostazioni del processo di stampa in stile DEVMODE nella lingua compresa dall'hardware.
Nelle versioni di Windows precedenti a Windows XP, quando una pagina in un file con spooling supera circa 350 MB, può non riuscire a stampare e non inviare un messaggio di errore. Ad esempio, ciò può verificarsi quando si stampano file EMF di grandi dimensioni. Il limite di dimensioni della pagina nelle versioni di Windows precedenti a Windows XP dipende da molti fattori, tra cui la quantità di memoria virtuale disponibile, la quantità di memoria allocata chiamando i processi e la quantità di frammentazione nell'heap del processo. In Windows XP e versioni successive di Windows, i file EMF devono avere dimensioni inferiori o pari a 2 GB. Se WritePrinter viene usato per scrivere dati non EMF, ad esempio pdl pronti per la stampante, le dimensioni del file sono limitate solo dallo spazio disponibile su disco.
Esempio
Per un programma di esempio che usa questa funzione, vedere Procedura: Stampare usando l'API di stampa GDI.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato |
Windows 2000 Professional [solo app desktop] |
Server minimo supportato |
Windows 2000 Server [solo app desktop] |
Intestazione |
|
Libreria |
|
DLL |
|