16,472
社区成员
发帖
与我相关
我的任务
分享
int iPrint(TCHAR *tcFile,DWORD iCount)
{
BOOL bRet=FALSE;
PRINTER_DEFAULTS PD;
HANDLE hPrinter = NULL;
TCHAR *pBuffer=NULL;
DWORD dwJob,dwBytesWritten,dwLowSize,dwHighSize,dwBytesRead;
DWORD iPageCount = 0;
PD.pDatatype = 0;
PD.DesiredAccess = PRINTER_ALL_ACCESS;
PD.pDevMode = 0;
HANDLE m_hdev;
m_hdev=INVALID_HANDLE_VALUE;
m_hdev=CreateFile(tcFile,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
if(m_hdev==INVALID_HANDLE_VALUE)
{
return -1;
}
dwLowSize = GetFileSize(m_hdev,&dwHighSize);
pBuffer=new TCHAR[dwLowSize];
if(!ReadFile(m_hdev,pBuffer,dwLowSize,&dwBytesRead,NULL))
{
CloseHandle(m_hdev);
m_hdev=INVALID_HANDLE_VALUE;
delete[] pBuffer;
return -1;
}
CloseHandle(m_hdev);
bRet = OpenPrinter(_T("HP Deskjet 1300"), &hPrinter, &PD);
if (bRet == -1)
{
return -1;
}
DOC_INFO_1 DocInfo;
DocInfo.pDocName = _T("Sample");
DocInfo.pOutputFile = NULL;
DocInfo.pDatatype = _T("RAW");
for (DWORD i = 0;i<iCount; i++)
{
// Inform the spooler the document is beginning.
if( (dwJob = StartDocPrinter( hPrinter, 1, (LPBYTE)&DocInfo )) == 0 )
{
ClosePrinter( hPrinter );
delete[] pBuffer;
return -1;
}
// Start a page.
if( ! StartPagePrinter( hPrinter ) )
{
EndDocPrinter( hPrinter );
ClosePrinter( hPrinter );
delete[] pBuffer;
return -1;
}
iPageCount ++;
// Send the data to the printer.
// You must send the total document once.
if( !WritePrinter( hPrinter, pBuffer, dwBytesRead, &dwBytesWritten ) )
{
EndPagePrinter( hPrinter );
EndDocPrinter( hPrinter );
ClosePrinter( hPrinter );
delete[] pBuffer;
return -1;
}
// End the page.
if( ! EndPagePrinter( hPrinter ) )
{
EndDocPrinter( hPrinter );
ClosePrinter( hPrinter );
delete[] pBuffer;
return -1;
}
// Inform the spooler that the document is ending.
if( ! EndDocPrinter( hPrinter ) )
{
ClosePrinter( hPrinter );
delete[] pBuffer;
return -1;
}
}
ClosePrinter( hPrinter );
delete[] pBuffer;
return iPageCount;
}