1. Declare INovaPdfOptions variable
//declare an INovaPdfOptions member variable
private :
INovaPdfOptions *m_novaOptions;
2. Register novaPDF Printer messages
const UINT wm_Nova_FileSaved = RegisterWindowMessageW( MSG_NOVAPDF2_FILESAVED );
const UINT wm_Nova_PrintError = RegisterWindowMessageW( MSG_NOVAPDF2_PRINTERROR );
BEGIN_MESSAGE_MAP(CnovaPrintDlg, CDialog)
//...
ON_REGISTERED_MESSAGE(wm_Nova_FileSaved, OnNovaPDFFileSaved)
ON_REGISTERED_MESSAGE(wm_Nova_PrintError, OnNovaPDFPrintError)
//...
END_MESSAGE_MAP()
3. Initialize INovaPdfOptions
BOOL CnovaPrintDlg::OnInitDialog()
{
//...
HRESULT hr = S_OK;
m_novaOptions = 0;
//create an instance of INovaPdfOptions
hr = CoCreateInstance(__uuidof(NovaPdfOptions), NULL, CLSCTX_INPROC_SERVER, __uuidof(INovaPdfOptions), (LPVOID*) &m_novaOptions);
if (SUCCEEDED(hr)) {
//initialize NovaPdfOptions and pass printer name
// if you have an application license for novaPDF SDK,
// pass both the registration name and the license key to the Initialize() function
// hr = m_novaOptions->Initialize(PRINTER_NAME, L"<registration name>", L"<license key>");
hr = m_novaOptions->Initialize(PRINTER_NAME, L"", L"", L"");
}
else {
::MessageBoxW(NULL, L"Failed to create novaPDF COM object", L"novaPDF", MB_OK);
}
//...
}
4. Release INovaPDFOptions
CnovaPrintDlg::~CnovaPrintDlg()
{
//...
//delete profiles
m_novaOptions->DeleteProfile(SMALL_SIZE_PROFILE, PROFILE_IS_PUBLIC);
// destroy our nova options object
if (m_novaOptions) {
m_novaOptions->Release();
}
// uninitialize COM libraries
CoUninitialize();
//...
}
5. Set novaPDF Printer Options
BOOL CnovaPrintDlg::OnInitDialog()
{
//...
//initialize m_novaOptions (see above)
//...
// Add a profile called "Small size". If profile L"Small size" exists this will fail
hr = m_novaOptions->AddProfile(SMALL_SIZE_PROFILE, PROFILE_IS_PUBLIC);
// Set some options to this profile
// disable the "Save PDF file as" prompt
hr = m_novaOptions->SetOptionLong(NOVAPDF_SAVE_PROMPT, FALSE, SMALL_SIZE_PROFILE, PROFILE_IS_PUBLIC);
// set generated Pdf files destination folder ("c:\")
hr = m_novaOptions->SetOptionString(NOVAPDF_SAVE_FOLDER, L"", SMALL_SIZE_PROFILE, PROFILE_IS_PUBLIC);
// set output file name
hr = m_novaOptions->SetOptionString(NOVAPDF_SAVE_FILE, L"PDF Converter small size.pdf", SMALL_SIZE_PROFILE, PROFILE_IS_PUBLIC);
//Set other options
//...
}
6. Start a print job
void CnovaPrintDlg::OnBnClickedOk()
{
//...
HRESULT hr = S_OK;
// set the active profile to be used for printing
hr = m_novaOptions->SetActiveProfile(m_strProfile, PROFILE_IS_PUBLIC);
// register our window to receive messages from the printer
hr = m_novaOptions->RegisterEventWindow((LONG) GetSafeHwnd());
// set novaPDF as default printer, so it will be used by ShellExecute
hr = m_novaOptions->SetDefaultPrinter();
// license file for ShellExecute
hr = m_novaOptions- >LicenseShellExecuteFile(m_strFileToConvert.AllocSysString());
// print the document
m_bPrintJobPending = TRUE;
HINSTANCE hExec = ShellExecute(GetSafeHwnd(), L"print", m_strFileToConvert, NULL, NULL, SW_HIDE);
//...
}
7. Restore default printer when printing finished
LRESULT CnovaPrintDlg::OnNovaPDFFileSaved(WPARAM wParam, LPARAM lParam)
{
// restore original default printer
m_novaOptions->UnRegisterEventWindow();
m_novaOptions->RestoreDefaultPrinter();
m_bPrintJobPending = FALSE;
return 0;
}
LRESULT CnovaPrintDlg::OnNovaPDFPrintError(WPARAM wParam, LPARAM lParam)
{
switch(wParam){
case ERROR_MSG_TEMP_FILE:
MessageBox(L"Error saving temporary file on printer server", L"novaPDF", MB_OK);
break;
case ERROR_MSG_LIC_INFO:
MessageBox(L"Error reading license information", L"novaPDF", MB_OK);
break;
case ERROR_MSG_SAVE_PDF:
MessageBox(L"Error saving PDF file", L"novaPDF", MB_OK);
break;
case ERROR_MSG_JOB_CANCELED:
MessageBox(L"Print job was canceled", L"novaPDF", MB_OK);
break;
}
// restore original default printer
m_novaOptions->UnRegisterEventWindow();
m_novaOptions->RestoreDefaultPrinter();
m_bPrintJobPending = FALSE;
return 0;
}