Temporary printer SDK sample

Temporary printer sample is similar with Hello World sample but it uses temporary printers. It demonstrates the use of AddNovaPrinter and DeleteNovaPrinter.

Note: To be able to use the samples you must install novaPDF SDK as samples work only with it. Download it here: nova PDF SDK.

Source code

#include "stdafx.h" //Include novaPDF headers #include "..\..\..\include\novaOptions.h" //NovaPdfOptions #include "..\..\..\include\novapi.h" #include "nova.h" //name of novaPDF Printer Demo #define PRINTER_NAME L"novaPDF temporary printer" #define PORT_NAME L"novaPDF8temp" //text to be written in the PDF file #define PDF_TEXT L"Hello world!" //PDF file name #define PDF_FILE_NAME L"HelloWorld.pdf" //Print profile name #define PROFILE_NAME L"HelloWorld Profile" #define PROFILE_IS_PUBLIC 0 //entry point for the console application int _tmain(int argc, _TCHAR* argv[]) { HRESULT hr = S_OK; //initialize COM hr = CoInitialize(NULL); if (FAILED (hr)) { MessageBox(NULL, L"Failed to initialize COM", L"novaPDF", MB_OK); return hr; } //create one NovaPdfOptions instance INovaPdfOptions *pNova = 0; hr = CoCreateInstance(__uuidof(NovaPdfOptions80), NULL, CLSCTX_INPROC_SERVER, __uuidof(INovaPdfOptions80), (LPVOID*) &pNova); if (SUCCEEDED(hr)) { //add temporary printer pNova->AddNovaPrinter(PRINTER_NAME, PORT_NAME, L"nPdfSdk8_Softland", L"8501", L""); // set optional PDF settings  LPWSTR pwsNewProfileID = NULL; //create a new profile with default settings hr = pNova->AddProfile(PROFILE_NAME, PROFILE_IS_PUBLIC, &pwsNewProfileID); //load the newly created profile if (SUCCEEDED(hr) && pwsNewProfileID) { hr = pNova->LoadProfile(pwsNewProfileID); } else { MessageBox(NULL, L"Failed to create profile", L"novaPDF", MB_OK); return hr; } // set novaPDF options  // set PDF document Title pNova->SetOptionString(NOVAPDF_DOCINFO_TITLE, L"My Doc Title"); //what type of save dialog to be shown (none, simple or extended) pNova->SetOptionLong(NOVAPDF_SAVE_PROMPT_TYPE, PROMPT_SAVE_SIMPLE); //you may choose a predefined folder like "My Documents" pNova->SetOptionLong(NOVAPDF_SAVE_FOLDER_TYPE, SAVEFOLDER_MYDOCUMENTS); //set a macro for the file name pNova->SetOptionString(NOVAPDF_SAVE_FILE_NAME, L"test_[N]"); //in case a file with the same name exists in the selected folder, choose what to do pNova->SetOptionLong(NOVAPDF_SAVE_FILEEXIST_ACTION, FILE_CONFLICT_STRATEGY_AUTONUMBER_NEW); //save profile changes hr = pNova->SaveProfile(); //set as active profile for printer pNova->SetActiveProfile(pwsNewProfileID); HANDLE hPrinter; PDEVMODEW pDevmode = NULL; PRINTER_DEFAULTS pd = { NULL, NULL, PRINTER_ACCESS_USE }; //start print job if (OpenPrinter(PRINTER_NAME, &hPrinter, &pd)) { //get default printer DEVMODE  int nSize = DocumentProperties(NULL, hPrinter, PRINTER_NAME, NULL, NULL, 0); pDevmode = (PDEVMODEW)LocalAlloc(LPTR, nSize); DocumentProperties(NULL, hPrinter, PRINTER_NAME, pDevmode, NULL, DM_OUT_BUFFER); //set page size in DEVMODE pDevmode->dmPaperSize = DMPAPER_USER; pDevmode->dmPaperLength = 2970; pDevmode->dmPaperWidth = 2100; pDevmode->dmFields = DM_PAPERSIZE | DM_PAPERLENGTH | DM_PAPERWIDTH; DocumentProperties(NULL, hPrinter, PRINTER_NAME, pDevmode, pDevmode, DM_IN_BUFFER | DM_OUT_BUFFER); //Print a page HDC hDC = CreateDC(L"", PRINTER_NAME, NULL, pDevmode); DOCINFO docInfo = {sizeof(DOCINFO)}; // PDF document name and path docInfo.lpszDocName = PDF_FILE_NAME; StartDoc(hDC,&docInfo); StartPage(hDC); // Draw text on page TextOut(hDC, 100, 80, PDF_TEXT, (int) wcslen(PDF_TEXT)); EndPage(hDC); EndDoc(hDC); DeleteDC(hDC); //print job sent to printer MessageBox(NULL, L"Print job finished", L"novaPDF", MB_OK); LocalFree(pDevmode); ClosePrinter(hPrinter); } else { WCHAR wsMessage[255]; wsprintf(wsMessage, L"OpenPrinter failed, error = %d", GetLastError()); MessageBox(NULL, wsMessage, L"novaPDF", MB_OK); } //delete newly created profile pNova->DeleteProfile(pwsNewProfileID); //free memory CoTaskMemFree(pwsNewProfileID); //delete temporarry printer pNova->DeleteNovaPrinter(PRINTER_NAME); } //release NovaPdfOptions pNova->Release(); CoUninitialize(); return 0; } 


NEW: novaPDF 8.8.947