| 
 | 
 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 );
 - }
 
  
 
 
 |