1. Declare INovaPdfOptions variable
//declare an INovaPdfOptions member variable
private
m_novaOptions : INovaPdfOptions;
2. Register novaPDF Printer messages
//register event messages
WM_NOVAPDF2_FILESAVED := RegisterWindowMessage(MSG_NOVAPDF2_FILESAVED);
WM_NOVAPDF2_PRINTERROR:= RegisterWindowMessage(MSG_NOVAPDF2_PRINTERROR);
// handle event messages
public
procedure WndProc(var Message: TMessage); override;
procedure TForm1.WndProc(var Message: TMessage);
begin
if Message.Msg = WM_NOVAPDF2_FILESAVED then begin
// ...
end else if Message.Msg = WM_NOVAPDF2_PRINTERROR then begin
// ...
end else begin
inherited WndProc(Message);
end;
end;
3. Initialize INovaPdfOptions
procedure TForm1.FormCreate(Sender: TObject);
begin
// ...
// initialize COM libraries
hr := ActiveX.CoInitialize(nil);
if FAILED(hr) then begin
MessageDlg('Failed to initialize COM' +#13+SysErrorMessage(hr) +#13+
SysErrorMessage(GetLastError()), mtWarning, [mbOK], 0);
end;
//create an instance of INovaPdfOptions
m_novaOptions := nil;
hr := ActiveX.CoCreateInstance(
CLASS_NovaPdfOptions, //CLSID_CNovaPdfSource
nil,
CLSCTX_INPROC_SERVER,
IID_INovaPdfOptions,
m_novaOptions);
if (FAILED(hr)) then begin
MessageDlg('Failed to create novaPDF COM object',
mtWarning, [mbOK], 0);
exit;
end;
//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 Initialize2() function
//hr := m_novaOptions.Initialize2( PRINTER_NAME, '<registration name>', '<license key>');
hr := m_novaOptions.Initialize2( PRINTER_NAME, '', '', '' );
if (FAILED(hr)) then begin
MessageDlg('Failed to initialize NovaPdfOptions',
mtWarning, [mbOK], 0);
exit;
end;
// add 2 profiles in registry
CreateProfiles();
// load profiles from registry
LoadProfiles();
end;
4. Release INovaPDFOptions
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//...
//delete profiles
hr := m_novaOptions.DeleteProfile2( SMALL_SIZE_PROFILE, PROFILE_IS_PUBLIC );
hr := m_novaOptions.DeleteProfile2( FULL_OPT_PROFILE, PROFILE_IS_PUBLIC );
// destroy m_novaOptions object
// - no need for this as the Delphi takes care of it automatically
// uninitialize COM libraries
ActiveX.CoUninitialize();
//...
end;
5. Set novaPDF Printer Options
procedure TForm1.CreateProfiles();
begin
// Add a profile called "Small size". if profile L"Small size" exists this will fail
hr := m_novaOptions.AddProfile2(SMALL_SIZE_PROFILE, PROFILE_IS_PUBLIC);
// Set some options to this profile
// disable the "Save PDF file as" prompt
hr := m_novaOptions.SetOptionLong2(NOVAPDF_SAVE_PROMPT,
0,
SMALL_SIZE_PROFILE,
PROFILE_IS_PUBLIC);
// set generated Pdf files destination folder to the application path
hr := m_novaOptions.SetOptionString2(
NOVAPDF_SAVE_FOLDER,
ExtractFilePath(Application.ExeName),
SMALL_SIZE_PROFILE,
PROFILE_IS_PUBLIC);
// set output file name
hr := m_novaOptions.SetOptionString2(NOVAPDF_SAVE_FILE,
'PDF Converter small size.pdf',
SMALL_SIZE_PROFILE,
PROFILE_IS_PUBLIC);
//Set other options and profiles
//...
end;
6. Start a print job
procedure TForm1.btnStartPrintClick(Sender: TObject);
var
hExec : HINST;
begin
//...
hr := S_OK;
// set the active profile to be used for printing
hr := m_novaOptions.SetActiveProfile2(cbProfiles.Text, PROFILE_IS_PUBLIC);
// register our window to receive messages from the printer
hr := m_novaOptions.RegisterEventWindow(self.Handle);
// set novaPDF as default printer, so it will be used by ShellExecute
hr := m_novaOptions.SetDefaultPrinter();
//license the file to be converted with Shellexecute
hr := m_novaOptions.LicenseShellExecuteFile(efFileToConvert.Text);
// print the document
m_bPrintJobPending := TRUE;
hExec := ShellAPI.ShellExecute(self.handle,
'print',
PChar(efFileToConvert.Text),
PChar(''), PChar(''), SW_HIDE);
if (hExec <= 32) then begin // failed to execute program
m_bPrintJobPending := FALSE;
hr := m_novaOptions.UnRegisterEventWindow();
hr := m_novaOptions.RestoreDefaultPrinter();
end;
end;
7. Restore default printer when printing finished
procedure TForm1.WndProc(var Message: TMessage);
begin
if Message.Msg = WM_NOVAPDF2_FILESAVED then begin
// restore original default printer
hr := m_novaOptions.UnRegisterEventWindow();
hr := m_novaOptions.RestoreDefaultPrinter();
m_bPrintJobPending := FALSE;
end else if Message.Msg = WM_NOVAPDF2_PRINTERROR then begin
case (Message.WParam) of
ERROR_MSG_TEMP_FILE : begin
MessageDlg('Error saving temporary file on printer server',
mtWarning, [mbOK], 0);
end;
ERROR_MSG_LIC_INFO : begin
MessageDlg('Error reading license information',
mtWarning, [mbOK], 0);
end;
ERROR_MSG_SAVE_PDF : begin
MessageDlg('Error saving PDF file', mtWarning, [mbOK], 0);
end;
ERROR_MSG_JOB_CANCELED : begin
MessageDlg('Print job was canceled', mtWarning, [mbOK], 0);
end;
end;
// restore original default printer
hr := m_novaOptions.UnRegisterEventWindow();
hr := m_novaOptions.RestoreDefaultPrinter();
m_bPrintJobPending := FALSE;
end else begin
inherited WndProc(Message);
end;
end;