Travailler avec l'impression PDF - Facades
Impression d’un fichier PDF sur l’imprimante par défaut en utilisant les paramètres de l’imprimante et de la page
Tout d’abord, le document est converti en image puis imprimé sur l’imprimante. Nous créons une instance de la classe PdfViewer qui vous permet d’imprimer un fichier PDF sur l’imprimante par défaut, en utilisant la méthode BindPdf pour lier le document à celle-ci, et d’effectuer certains réglages. Dans notre exemple, nous utilisons le format A4, orientation portrait. Dans les printerSettings, nous indiquons tout d’abord le nom de l’imprimante sur laquelle nous imprimons. Sinon, il imprimera sur l’imprimante par défaut. Ensuite, nous indiquons le nombre de copies dont nous avons besoin.
public static void PrintingPDFFile()
{
// Créer un objet PdfViewer
PdfViewer viewer = new PdfViewer();
// Ouvrir le fichier PDF d'entrée
viewer.BindPdf(_dataDir + "sample.pdf");
// Définir les attributs pour l'impression
viewer.AutoResize = true; // Imprimer le fichier avec une taille ajustée
viewer.AutoRotate = true; // Imprimer le fichier avec une rotation ajustée
viewer.PrintPageDialog = false; // Ne pas afficher la boîte de dialogue du numéro de page lors de l'impression
// Créer des objets pour les paramètres de l'imprimante et de la page et PrintDocument
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();
// Définir le nom de l'imprimante
ps.PrinterName = prtdoc.PrinterSettings.PrinterName;
// Définir la PageSize (si nécessaire)
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
// Définir les PageMargins (si nécessaire)
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Imprimer le document en utilisant les paramètres de l'imprimante et de la page
viewer.PrintDocumentWithSettings(pgs, ps);
// Fermer le fichier PDF après l'impression
viewer.Close();
}
Afin d’afficher une boîte de dialogue d’impression, essayez d’utiliser l’extrait de code suivant :
public static void PrintingPDFDisplayPrintDialog()
{
// Créer un objet PdfViewer
PdfViewer viewer = new PdfViewer();
// Ouvrir le fichier PDF d'entrée
viewer.BindPdf(_dataDir + "sample.pdf");
// Définir les attributs pour l'impression
viewer.AutoResize = true; // Imprimer le fichier avec une taille ajustée
viewer.AutoRotate = true; // Imprimer le fichier avec une rotation ajustée
// Créer des objets pour les paramètres de l'imprimante et de la page et PrintDocument
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings
{
// Définir la taille de la page (si nécessaire)
PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169),
// Définir les marges de la page (si nécessaire)
Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0)
};
System.Windows.Forms.PrintDialog printDialog = new System.Windows.Forms.PrintDialog();
if (printDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
// Le code d'impression du document va ici
// Imprimer le document en utilisant les paramètres de l'imprimante et de la page
System.Drawing.Printing.PrinterSettings ps = printDialog.PrinterSettings;
viewer.PrintDocumentWithSettings(pgs, ps);
}
// Fermer le fichier PDF après l'impression
viewer.Close();
}
Imprimer un PDF sur une Imprimante Virtuelle
Il existe des imprimantes qui impriment sur un fichier. Nous définissons le nom de l’imprimante virtuelle et, par analogie avec l’exemple précédent, nous effectuons les réglages.
public static void PrintingPDFToSoftPrinter()
{
// Créer un objet PdfViewer
PdfViewer viewer = new PdfViewer();
// Ouvrir le fichier PDF d'entrée
viewer.BindPdf(_dataDir + "sample.pdf");
// Définir les attributs pour l'impression
viewer.AutoResize = true; // Imprimer le fichier avec la taille ajustée
viewer.AutoRotate = true; // Imprimer le fichier avec la rotation ajustée
viewer.PrintPageDialog = false; // Ne pas afficher la boîte de dialogue de numéro de page lors de l'impression
viewer.PrintAsImage = false;
// Créer des objets pour les paramètres de l'imprimante et de la 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 = "HP Universal Printing PS (v7.0.0)";
// Ou définir l'imprimante PDF
//ps.PrinterName = "Adobe PDF";
// Définir la taille de la page (si nécessaire)
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
// Définir les marges de la page (si nécessaire)
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Imprimer le document en utilisant les paramètres de l'imprimante et de la page
viewer.PrintDocumentWithSettings(pgs, ps);
// Fermer le fichier PDF après l'impression
viewer.Close();
}
Masquer le Dialogue d’Impression
Aspose.PDF pour .NET vous permet de masquer le dialogue d’impression. Pour cela, utilisez la méthode PrintPageDialog.
L’extrait de code suivant vous montre comment masquer le dialogue d’impression.
public static void PrintingPDFHidePrintDialog()
{
// Créer un objet PdfViewer
PdfViewer viewer = new PdfViewer();
// Ouvrir le fichier PDF d'entrée
viewer.BindPdf(_dataDir + "sample.pdf");
// Définir les attributs pour l'impression
viewer.AutoResize = true; // Imprimer le fichier avec une taille ajustée
viewer.AutoRotate = true; // Imprimer le fichier avec une rotation ajustée
viewer.PrintPageDialog = false; // Ne pas produire le dialogue de numéro de page lors de l'impression
// Créer des objets pour les paramètres de l'imprimante et de la 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 XPS/PDF
ps.PrinterName = "OneNote pour Windows 10";
// Définir la taille de la page (si nécessaire)
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
// Définir les marges de la page (si nécessaire)
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Imprimer le document en utilisant les paramètres de l'imprimante et de la page
viewer.PrintDocumentWithSettings(pgs, ps);
// Fermer le fichier PDF après l'impression
viewer.Close();
}
Impression d’un fichier PDF en couleur au format XPS en niveaux de gris
Un document PDF en couleur peut être imprimé sur une imprimante XPS en niveaux de gris, en utilisant PdfViewer. Pour cela, vous devez utiliser la propriété PdfViewer.PrintAsGrayscale et la définir sur true. Le fragment de code suivant démontre l’implémentation de la propriété PdfViewer.PrintAsGrayscale.
public static void PrintingPDFasGrayscale()
{
// Créer un objet PdfViewer
PdfViewer viewer = new PdfViewer();
// Ouvrir le fichier PDF d'entrée
viewer.BindPdf(_dataDir + "sample.pdf");
// Définir les attributs pour l'impression
viewer.AutoResize = true; // Imprimer le fichier avec une taille ajustée
viewer.AutoRotate = true; // Imprimer le fichier avec une rotation ajustée
viewer.PrintPageDialog = false; // Ne pas produire la boîte de dialogue du numéro de page lors de l'impression
viewer.PrintAsGrayscale = false;
// Créer des objets pour les paramètres de l'imprimante et de la 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 XPS/PDF
ps.PrinterName = "OneNote pour Windows 10";
// Définir la taille de la page (si nécessaire)
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
// Définir les marges de la page (si nécessaire)
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Imprimer le document en utilisant les paramètres de l'imprimante et de la page
viewer.PrintDocumentWithSettings(pgs, ps);
// Fermer le fichier PDF après l'impression
viewer.Close();
}
Conversion de PDF en PostScript
La classe PdfViewer offre la possibilité d’imprimer des documents PDF et, avec l’aide de cette classe, nous pouvons également convertir des fichiers PDF au format PostScript. Pour convertir un fichier PDF en PostScript, installez d’abord une imprimante PS et imprimez simplement sur un fichier avec l’aide de PdfViewer.
L’exemple de code suivant vous montre comment imprimer et convertir un PDF au format PostScript.
public static void PrintingPDFToPostScript()
{
// Créer un objet PdfViewer
PdfViewer viewer = new PdfViewer();
// Ouvrir le fichier PDF d'entrée
viewer.BindPdf(_dataDir + "sample.pdf");
// Définir les attributs d'impression
viewer.AutoResize = true; // Imprimer le fichier avec une taille ajustée
viewer.AutoRotate = true; // Imprimer le fichier avec une rotation ajustée
viewer.PrintPageDialog = false; // Ne pas produire la boîte de dialogue du numéro de page lors de l'impression
viewer.PrintAsImage = false;
// Créer des objets pour les paramètres de l'imprimante et de la 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 XPS/PDF
ps.PrinterName = "HP Universal Printing PS (v7.0.0)";
// Définir le nom du fichier de sortie et l'attribut PrintToFile
ps.PrintFileName = _dataDir + "PdfToPostScript_out.ps";
ps.PrintToFile = true;
// Définir la taille de la page (si nécessaire)
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
// Définir les marges de la page (si nécessaire)
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Imprimer le document en utilisant les paramètres de l'imprimante et de la page
viewer.PrintDocumentWithSettings(pgs, ps);
// Fermer le fichier PDF après l'impression
viewer.Close();
}
Vérification du statut du travail d’impression
Un fichier PDF peut être imprimé sur une imprimante physique ainsi que sur le Microsoft XPS Document Writer, sans afficher de boîte de dialogue d’impression, en utilisant la classe PdfViewer. Lors de l’impression de fichiers PDF volumineux, le processus peut prendre beaucoup de temps, de sorte que l’utilisateur peut ne pas être certain si le processus d’impression est terminé ou si un problème est survenu. Pour déterminer le statut d’un travail d’impression, utilisez la propriété PrintStatus. L’extrait de code suivant vous montre comment imprimer le fichier PDF vers un fichier XPS et obtenir le statut d’impression.
public static void CheckingPrintJobStatus()
{
// Créer un objet PdfViewer
PdfViewer viewer = new PdfViewer();
// Ouvrir le fichier PDF d'entrée
viewer.BindPdf(_dataDir + "sample1.pdf");
// Définir les attributs pour l'impression
viewer.AutoResize = true; // Imprimer le fichier avec une taille ajustée
viewer.AutoRotate = true; // Imprimer le fichier avec une rotation ajustée
viewer.PrintPageDialog = false; // Ne pas produire la boîte de dialogue de numéro de page lors de l'impression
viewer.PrintAsImage = false;
// Créer des objets pour les paramètres de l'imprimante et de la 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 XPS/PDF
ps.PrinterName = "HP Universal Printing PS (v7.0.0)";
// Définir le nom de fichier de sortie et l'attribut PrintToFile
ps.PrintFileName = _dataDir + "PdfToPostScript_out.ps";
ps.PrintToFile = true;
// Définir PageSize (si nécessaire)
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
// Définir PageMargins (si nécessaire)
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Imprimer le document en utilisant les paramètres de l'imprimante et de la page
viewer.PrintDocumentWithSettings(pgs, ps);
// Vérifier le statut de l'impression
if (viewer.PrintStatus != null && viewer.PrintStatus is Exception ex)
{
Console.WriteLine(ex.Message);
}
else
{
// Aucune erreur n'a été trouvée. Le travail d'impression s'est terminé avec succès
Console.WriteLine("Impression terminée sans aucun problème..");
}
// Fermer le fichier PDF après impression
viewer.Close();
}
struct PrintingJobSettings
{
public int ToPage { get; set; }
public int FromPage { get; set; }
public string OutputFile { get; set; }
public System.Drawing.Printing.Duplex Mode { get; set; }
}
Impression des pages en mode Simplex et Duplex
Dans un travail d’impression particulier, les pages d’un document PDF peuvent être imprimées soit en mode Duplex, soit en mode Simplex, mais vous ne pouvez pas imprimer certaines pages en simplex et d’autres pages en duplex dans un même travail d’impression. Cependant, pour répondre à cette exigence, différents intervalles de pages et un objet PrintingJobSettings peuvent être utilisés. L’extrait de code suivant montre comment imprimer certaines pages d’un fichier PDF en mode Simplex et d’autres pages en mode Duplex.
public static void PrintingPagesInSimplexAndDuplexMode()
{
int printingJobIndex = 0;
string inPdf = _dataDir + "sample-8page.pdf";
string output = _dataDir;
IList<PrintingJobSettings> printingJobs = new List<PrintingJobSettings>();
PrintingJobSettings printingJob1 = new PrintingJobSettings
{
FromPage = 1,
ToPage = 3,
OutputFile = output + "sample_1_3.xps",
Mode = Duplex.Default
};
printingJobs.Add(printingJob1);
PrintingJobSettings printingJob2 = new PrintingJobSettings
{
FromPage = 4,
ToPage = 6,
OutputFile = output + "sample_4_6.xps",
Mode = Duplex.Simplex
};
printingJobs.Add(printingJob2);
PrintingJobSettings printingJob3 = new PrintingJobSettings
{
FromPage = 7,
ToPage = 7,
OutputFile = output + "sample_7.xps",
Mode = Duplex.Default
};
printingJobs.Add(printingJob3);
PdfViewer viewer = new PdfViewer();
viewer.BindPdf(inPdf);
viewer.AutoResize = true;
viewer.AutoRotate = true;
viewer.PrintPageDialog = false;
PrinterSettings ps = new PrinterSettings();
PageSettings pgs = new PageSettings();
ps.PrinterName = "Microsoft XPS Document Writer";
ps.PrintFileName = System.IO.Path.GetFullPath(printingJobs[printingJobIndex].OutputFile);
ps.PrintToFile = true;
ps.FromPage = printingJobs[printingJobIndex].FromPage;
ps.ToPage = printingJobs[printingJobIndex].ToPage;
ps.Duplex = printingJobs[printingJobIndex].Mode;
ps.PrintRange = PrintRange.SomePages;
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);
viewer.EndPrint += (sender, args) =>
{
if (++printingJobIndex < printingJobs.Count)
{
ps.PrintFileName = System.IO.Path.GetFullPath(printingJobs[printingJobIndex].OutputFile);
ps.FromPage = printingJobs[printingJobIndex].FromPage;
ps.ToPage = printingJobs[printingJobIndex].ToPage;
ps.Duplex = printingJobs[printingJobIndex].Mode;
viewer.PrintDocumentWithSettings(pgs, ps);
}
};
viewer.PrintDocumentWithSettings(pgs, ps);
}