Take the following steps to create and run a program that uses the LEADTOOLS Network Virtual Printer Driver as an IPP printer.
| 1. | Start Visual Studio 2008. | 
| 2. | From the main menu, choose File->New->Project... | 
| 3. | In the New Project dialog box, choose Visual C++ in the Project Types drop-down list box, and choose MFC Application in the Templates. | 
| 4. | Type the project name as “LEADTOOLS IPP Demo” in the Project Name field. | 
| 5. | In the Location field, use the Browse button to navigate to the Examples subdirectory (such as <LEADTOOLS_INSTALLDIR>\Examples\CDLL). Clear the Create Directory For Solution and Add to Source Control check boxes. Click OK. | 
| 6. | Click Next> in the MFC Application Wizard. | 
| 7. | Select dialog based application type. Then click Finish. Three folders will be created, entitled: "Header Files", "Resource Files", and "Source Files". | 
| 8. | From the main menu, choose Project->Properties. | 
| 9. | In the Properties dialog box, choose Configuration Properties then select C/C++ then select Preprocessor. | 
| 10. | On the right side set the Preprocessor Definitions Property to use LTVXX_CONFIG then click OK. | 
| 11. | In Solution Explorer, open stdafx.h, and add the following code to the end of the file: | 
#include "winspool.h"#include "..\..\..\Include\Ltprinter.h"
| 12. | In the Source Files, right -click the folder. Choose Add->New Item. Choose Code in Categories, and C++ File (.cpp) in Templates. Type Imports in the name field and click Add. | 
| 13. | Right-click Imports.cpp and click Open. Add the following code: | 
#include "stdafx.h"#if defined(WIN64)#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR\\CDLLVC10\\x64\\Ltkrn_x.lib)#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR\\CDLLVC10\\x64\\Ltprinter_x.lib)#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR\\CDLLVC10\\x64\\LtDocWrt_x.lib)#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR\\CDLLVC10\\x64\\Ltfil_x.lib)#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR\\CDLLVC10\\x64\\Ltdis_x.lib)#else#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR\\CDLLVC10\\Win32\\Ltkrn_u.lib)#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR\\CDLLVC10\\win32\\Ltprinter_u.lib)#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR\\CDLLVC10\\win32\\LtDocWrt_u.lib)#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR\\CDLLVC10\\win32\\Ltfil_u.lib)#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR\\CDLLVC10\\win32\\Ltdis_u.lib)#endif // #if defined(WIN64)
| 14. | Right-click LEADTOOLS IPP DemoDlg.h and click Open. Add the following function definitions to the CLEADTOOLSIPPDemoDlg class: | 
afx_msg void OnBnClickedOk();static L_INT (EXT_CALLBACK OnEmfRgsProc)( L_WCHAR*, HGLOBAL, L_UINT, L_VOID* );static L_INT (EXT_CALLBACK OnJobInfoProc)( L_WCHAR*, DWORD, DWORD, L_VOID* );L_L_INT EnableInternetPrinting();L_VOID RegisterJobCallBack();L_VOID RegisterEmfCallBack();L_INT InstallPrinter();BOOL SharePrinter(LPTSTR szPrinterName, LPTSTR szShareName, BOOL bShare);
| 15. | Right-click LEADTOOLS IPP DemoDlg.cpp and click Open. Add the following function: | 
//Locate BEGIN_MESSAGE_MAP(CLEADTOOLSIPPDemoDlg, CDialog) and add the following functionsON_BN_CLICKED(IDOK, &CLEADTOOLSIPPDemoDlg::OnBnClickedOk)//Add the following function implementationsvoid CLEADTOOLSIPPDemoDlg::OnBnClickedOk(){InstallPrinter();EnableInternetPrinting();RegisterEmfCallBack();RegisterJobCallBack();}L_INT CLEADTOOLSIPPDemoDlg::InstallPrinter (){PRNPRINTERINFO docPrinterInfo;memset(&docPrinterInfo, 0, sizeof(PRNPRINTERINFO));docPrinterInfo.uStructSize = sizeof(PRNPRINTERINFO);docPrinterInfo.pszRootDir = TEXT("C:\\LEADTOOLS 19\\Bin\\Common\\PrinterDriver");docPrinterInfo.pszPrinterName = TEXT("TestPrinter");docPrinterInfo.pszPortName = TEXT("TestPrinter");docPrinterInfo.pszMonitorName = TEXT("TestPrinter");docPrinterInfo.pszProductName = TEXT("TestPrinter");docPrinterInfo.pszRegistryKey = TEXT("SOFTWARE\\Printer\\TestPrinter");docPrinterInfo.pszUrl = TEXT("https://www.leadtools.com");#if defined(WIN64)docPrinterInfo.pszPrinterExe = TEXT("C:\\LEADTOOLS 19\\Bin\\CDLLVC10\\x64\\LEADTOOLS IPP Demo.exe")#elsedocPrinterInfo.pszPrinterExe = TEXT("C:\\LEADTOOLS 19\\Bin\\CDLLVC10\\Win32\\LEADTOOLS IPP Demo.exe");#endif // #if defined(WIN64)docPrinterInfo.pszAboutString = TEXT("LEADTOOLSPrinter");docPrinterInfo.pszAboutIcon = TEXT("c:\\LEADTOOLSPrinter.ico");L_INT nRet = L_PrnInstallPrinter(&docPrinterInfo, 0);SharePrinter(TEXT("TestPrinter"), TEXT("TestPrinter"), TRUE);return nRet;}BOOL CLEADTOOLSIPPDemoDlg::SharePrinter( LPTSTR szPrinterName, LPTSTR szShareName, BOOL bShare ){HANDLE hPrinter;PRINTER_DEFAULTS pd;DWORD dwNeeded;PRINTER_INFO_2 *pi2;ZeroMemory( &pd, sizeof(PRINTER_DEFAULTS) );pd.DesiredAccess = PRINTER_ALL_ACCESS;if( ! OpenPrinter( szPrinterName, &hPrinter, &pd ) ){return FALSE;}if( ! GetPrinter( hPrinter, 2, NULL, 0, amp;dwNeeded ) ){if( GetLastError() != ERROR_INSUFFICIENT_BUFFER ){// GetPrinter() has failed - bail out.ClosePrinter( hPrinter );return FALSE;}}pi2 = (PRINTER_INFO_2*)malloc( dwNeeded );if( pi2 == NULL ){ClosePrinter( hPrinter );return FALSE;}if( ! GetPrinter( hPrinter, 2, (LPBYTE)pi2, dwNeeded, &dwNeeded ) ){free( pi2 );ClosePrinter( hPrinter );return FALS}pi2->pSecurityDescriptor = NULL;if( bShare ){pi2->pShareName = szShareName;pi2->Attributes |= PRINTER_ATTRIBUTE_SHARED;}else{pi2->Attributes = pi2->Attributes & (~PRINTER_ATTRIBUTE_SHARED);}if( ! SetPrinter( hPrinter, 2, (LPBYTE)pi2, 0 ) ){// SetPrinter() has failed - bail outfree( pi2 );ClosePrinter( hPrinter );return FALSE;}// Clean up.free( pi2 );ClosePrinter( hPrinter );return TRUE;}L_INT CLEADTOOLSIPPDemoDlg::EnableInternetPrinting(){// Enable Network PrintingL_INT nRet = L_PrnSetEnableNetworkPrinting(TEXT("TestPrinter"), TRUE);// Enable Internet PrintinnRet = L_PrnSetEnableInternetPrinting(TEXT("TestPrinter"), TRUE);return nRet;}void CLEADTOOLSIPPDemoDlg::RegisterEmfCallBack(){L_PrnRegisterEMFCallback(TEXT("TestPrinter"),OnEmfRgsProc,this);}void CLEADTOOLSIPPDemoDlg::RegisterJobCallBack(){L_PrnRegisterJobCallback(TEXT("TestPrinter"),OnJobInfoProc,this);}L_INT CLEADTOOLSIPPDemoDlg::OnEmfRgsProc( L_WCHAR * /*pszPrinter*/,HGLOBAL hMemL_UINT uSize,L_VOID * pData ){static L_INT nCounter = 0;HANDLE hFile = INVALID_HANDLE_VALUE;DWORD uSizeWritten = 0;L_UCHAR * pEmfData= (L_UCHAR*) GlobalLock( hMem );CString szFileName = TEXT("c:\\1.emf");if( pEmfData ){hFile = CreateFile(szFileName, GENERIC_WRITE, FILE_SHARE_READ,NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL)if( hFile != INVALID_HANDLE_VALUE ){WriteFile( hFile, pEmfData, uSize, & uSizeWritten, NULL );CloseHandle( hFile );}GlobalUnlock( hMem );}// Do not forget to free the memory.GlobalFree( hMem );return 1;}L_INT CLEADTOOLSIPPDemoDlg::OnJobInfoProc( L_WCHAR * pszPrinter, DWORD dwJobID,DWORD dwFlags, L_VOID * pData ){switch( dwFlags ){case PRN_JOB_STAR{//Job was startedCStringA strstr.Format("Job ID: %d", dwJobID);MessageBoxA(NULL, str.LockBuffer(), "IPP Test Demo", 0);str.UnlockBuffer();}break;case PRN_JOB_END://Job was endedbreak;}return 1;}
| 16. | Compile and run the code to test it. Click OK in the dialog to install a new printer then enable internet printing, and connect to it from a client machine, Try to print on the newly created printer to receive EMF and Job callback events. | 
Note1: to Configure Internet printing on a computer running Windows Server 2008, perform the following steps:
1- Run the Server Manger.
2- Select Add Roles.
3- Select the following roles:
- Print and Document Services.
- Web Server (IIS).
 
4- In the Role Services list, select the following services:
- Print Server.
- Internet Printing.
 
5- Complete the Installation.
Note2: To install the printer driver on a client computer, perform the following steps:
1- Open SERVER_IP/printers in Internet Explorer:
 
2- Select the Installed Test Printer Name “Test Printer” and click it. The selected printer page opens.
 
3- Click the Connect link.
4- Complete the Installation.
See Also
Programming with the LEADTOOLS Virtual Printer Driver
Raster .NET | C API | C++ Class Library | JavaScript HTML5
Document .NET | C API | C++ Class Library | JavaScript HTML5
Medical .NET | C API | C++ Class Library | JavaScript HTML5
Medical Web Viewer .NET
