VCL Converter (Delphi PDF) - SDK sample

Download Sample
Download size: 39.8KB
[Format: ZIP]
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.

The VCL Converter (Delphi PDF) sample demonstrates how to convert an existing file by printing it to novaPDF Printer using the ShellExecute function. It also demonstrates how to set different options and manage profiles.

The same approach should be taken if you print using a "Print()" method from another object (like an internet browser or a report control). Just replace the ShellExecute call with the call of your Print method.

When the application starts, it creates a few profiles and makes different settings in the profiles. Then it shows a dialog from where the user can select the active profile and change its settings using the controls from the dialog. After that a document can be selected from the harddisk and printed to novaPDF Printer using the ShellExecute function call.

When using this technique to convert a file to PDF, you have to take care of the fact that ShellExecute prints to the default printer. This function returns immediately and does not wait until the print is finished (it may return before the printing is actually started). Therefore you have to set the default printer to novaPDF Printer before calling ShellExecute (using the SetDefaultPrinter method), register FileSaved message (or any other novaPDF Printer message) to be sure that the print job was started. In this message handler restore the default printer (with the RestoreDefaultPrinter method). This way you made sure that the default printer was restored and your document is printed to novaPDF Printer.


Source Code Snippets

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;

© 2002-2008 Softland. All Rights Reserved.
PDF Creator novaPDF
Create PDF for your paperless office
home Home   contact usContact us   partnershipsPartnerships   bookmarkBookmark   Site updated: 14-August-2008
Downloads Download Now

Download, install and use novaPDF. Latest version: 5.4 build 270

Download PDF creator
promotionsSpecial Offers

Current discounts:
- up to 25% for Desktop Editions
- up to 25% for Server Editions
- 20% Academic Discount
- up to 16% for Developer Tools

buyBuy Now
Professional edition $39.95
(Save $10)
Standard edition $29.95
(Save $10)
Lite edition $19.95
(Save $5)
Buy Now
newsLatest News

novaPDF 5.4 released
February 11, 2008

What’s new (read more):
 » Added Copy Text/Image Watermarks dialog
 » Added "Lookup Address" option when sending emails
 » Corrected rotated and vertical texts conversion
 » Corrected conversion from WordArt, MS Word backgrounds and MS Visio drawings
 » Uninstaller deletes now the driver files

sdkDeveloper Tools

novaPDF SDK is a software development toolkit that can be used by software developers and programmers to add the ability to create PDF files in their applications.
novaPDF OEM is a PDF solution that programmers can use to generate PDF files that will be post-processed by their applications. […]

Reviews & User QuotesPDF Creator Reviews
"novaPDF is a really neat tool. Basically, it’s a PDF printer driver that prints to a PDF file instead of paper.
See more reviews about nova PDF
[…] novaPDF is a great product that works without forcing the user to configure anything. The convenience alone is worth the money." […]
Jason Pullara, Editor
Currently supported languagesLanguages

News:
- Norwegian language added.

Help us translate novaPDF and we will give you licenses for novaPDF Professional and mention you on the Languages page. […]

awardsAwards

novaPDF received the Editor’s Pick from Soft32, a major download site:

PDF creator reviews

See the Awards page for more ratings.

NewsletterKnowledgebase articles

Latest articles on how to:
 » Create PDF files
 » Convert JPG to PDF
 » Convert Powerpoint to PDF
 » Convert Publisher to PDF
 » Convert web pages to PDF
Full article list in the knowledgebase.