Imprimer des fichiers PDF C#

De nombreuses entreprises réduisent considérablement l’utilisation du papier. Cependant, il existe certains scénarios où l’impression est importante. Par exemple, un système peut contenir des détails de commande en ligne au format PDF. Ils doivent imprimer un PDF lors de l’envoi d’une commande en ligne pour livraison. Ils traitent les éléments à grande échelle, de sorte que l’impression manuelle de chaque document peut être une tâche ardue. Aspose.PDF for .NET API, en plus de nombreuses autres fonctionnalités de manipulation et de conversion de fichiers, prend en charge l’impression efficace de fichiers PDF. Explorons les cas d’utilisation suivants liés à l’impression de fichiers PDF dans des applications .NET à l’aide de C# :

Imprimer un fichier PDF avec C#

L’impression de fichiers PDF peut être automatisée dans vos applications .NET à l’aide de C# ou VB.net. Vous pouvez imprimer des fichiers PDF en suivant les étapes simples ci-dessous :

  1. Créer un objet de la classe PdfViewer
  2. Charger le document PDF d’entrée
  3. Imprimer le fichier PDF

L’extrait de code ci-dessous montre comment imprimer un fichier PDF à l’aide de C# :

//Créer un objet PdfViewer
PdfViewer viewer = new PdfViewer();
//Ouvrir le fichier PDF d'entrée
viewer.BindPdf(dataDir + "Test.pdf");
//Imprimer le document PDF
viewer.PrintDocument();
//Fermer le fichier PDF
viewer.Close();

Imprimer plusieurs fichiers PDF avec C#

Si vous avez besoin d’imprimer plusieurs fichiers en raison de la nature de votre entreprise, la fonctionnalité est déjà prise en charge par Aspose.PDF for .NET. L’impression de plusieurs fichiers PDF, un par un avec l’extrait de code ci-dessus, peut être un peu lente. Par conséquent, allons plus loin dans l’impression PDF pour faciliter le processus. Ici, nous utiliserons List tout en ajoutant le nom de chaque fichier PDF à cette liste. Les étapes suivantes expliquent comment nous allons imprimer plusieurs fichiers PDF :

  1. Initialiser une liste de type String
  2. Ajouter des fichiers PDF à la liste
  3. Charger le fichier PDF d’entrée
  4. Imprimer plusieurs fichiers PDF

L’extrait de code montre comment imprimer plusieurs fichiers PDF à l’aide de C# :

var files = new List<string>();
files.Add(dataDir + "First.pdf");
files.Add(dataDir + "Second.pdf");

foreach (String file in files)
{
    //Créer un objet PdfViewer
    PdfViewer viewer = new PdfViewer();
    //Ouvrir le fichier PDF d'entrée
    viewer.BindPdf(file);
    //Imprimer le document PDF
    viewer.PrintDocument();
    //Fermer le fichier PDF
    viewer.Close();
}

Imprimer des pages spécifiques de PDF avec C#

La fonction d’impression de pages spécifiques de documents PDF est disponible dans l’API. Nous allons considérer un exemple qui inclut l’impression de plusieurs plages de pages. Vous devez spécifier les numéros de page de et à comme expliqué dans les étapes ci-dessous :

  • Définir les chemins d’entrée et de sortie du fichier
  • Définir l’impression de pages spécifiques en définissant une plage
  • Spécifier les paramètres d’impression
  • Imprimer les pages comme spécifié précédemment

L’extrait de code ci-dessous montre comment imprimer des pages spécifiques du document à l’aide de C# :

string inPdf = dataDir + "Test.pdf";
string output = dataDir;
IList<PrintingJobSettings> printingJobs = new List<PrintingJobSettings>();
PrintingJobSettings printingJob1 = new PrintingJobSettings();
printingJob1.FromPage = 2;
printingJob1.ToPage = 3;
printingJobs.Add(printingJob1);

PrintingJobSettings printingJob2 = new PrintingJobSettings();
printingJob2.FromPage = 5;
printingJob2.ToPage = 7;
printingJobs.Add(printingJob2);

{
    for (var printingJobIndex = 0; printingJobIndex < printingJobs.Count; printingJobIndex++)
    {
        System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
        System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
        ps.PrinterName = "Microsoft Print to PDF";
        ps.PrintRange = System.Drawing.Printing.PrintRange.SomePages;
        ps.FromPage = printingJobs[printingJobIndex].FromPage;
        ps.ToPage = printingJobs[printingJobIndex].ToPage;
        System.Console.WriteLine(ps.FromPage);
        System.Console.WriteLine(ps.ToPage);
        System.Console.WriteLine(printingJobIndex);
        using (var theViewer = new Aspose.Pdf.Facades.PdfViewer())
        {
            // Le code d'impression du document va ici
            // Imprimer le document à l'aide des paramètres de l'imprimante et de la page                    
            theViewer.BindPdf(inPdf);
            theViewer.AutoResize = true;
            theViewer.AutoRotate = true;
            theViewer.PrintPageDialog = false;
            theViewer.PrintDocumentWithSettings(pgs, ps);
            theViewer.Close();
        }
    }
}

Imprimer un fichier PDF sécurisé avec C#

Un fichier PDF peut être sécurisé et protégé par un mot de passe. Cependant, le mot de passe peut être de deux types, à savoir le mot de passe utilisateur et le mot de passe propriétaire. Les fichiers PDF sécurisés avec le mot de passe utilisateur ont besoin d’un mot de passe pour ouvrir et afficher le fichier PDF crypté. Par contre, le mot de passe propriétaire est nécessaire pour modifier le contenu du fichier PDF sécurisé et protégé par mot de passe. Les étapes suivantes expliquent l’impression d’un PDF sécurisé :

  1. Charger un PDF sécurisé avec mot de passe
  2. Créer un objet PdfViewer
  3. Imprimer le fichier PDF sécurisé

L’extrait de code suivant montre comment imprimer un fichier PDF sécurisé à l’aide de C# :

//Charger un document PDF sécurisé tout en spécifiant le mot de passe utilisateur ou propriétaire
Document document = new Document(dataDir + "Password.pdf" , "userORowner");
//Créer un objet PdfViewer
PdfViewer viewer = new PdfViewer();
//Ouvrir le fichier PDF d'entrée
viewer.BindPdf(document);
//Imprimer le document PDF
viewer.PrintDocument();
//Fermer le fichier PDF
viewer.Close();

Imprimer un PDF sur un bac à papier spécifique d’une imprimante avec C#

Vous pouvez imprimer un PDF sur un bac à papier spécifique avec Aspose.PDF for .NET. Par exemple, vous souhaiterez peut-être imprimer un PDF contenant de nombreuses photos dans un autre bac à papier et un fichier PDF textuel dans un autre bac à papier. Suivez les étapes ci-dessous pour configurer le bac de sortie ou le bac pour l’impression de fichiers PDF :

  1. Charger le fichier PDF d’entrée
  2. Définir les attributs pour l’impression
  3. Spécifiez PageSettings et PaperSource
  4. Appelez la méthode PrintDocumentWithSettings

Il est à noter ici que vous pouvez changer le nom de l’imprimante. Ici, nous utiliserons Microsoft Print to PDF, à titre d’exemple. L’extrait de code suivant suit ces étapes et montre comment imprimer un document dans un bac à papier ou un bac spécifique d’une imprimante avec C# :

Document doc = new Document("Test.pdf");
PdfViewer viewer = new PdfViewer();
viewer.BindPdf(doc);
viewer.PrinterJobName = System.IO.Path.GetFileName(doc.FileName);
viewer.Resolution = 110;
// Définir les attributs pour l'impression
viewer.AutoResize = true; // Print the file with adjusted size
viewer.AutoRotate = false; // Print the file with adjusted rotation
viewer.PrintPageDialog = false; // Do not produce the page number dialog when printing
viewer.RenderingOptions.UseNewImagingEngine = true;
// Créer des objets pour les paramètres d'imprimante et de page et PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Définir le nom de l'imprimante
ps.PrinterName = "Microsoft Print to PDF";
pgs.PaperSize = new System.Drawing.Printing.PaperSize(paperTypeName, paperWidth, paperHeight);
pgs.Margins = new System.Drawing.Printing.Margins(margins.Left, margins.Right, margins.Top, margins.Bottom);
pgs.PaperSource = GetPaperSource(printerName, trayName);
// Imprimer le document à l'aide des paramètres de l'imprimante et de la page
viewer.PrintDocumentWithSettings(pgs, ps);

///<summary>
/// Renvoie l'objet PaperSource pour l'imprimante et le nom de bac fournis.
///</summary>
///<param name="printerName"></param>
///<param name="trayName"></param>
///<returns></returns>
public static System.Drawing.Printing.PaperSource GetPaperSource(string printerName, string trayName)
{
    System.Drawing.Printing.PaperSource ps = null;
    System.Drawing.Printing.PrintDocument prtDoc = new System.Drawing.Printing.PrintDocument();
    prtDoc.PrinterSettings.PrinterName = printerName;
    for (int i = 0; i < prtDoc.PrinterSettings.PaperSources.Count; i++)
    {
        if (prtDoc.PrinterSettings.PaperSources[i].SourceName.ToLower().Equals(trayName.ToLower()))
        {
            ps = prtDoc.PrinterSettings.PaperSources[i];
            break;
        }
    }
    return ps;
}

Impression d’une plage de pages sur différentes sources de papier à l’aide de C#

Dans certains cas, vous devrez peut-être imprimer différentes pages d’un document PDF dans différents bacs à papier ou corbeilles. Par exemple, une source de papier différente pour la page de garde et différente pour les autres pages. Vous pouvez certainement suivre les étapes ci-dessous pour imprimer des plages de pages sur différentes sources de papier dans le même travail d’impression :

  1. Initialiser un objet de la classe PdfViewer
  2. Utiliser le délégué du gestionnaire d’événements PdfQueryPageSettings
  3. Définir les paramètres de page et d’imprimante
  4. Appelez la méthode PrintDocumentWithSettings

L’extrait de code suivant montre comment suivre ces étapes et imprimer différentes plages de pages sur différentes sources de papier ou bacs à l’aide de C# :

Aspose.Pdf.Facades.PdfViewer pdfv = new Aspose.Pdf.Facades.PdfViewer();

pdfv.PdfQueryPageSettings += PdfvOnPdfQueryPageSettings;

System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
System.Drawing.Printing.PrinterSettings prin = new System.Drawing.Printing.PrinterSettings();

pdfv.BindPdf(dataDir + "Print-PageRange.pdf");
prin.PrinterName = "HP LaserJet M9050 MFP PCL6";
prin.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);

Aspose.Pdf.Facades.PdfPageEditor pageEditor = new Aspose.Pdf.Facades.PdfPageEditor();
pageEditor.BindPdf(dataDir + "input.pdf");

pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
pgs.PaperSize = prin.DefaultPageSettings.PaperSize;

pdfv.PrintDocumentWithSettings(pgs, prin);
pdfv.Close();

private static void PdfvOnPdfQueryPageSettings(object sender, System.Drawing.Printing.QueryPageSettingsEventArgs queryPageSettingsEventArgs, PdfPrintPageInfo currentPageInfo)
{
    bool isOdd = currentPageInfo.PageNumber % 2 != 0;

    System.Drawing.Printing.PrinterSettings.PaperSourceCollection paperSources = queryPageSettingsEventArgs.PageSettings.PrinterSettings.PaperSources;

    if (isOdd)
        queryPageSettingsEventArgs.PageSettings.PaperSource = paperSources[0];
    else
        queryPageSettingsEventArgs.PageSettings.PaperSource = paperSources[1];
}

Vérifier l’état du travail d’impression lors de l’impression d’un PDF avec C#

Vous pouvez imprimer des fichiers PDF sur différentes imprimantes. Par exemple, Microsoft Print to PDF, Microsoft XPS Document Writer ou toute imprimante physique. Cependant, l’impression peut prendre beaucoup de temps pour les documents PDF volumineux ou l’impression peut échouer pour une raison quelconque. Par conséquent, l’API propose une fonctionnalité qui vous permet de vérifier l’état des travaux d’impression en procédant comme suit :

  1. Charger le fichier PDF d’entrée
  2. Spécifier les paramètres de la page
  3. Définir le nom de l’imprimante
  4. Imprimer un document PDF avec PrintDocumentWithSettings

L’extrait de code ci-dessous montre comment vérifier l’état du travail d’impression ou la progression de l’impression du PDF à l’aide de C# :

// Instancier l'objet PdfViewer
PdfViewer viewer = new PdfViewer();

// Lier le fichier PDF source
viewer.BindPdf(dataDir + "Sample Document with Bookmark.pdf");
viewer.AutoResize = true;

// Masquer la boîte de dialogue d'impression
viewer.PrintPageDialog = false;

// Créer un objet Paramètres de l'imprimante
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
System.Drawing.Printing.PrintDocument prtdoc = new System.Drawing.Printing.PrintDocument();

// Spécifiez le nom de l'imprimante
//ps.PrinterName = "Microsoft XPS Document Writer" ;
ps.PrinterName = "Microsoft Print to PDF";

// Nom de l'impression résultante
//ps.PrintFileName = "ResultantPrintout.xps" ;
ps.PrintFileName = "ResultantPrintout.pdf";

// Imprimer la sortie dans un fichier
ps.PrintToFile = true;
ps.FromPage = 1;
ps.ToPage = 2;
ps.PrintRange = System.Drawing.Printing.PrintRange.SomePages;

// Spécifiez la taille de la page d'impression
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
ps.DefaultPageSettings.PaperSize = pgs.PaperSize;
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);

// Imprimer le document avec les paramètres spécifiés ci-dessus
viewer.PrintDocumentWithSettings(pgs, ps);

// Vérifier l'état de l'impression
if (viewer.PrintStatus != null)
{
    // Une exception a été levée
    Exception ex = viewer.PrintStatus as Exception;
    if (ex != null)
    {
        // Obtenir un message d'exception
    }
}
else
{
    // Aucune erreur n'a été trouvée. Le travail d'impression s'est terminé avec succès
    Console.WriteLine("printing completed without any issue..");
}

En conséquence, cet extrait de code imprime sur la console de l’application .NET l’état d’impression du fichier PDF :

C# Imprimer Pdf

Conclusion

En résumé, nous avons appris différentes approches et cas d’utilisation d’impression de fichiers PDF sécurisés et non sécurisés par mot de passe avec C# ou VB NET dans vos applications de programmation. De plus, nous avons exploré l’impression de documents PDF entiers. De même, nous avons appris à imprimer certaines plages de pages par des bacs de page, des bacs ou des sources de papier spécifiques. De plus, nous avons également vérifié comment surveiller l’état de l’impression ou la progression de l’impression des documents à l’aide de C#.

Voir également