방법: XPS 프린터로 직접 데이터 보내기
이 항목에서는 XPSDrv 프린터 드라이버를 사용하는 프린터로 프린터 제어 데이터를 직접 보내는 방법을 설명합니다.
다음 단계에서는 프린터로 직접 데이터를 보내는 방법을 설명합니다. 이러한 단계는 다음 코드 예제에도 설명되어 있습니다.
- OpenPrinter를 호출하여 프린터에 대한 핸들을 가져옵니다.
- 프린터 데이터를 사용하여 DOCINFO 구조를 초기화합니다.
- StartDocPrinter를 호출하여 애플리케이션이 문서 데이터를 프린터로 보낼 것임을 나타냅니다.
- WritePrinter를 호출하여 데이터를 보냅니다.
- EndDocPrinter를 호출하여 이 문서의 모든 데이터가 전송되었음을 나타냅니다.
- ClosePrinter를 호출하여 리소스를 해제합니다.
XPSDrv 프린터 드라이버를 사용하는 프린터로 직접 프린터 컨트롤 데이터를 보냅니다.
//
// RawDataToXpsPrinter - sends binary data directly to a printer
// with an XPSDrv Printer Driver
//
// szPrinterName: NULL-terminated string specifying printer name
// lpData: Pointer to raw data bytes
// dwCount Length of lpData in bytes
//
// Returns: TRUE for success, FALSE for failure.
//
BOOL RawDataToXpsPrinter (LPTSTR szPrinterName, LPBYTE lpData, DWORD dwCount)
{
BOOL bStatus = FALSE;
HANDLE hPrinter = NULL;
DOC_INFO_1 DocInfo;
DWORD dwPrtJob = 0L;
DWORD dwBytesWritten = 0L;
// Open a handle to the printer.
bStatus = OpenPrinter (szPrinterName, &hPrinter, NULL);
if (bStatus) {
// Fill in the structure with info about this "document."
DocInfo.pDocName = (LPTSTR)_T("My Document");
DocInfo.pOutputFile = NULL;
// Enter the datatype of this buffer.
// Use "XPS_PASS" when the data buffer should bypass the
// print filter pipeline of the XPSDrv printer driver.
// This datatype would be used to send the buffer directly
// to the printer, such as when sending print head alignment
// commands. Normally, a data buffer would be sent as the
// "RAW" datatype.
//
DocInfo.pDatatype = (LPTSTR)_T("XPS_PASS");
dwPrtJob = StartDocPrinter (
hPrinter,
1,
(LPBYTE)&DocInfo);
if (dwPrtJob > 0) {
// Send the data to the printer.
bStatus = WritePrinter (
hPrinter,
lpData,
dwCount,
&dwBytesWritten);
}
EndDocPrinter (hPrinter);
// Close the printer handle.
bStatus = ClosePrinter(hPrinter);
}
if (!bStatus || (dwCount != dwBytesWritten)) {
bStatus = FALSE;
} else {
bStatus = TRUE;
}
return bStatus;
}
관련 항목