|
Q
- QPrinterInfo Info( q_printer );
- QString printerName = Info.printerName();
- //打印机句柄
- HANDLE hPrinter;
- LPSTR szPrinterName;
- //作业信息
- JOB_INFO_2 *pJobs;
- //作业
- int cJobs;
- //打印机状态
- DWORD dwPrinterStatus;
- szPrinterName = (char*)printerName.toLocal8Bit().data();
- OpenPrinterA( szPrinterName, &hPrinter, NULL);
- //获取打印作业的状态
- GetJobs( hPrinter, &pJobs, &cJobs, &dwPrinterStatus );
- //判断打印机是否正常运行,如果为false,则输出为PDF文档
- if( 0 != dwPrinterStatus )
- {
- QWidget w;
- int i_button = QMessageBox::information( &w, "warning", " can not connect printer, whether save to PDF?",
- QMessageBox::Yes | QMessageBox::No );
- if( QMessageBox::Yes == i_button )
- {
- PrintToPDF( &q_printer );
- }
- }
- //运行正常,则直接打印
- else
- {
- if( dialog.exec() )
- {
- QPainter q_painter( &q_printer );
- render( &q_painter);
- }
- }
- }
- /// 获取打印作业的状态
- BOOL CScene::GetJobs(HANDLE hPrinter, JOB_INFO_2 **ppJobInfo, int *pcJobs, DWORD *pStatus)
- {
- DWORD cByteNeeded, nReturned, cByteUsed;
- JOB_INFO_2 *pJobStorage = NULL;
- PRINTER_INFO_2 *pPrinterInfo = NULL;
- if ( !GetPrinter(hPrinter, 2, NULL, 0, &cByteNeeded ) )
- {
- DWORD dwErrorCode = ::GetLastError();
- if ( dwErrorCode != ERROR_INSUFFICIENT_BUFFER )
- return FALSE;
- }
- pPrinterInfo = (PRINTER_INFO_2 *)malloc(cByteNeeded);
- if (!(pPrinterInfo))
- return FALSE;
- if (!GetPrinter(hPrinter, 2, (LPBYTE)pPrinterInfo, cByteNeeded, &cByteUsed))
- {
- free(pPrinterInfo);
- pPrinterInfo = NULL;
- return FALSE;
- }
- if (!EnumJobs(hPrinter, 0, pPrinterInfo->cJobs, 2, NULL, 0, (LPDWORD)&cByteNeeded,
- (LPDWORD)&nReturned))
- {
- if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
- {
- free(pPrinterInfo);
- pPrinterInfo = NULL;
- return FALSE;
- }
- }
- pJobStorage = (JOB_INFO_2 *)malloc(cByteNeeded);
- if (!pJobStorage)
- {
- free(pPrinterInfo);
- pPrinterInfo = NULL;
- return FALSE;
- }
- ZeroMemory(pJobStorage, cByteNeeded);
- if (!EnumJobs(hPrinter, 0, pPrinterInfo->cJobs, 2, (LPBYTE)pJobStorage, cByteNeeded,
- (LPDWORD)&cByteUsed, (LPDWORD)&nReturned))
- {
- free(pPrinterInfo);
- free(pJobStorage);
- pJobStorage = NULL;
- pPrinterInfo = NULL;
- return FALSE;
- }
- *pcJobs = nReturned;
- *pStatus = pPrinterInfo->Status;
- *ppJobInfo = pJobStorage;
- free(pPrinterInfo);
- return TRUE;
- }
- //打印成PDF文档
- void CScene::PrintToPDF( QPrinter *printer)
- {
- //打印为PDF文档输出
- printer->setOutputFormat( QPrinter::PdfFormat );
- QWidget w;
- QString path = QFileDialog::getSaveFileName( &w, "save as", "", "*.pdf");
- if( path.isEmpty() )
- {
- return ;
- }
- QFileInfo fileinfo( path );
- printer->setOutputFileName( fileinfo.fileName() );
- QPainter q_painter( printer );
- render( &q_painter );
- }
|