Cette page peut contenir du texte traduit automatiquement.
Rendre et imprimer des documents PDF en C# et VB.NET
Tout le monde pense à Adobe Reader lorsqu'il s'agit de lire des documents PDF. Mais que faire si vous êtes développeur de logiciels et souhaitez afficher des documents PDF dans votre application? Vous ne souhaitez pas demander à l'utilisateur de configurer Adobe Reader et d'y ouvrir le document.
Vous devrez peut-être également mettre en œuvre d’autres exigences liées au PDF. Par exemple, imprimez des documents PDF. Ou générez des vignettes pour les documents PDF téléchargés. Ou prenez en charge l'édition de PDF dans votre application de bureau ou Web.
Tout ce dont vous avez besoin est une bibliothèque PDF capable de restituer et d'imprimer des documents PDF.
Bibliothèque .NET pour afficher, modifier ou imprimer des documents PDF
Bibliothèque Docotic.Pdf vous permet d'afficher, de modifier et d'imprimer des documents PDF en C# et VB.NET. Vous pouvez implémenter n'importe quel flux de rendu PDF complexe à l'aide de trois fonctionnalités principales.
Le premier est la possibilité de convertir un PDF en images. Vous pouvez implémenter presque tout sur la base de cette fonctionnalité. De l'impression PDF à l'affichage d'un PDF sur HoloLense ou à la publication d'un PDF sur Instagram. Cela est possible car les images sont prises en charge partout.
La deuxième fonctionnalité clé est la possibilité de dessiner des pages PDF sur la surface de dessin d'un «System.Drawing.Graphics». Il vous permet de restituer et d'imprimer des PDF dans des applications Windows Forms ou WPF. Pour utiliser cette fonctionnalité, ajoutez DLL d'extension BitMiracle.Docotic.Pdf.Gdi à votre projet.
Dernier point mais non le moindre, la possibilité d'extraire des objets de page PDF. Cette fonctionnalité vous permet de créer une visionneuse PDF ou un éditeur PDF dans votre application C# ou VB.NET.
9.5.17615-dev 14,813 réussis Téléchargements totaux de NuGet 4,924,084Obtenez la bibliothèque et une clé de licence gratuite à durée limitée sur la page Télécharger la bibliothèque PDF C# .NET.
Imprimer un PDF dans Windows Forms ou une application WPF
.NET ne prend pas en charge l'impression de documents PDF prêts à l'emploi. Vous devez transformer
votre document PDF en image, en fichier XPS ou le dessiner sur une surface
System.Drawing.Graphics
. Vous pouvez ensuite utiliser les classes .NET pour imprimer la sortie à
partir d'un Windows Forms ou d'une application WPF.
Dans les applications Windows Forms, vous pouvez utiliser les classes de l'espace de noms
System.Drawing.Printing
. Il existe également des classes pratiques PrintDialog
et
PrintPreviewDialog
pour créer une interface utilisateur d'impression.
Veuillez noter qu'il n'est pas recommandé d'utiliser quoi que ce soit de l'espace de noms
System.Drawing
dans les environnements macOS et Linux. Les implémentations macOS et Linux de
System.Drawing
sont incomplètes et différentes de l'implémentation Windows. Vous risquez
d'obtenir des résultats incorrects et/ou incohérents si vous utilisez l'espace de noms
System.Drawing
dans les environnements macOS et Linux.
WPF fournit une autre classe PrintDialog
mais ne fournit pas de classes pour l'aperçu avant
impression. Heureusement, WPF vous permet d'utiliser la classe PrintPreviewDialog
de
System.Windows.Forms.dll. Ainsi, il est plus facile d'utiliser les classes d'impression des espaces
de noms System.Windows.Forms
et System.Drawing.Printing
dans les applications WPF.
Consultez l'application de démonstration Print PDF in .NET disponible en versions C# et VB.NET pour WinForms et WPF. L'application montre comment :
- afficher un aperçu avant impression pour les documents PDF
- imprimer des documents PDF sur une imprimante sélectionnée
- configurer le format du papier, le mode de mise à l'échelle et d'autres paramètres d'impression
L'application utilise la bibliothèque Docotic.Pdf, la DLL d'extension
BitMiracle.Docotic.Pdf.Gdi et les classes d'impression des espaces de noms
System.Windows.Forms
et System.Drawing.Printing
. Vous pouvez utiliser ses classes
PdfPrintDocument et PdfPrintHelper dans vos
projets WPF ou Windows Forms.
La classe PdfPrintDocument
décrit la principale logique d'impression. Cette classe connecte
Docotic.Pdf à la classe System.Drawing.Printing.PrintDocument
. La méthode clé est le gestionnaire
d'événements printDocument_PrintPage
:
private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
Graphics gr = e.Graphics;
// Travailler par points pour avoir des unités cohérentes pour tous les contextes :
// 1. Imprimante
// 2. Aperçu avant impression
// 3. PDF
gr.PageUnit = GraphicsUnit.Point;
if (m_printAction == PrintAction.PrintToPreview)
{
gr.Clear(Color.LightGray);
gr.FillRectangle(Brushes.White, m_printableAreaInPoints);
gr.IntersectClip(m_printableAreaInPoints);
gr.TranslateTransform(m_printableAreaInPoints.X, m_printableAreaInPoints.Y);
}
PdfPage page = m_pdf.Pages[m_pageIndex];
PdfSize pageSizeInPoints = getPageSizeInPoints(page);
if (m_printSize == PrintSize.FitPage)
{
float sx = (float)(m_printableAreaInPoints.Width / pageSizeInPoints.Width);
float sy = (float)(m_printableAreaInPoints.Height / pageSizeInPoints.Height);
float scaleFactor = Math.Min(sx, sy);
centerContentInPrintableArea(gr, pageSizeInPoints, scaleFactor);
gr.ScaleTransform(scaleFactor, scaleFactor);
}
else if (m_printSize == PrintSize.ActualSize)
{
centerContentInPrintableArea(gr, pageSizeInPoints, 1);
}
page.Draw(gr);
++m_pageIndex;
e.HasMorePages = (m_pageIndex <= m_lastPageIndex);
}
Tout d'abord, nous mettons en place les transformations de l'objet Graphics
de la page imprimée.
Il est important de respecter les paramètres «Ajuster la page» et «Taille réelle». Et nous
affichons également les marges nettes de l'imprimante dans la boîte de dialogue Aperçu avant
impression. Ensuite, nous dessinons la page PDF actuelle sur l'objet Graphics
en utilisant la
méthode d'extension PdfPage.Draw.
La classe PdfPrintHelper
vous permet d'utiliser PdfPrintDocument
avec les classes d'interface
utilisateur pour l'impression. Par exemple, vous pouvez afficher la boîte de dialogue d'impression
de votre document PDF comme ceci :
using (var pdf = new PdfDocument("your_document.pdf"))
action(pdf, getPrintSize());
public static DialogResult ShowPrintDialog(PdfDocument pdf, PrintSize printSize)
{
using (var printDialog = new PrintDialog())
{
printDialog.AllowSomePages = true;
printDialog.AllowCurrentPage = true;
printDialog.AllowSelection = true;
printDialog.PrinterSettings.MinimumPage = 1;
printDialog.PrinterSettings.MaximumPage = pdf.PageCount;
printDialog.PrinterSettings.FromPage = printDialog.PrinterSettings.MinimumPage;
printDialog.PrinterSettings.ToPage = printDialog.PrinterSettings.MaximumPage;
var result = printDialog.ShowDialog();
if (result == DialogResult.OK)
{
using (var printDocument = new PdfPrintDocument(pdf, printSize))
printDocument.Print(printDialog.PrinterSettings);
}
return result;
}
}
C'est ça. Procédez comme suit pour implémenter l'impression PDF dans votre application Windows Forms ou WPF :
- ajoutez les fichiers
PdfPrintDocument
,PdfPrintHelper
etPrintSize
à partir de l'exemple - ajouter une référence à la bibliothèque Docotic.Pdf
- ajouter une référence à DLL d'extension BitMiracle.Docotic.Pdf.Gdi
- (WPF uniquement) ajouter des références aux assemblys System.Windows.Forms et System.Drawing
Imprimer un PDF en utilisant la conversion en image
Les classes de l'espace de noms System.Drawing.Printing
fonctionnent bien dans les applications
Windows Forms et WPF. Mais il y a des cas où vous ne pouvez pas ou ne devez pas utiliser
System.Drawing.Printing
.
Par exemple, vous ne devez pas utiliser System.Drawing.Printing
dans les services Windows ou les
applications ASP.NET. System.Drawing.Printing
peut produire des résultats incohérents lors de
l'impression sous Linux ou macOS. Et vous ne pouvez pas utiliser System.Drawing.Printing
dans les
applications Eto.Forms ou Avalonia.
Dans de tels cas, vous devez d'abord convertir le document PDF en image. Cet exemple C# montre comment enregistrer une page PDF en tant qu'image PNG ou convertir un document PDF entier en TIFF multipage :
using (var pdf = new PdfDocument(@"your_document.pdf"))
{
PdfDrawOptions options = PdfDrawOptions.Create();
options.HorizontalResolution = printerDpi;
options.VerticalResolution = printerDpi;
// enregistrer une page
pdf.Pages[0].Save("page0.png", options);
// enregistrer l'intégralité du document au format TIFF bitonal multipage
options.Compression = ImageCompressionOptions.CreateTiff().SetBitonal();
pdf.SaveAsTiff("your_document.tiff", options);
}
Ensuite, imprimez les images à l’aide d’un cadre ou d’un outil d’impression alternatif. Regardez
l'application de démonstration Imprimer le PDF dans Eto.Forms qui montre
comment imprimer des documents PDF sans System.Drawing.Printing
.
Rendre le PDF en C# et VB.NET
L'affichage d'un PDF dans votre application est comme une impression. Dans ASP.NET, WPF, Eto.Forms, Avalonia ou tout autre type d'application, convertir le PDF en image, puis afficher l'image.
Dans une application Windows Forms, vous pouvez dessiner une page PDF sur un contexte
System.Drawing.Graphics
à partir de n'importe quel contrôle. Ou vous pouvez convertir une page
PDF en System.Drawing.Bitmap
, puis afficher le bitmap dans une PictureBox
.
Cet exemple montre comment convertir une page PDF en Bitmap
en C# :
using (var pdf = new PdfDocument("render.pdf"))
{
const float TargetResolution = 300;
PdfPage page = pdf.Pages[0];
double scaleFactor = TargetResolution / page.Resolution;
using (var bitmap = new Bitmap((int)(page.Width * scaleFactor), (int)(page.Height * scaleFactor)))
{
bitmap.SetResolution(TargetResolution, TargetResolution);
using (Graphics gr = Graphics.FromImage(bitmap))
page.Draw(gr);
bitmap.Save("result.png");
}
}
Le code ci-dessus vous oblige à ajouter DLL d'extension BitMiracle.Docotic.Pdf.Gdi à votre projet.
Créer une visionneuse PDF ou un éditeur PDF dans une application .NET
Docotic.Pdf vous permet d'obtenir des informations détaillées sur chaque objet d'une page PDF. Vous pouvez extraire des morceaux de texte, des images, des chemins vectoriels, des contrôles de formulaire et des annotations à partir d'une page PDF.
Ensuite, dans votre application, vous pouvez restituer tous les objets extraits. Vous pouvez également implémenter la possibilité de sélectionner et de modifier les objets rendus.
Regardez l'exemple Extraire le texte, les images et les chemins du PDF.
Il montre comment extraire et dessiner des objets de page dans le contexte
System.Drawing.Graphics
.
Vous pouvez également extraire des objets texte sous forme de chemins vectoriels. Utilisez la surcharge PdfPage.GetObjects(PdfObjectExtractionOptions) pour cela.
Conclusion
Utilisez la bibliothèque Docotic.Pdf pour afficher et imprimer des documents PDF dans vos projets .NET. Examinez les exemples C# et VB.NET associés :
- Imprimer PDF
- Dessiner une page PDF sur les graphiques
- Extraire le texte, les images et les chemins du PDF
Contactez-nous si vous avez des questions sur l'impression ou le rendu PDF.
Ressources associées
- Article Convertir un PDF en image en C# et VB.NET
- Exemples de Rendu et impression de PDF