I. Préambule▲
Une question qui revient souvent sur les forums concerne la méthode à utiliser pour afficher et imprimer des PDF. La méthode la plus simple et la plus souvent utilisée est d'insérer le composant installé avec Adobe Acrobat Reader.
II. Prérequis ▲
Il est nécessaire d'avoir Acrobat Reader installé sur la machine de développement ainsi que sur les machines clientes.
III. Exemple d'utilisation du composant d'Acrobat Reader dans une application C# ▲
III-A. Afficher un PDF dans une fenêtre d'un projet Windows Form en C#▲
- Pour commencer, nous allons créer un nouveau projet Application Windows Form en C#. Je ne reviendrai pas sur la méthode de création d'un projet que je suppose connue. La création de ce projet nous donne un projet contenant une fenêtre principale vide pour l'instant :
Le but de cet article est d'afficher un document PDF sur cette Form.
- Dans le mode Design de la fenêtre, il faut dans la boite à outils proposant les différents composants pouvant être insérés dans la fenêtre, cliquer avec le bouton droit de la souris et sélectionner le sous-menu Choisir les éléments… dans le menu contextuel qui apparaît. Celui-ci ouvre la fenêtre suivante :
- Dans cette fenêtre, on clique sur le deuxième onglet intitulé Composant COM et on coche la case correspondant au composant Adobe PDF Reader.Nous devrions donc obtenir ceci :
- L'action de valider cette fenêtre va rajouter le composant dans la boite à outils :
- Pour ajouter ce composant, il suffit de le sélectionner et de le glisser sur la fenêtre. On donnera les dimensions voulues à celui-ci et on donnera éventuellement les valeurs nécessaires à la propriété Anchor pour gérer le redimensionnement de la fenêtre si celui-ci est autorisé. Nous devrions obtenir une fenêtre ressemblant à ceci : L'ajout du composant à notre fenêtre a aussi rajouté automatiquement deux références supplémentaires à celles déjà présentes dans notre projet comme le montre la capture suivante de l'explorateur de solutions :
- Pour ouvrir un document PDF et l'afficher dans le composant de notre fenêtre, nous allons rajouter à celle-ci un bouton Ouvrir un document. Le code de l'événement Click de notre bouton sera le suivant : Appel de OpenFileDialogSélectionnez
OpenFileDialog OpenDial
=
new
OpenFileDialog
(
);
OpenDial.
Filter=
"Fichiers PDF|*.pdf"
;
OpenDial.
DefaultExt=
"*.pdf"
;
OpenDial.
Multiselect=
false
;
OpenDial.
CheckFileExists=
true
;
OpenDial.
InitialDirectory=
Application.
StartupPath;
if
(
OpenDial.
ShowDialog
(
)==
System.
Windows.
Forms.
DialogResult.
OK){
axAcroPDF1.
LoadFile
(
OpenDial.
FileName);
}
- Ce code permettra d'ouvrir une fenêtre de sélection pour ouvrir un fichier PDF se trouvant sur disque et exécutera la méthode LoadFile de notre composant Adobe PDF Reader. Cette méthode prend comme paramètre le chemin complet du fichier à ouvrir. Lors de l'exécution de notre projet et après avoir sélectionné un fichier PDF à ouvrir, nous devrions obtenir un résultat ressemblant à ceci :
III-B. Imprimer le document PDF à partir du contrôle ▲
Plusieurs méthodes du contrôle d'Adobe Acrobat Reader permettent l'impression d'un document PFD chargé dans celui-ci.
III-B-1. La méthode printWithDialog▲
C'est la méthode la plus complète, car elle permet d'afficher la boite de dialogue d'impression d'Acrobat Reader et donc d'avoir accès à toutes les options d'impression.
Pour utiliser cette méthode, il suffit de créer un bouton dans la fenêtre et de faire appel à celle-ci dans l'événement associé à ce bouton :
private
void
btnImpressionDialog_Click
(
object
sender,
EventArgs e)
{
axAcroPDF1.
printWithDialog
(
);
}
Cette méthode fait appel à la boite de dialogue suivante :
Celle-ci permet de régler différents paramètres :
- les propriétés de l'imprimante sélectionnée pour l'impression (via la boite de dialogue de l'imprimante) ;
- les pages à imprimer (l'ensemble du document, seulement une partie…) ;
- la gestion du dimensionnement des pages du document lors de l'impression (plusieurs pages sur une même feuille, impression pour créer un livret…) ;
- l'impression en nuances de gris ;
- l'impression en mode portrait ou paysage.
Bref vous avez le contrôle sur le résultat de l'impression de votre document.
Cette boite de dialogue présente un aperçu avant impression d'une page du document permettant de voir directement le résultat avec les paramètres actuellement sélectionnés.
III-B-2. La méthode printPages▲
Cette méthode permet d'imprimer une suite de pages. Elle prend donc deux paramètres :
- le numéro de la première page à imprimer ;
- le numéro de la dernière page à imprimer.
Exemple d'utilisation de la méthode :
axAcroPDF1.
printPages
(
1
,
5
);
L'appel à cette méthode imprimera les cinq premières pages du document chargé dans le contrôle.
III-B-3. La méthode printPagesFit▲
Cette méthode permet d'imprimer une suite de pages comme la précédente et de permettre de modifier l'échelle de certaines pages en fonction de la taille des feuilles sélectionnées pour l'impression.
Exemple : la taille des pages d'un PDF créé à partir de pages de format A4 serait modifiée si l'impression se faisait sur des pages A3.
Cette méthode prend donc trois paramètres :
- le numéro de la première page à imprimer ;
- le numéro de la dernière page à imprimer ;
- le paramètre shrinkToFit qui est un booléen : si sa valeur est à true, l'échelle des pages du document qui sont plus grandes sera diminuée pour être adaptée au format sélectionné pour l'impression.
Exemple d'utilisation de la méthode :
axAcroPDF1.
printPagesFit
(
1
,
2
,
true
);
III-B-4. La méthode printAll▲
Cette méthode permet d'imprimer l'ensemble du document. Celle-ci ne prend aucun paramètre.
Exemple d'utilisation de la méthode :
axAcroPDF1.
printAll
(
);
Nous avons fait le tour des méthodes du contrôle fourni par Adobe Acrobat Reader pour permettre l'affichage et l'impression de documents PDF facilement à partir d'un projet C#. Il va de soi que cette technique est transposable à d'autres langages qui utilisent ou non la technologie .Net vu qu'il s'agit ici d'un contrôle COM.
IV. Remerciements ▲
Je remercie l'équipe de Developpez.com de me permettre la mise en ligne de cet article ainsi que Claude LELOUP pour la relecture orthographique de celui-ci.