Imprimer tout type de document (pdf, doc, xls, html, rtf, docx) par programmation

Introduction

Alors, comment vous imprimez tout type de document, par programmation? Bien, je pense que nous devrions « demander » à Windows : quelle application sait comment imprimer, par exemple, un fichier PDF?
Ou encore mieux, nous devrions dire à Windows : Voici un fichier PDF, envoie-le à l'application associée à l'impression des fichiers PDF.

Ouvrez l'explorateur Windows, accédez à un répertoire contenant des fichiers imprimables.
Pour la plupart des types de fichiers sur votre système, lorsque vous cliquez droit sur un fichier dans l'explorateur de Windows, vous verrez la commande « Imprimer ».
L'exécution de la commande shell imprimer, entraînera l'envoi du fichier à l'imprimante par défaut. Eh bien, c'est exactement ce que nous voulons: pour un type de fichier, appeler une méthode qui envoie le fichier à l'application associée a son impression.

La fonction que nous utiliserons est la fonction API ShellExecute.

ShellExecute

À sa plus simple expression, ShellExecute permet par programmation de lancer n'importe quelle application ou ouvrir un fichier qui est installé sur l'ordinateur de l'utilisateur.

Cependant, ShellExecute peut faire bien plus encore. Il peut être utilisé pour lancer une application, ouvrir l'Explorateur Windows, ouvrir un début de recherche dans un répertoire spécifié, et ce qui est plus important pour nous maintenant : imprimer le fichier spécifié.

Print

Voici comment imprimer un fichier en utilisant la fonction ShellExecute:

ShellExecute(Handle, 'print', PChar('c:document.doc'), nil, nil, SW_HIDE);

Notez le second paramètre: « print ». Un document « document.doc » situé à la racine du lecteur C:\ à l'aide de l'appel ci-dessus, sera envoyé à l'imprimante par défaut de Windows. ShellExecute utilise toujours l'imprimante par défaut pour l'action «print».

Et si vous avez besoin d'imprimer sur une imprimante différente, ou bien si vous souhaitez permettre à l'utilisateur de changer l'imprimante ? Regardons PrintTo

PrintTo

Note: Certaines applications ne supportent pas l'action « printto ».

PrintTo peut être utilisé pour spécifier le nom de l'imprimante utilisée pour imprimer. L'imprimante est déterminée par les 3 paramètres: printer name, drive name and port.

Avant de commencer : la variable globale (type TPrinter) disponible dans tous les programmes Delphi peut être utilisée pour gérer toute impression exécutée par une application.

TPrinter est définie dans l'unité «Printers » et ShellExecute est définie dans l'unité « shellapi ».

Dans la clause uses ajouter shellapi et printers.
Déposez un TComboBox sur un formulaire, nommé le « cboPrinter ».
Mettre sa propriété Style en csDropDownLidt.
Mettre les deux lignes suivantes dans la propriété OnCreate de la forme :

//Imprimantes disponibles dans la liste déroulante Combobox
cboPrinter.Items.Assign (imprimante.Imprimantes) ;

//Pré sélection de l'imprimante par défaut
cboPrinter.ItemIndex: = imprimante.PrinterIndex ;

Maintenant, voici la Procédure que vous pouvez utiliser pour imprimer n'importe quel type de document sur une imprimante spécifiée :

procedure PrintDocument(const documentToPrint : string) ;
var
printCommand : string;
printerInfo : string;
Device, Driver, Port: array[0..255] of Char;
hDeviceMode: THandle;
begin
    // Si l'imprimante sélectionnée est celle par défaut, on utilise la fonction « Print »
    if Printer.PrinterIndex = cboPrinter.ItemIndex then
    begin
        printCommand := 'print';
        printerInfo := '';
    end
        //Sinon on utilise la fonction « PrintTo »
    else
    begin
        printCommand := 'printto';
        Printer.PrinterIndex := cboPrinter.ItemIndex;
        Printer.GetPrinter(Device, Driver, Port, hDeviceMode) ;
        printerInfo := Format('"%s" "%s" "%s"', [Device, Driver, Port]) ;
    end;
    ShellExecute(Application.Handle, PChar(printCommand), PChar(documentToPrint), PChar(printerInfo), nil, SW_HIDE) ;
end;

A noter également : certains types de documents n'ont pas d'application associée à l'impression, et d'autres n'ont pas l'action de « PrintTo » spécifiée.

A voir également
Ce document intitulé « Imprimer tout type de document (pdf, doc, xls, html, rtf, docx) par programmation » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous