Diese Seite kann automatisch übersetzten Text enthalten.
PDF-Dokumente in C# und VB.NET rendern und drucken
Bei PDF-Dokumenten denkt man beim Lesen oft an Adobe Reader. Aber was tun, wenn Sie Softwareentwickler sind und PDF-Dokumente in Ihrer Anwendung anzeigen möchten? Sie möchten den Benutzer nicht bitten, Adobe Reader einzurichten und das Dokument dort zu öffnen.
Vielleicht müssen Sie auch weitere PDF-bezogene Anforderungen implementieren. Zum Beispiel PDF-Dokumente drucken. Oder Miniaturansichten für hochgeladene PDF-Dokumente erzeugen. Oder PDF-Bearbeitung in Ihrer Desktop- oder Webanwendung unterstützen.
Alles, was Sie brauchen, ist eine PDF-Bibliothek, die PDF-Dokumente rendern und drucken kann.

.NET-Bibliothek zum Anzeigen, Bearbeiten oder Drucken von PDF-Dokumenten
Docotic.Pdf-Bibliothek ermöglicht es Ihnen, PDF-Dokumente in C# und VB.NET anzuzeigen, zu bearbeiten und zu drucken. Sie können jeden komplexen PDF-Rendering-Workflow mit drei Kernfunktionen implementieren.
Die erste ist die Möglichkeit, PDF in Bilder zu konvertieren. Auf dieser Funktion können Sie fast alles aufbauen. Vom Drucken von PDFs bis zum Anzeigen eines PDFs auf HoloLens oder dem Posten eines PDFs auf Instagram. Das ist möglich, weil Bilder überall unterstützt werden.
Die zweite Schlüsselfunktion ist die Möglichkeit, PDF-Seiten auf der Zeichenfläche eines System.Drawing.Graphics zu zeichnen. Damit können Sie PDFs in Windows Forms- oder WPF-Anwendungen rendern und drucken. Um diese Funktion zu verwenden, fügen Sie die BitMiracle.Docotic.Pdf.Gdi-Erweiterungs-DLL Ihrem Projekt hinzu.
Nicht zuletzt ist es möglich, PDF-Seitenobjekte zu extrahieren. Diese Funktion ermöglicht es Ihnen, in Ihrer C#- oder VB.NET-Anwendung einen PDF-Viewer oder PDF-Editor zu erstellen.
Holen Sie sich die Bibliothek und einen kostenlosen, zeitlich befristeten Lizenzschlüssel auf der C# .NET-PDF-Bibliothek herunterladen-Seite.
PDF in Windows Forms- oder WPF-Anwendung drucken
.NET unterstützt das Drucken von PDF-Dokumenten nicht von Haus aus. Sie müssen Ihr PDF-Dokument in ein Bild, eine XPS-Datei umwandeln oder auf eine System.Drawing.Graphics-Oberfläche zeichnen. Anschließend können Sie .NET-Klassen verwenden, um die Ausgabe aus einer Windows Forms- oder WPF-Anwendung heraus zu drucken.
In Windows Forms-Anwendungen können Sie Klassen aus dem Namespace System.Drawing.Printing verwenden. Es gibt außerdem praktische Klassen PrintDialog und PrintPreviewDialog zum Erstellen einer Druck-UI.
Bitte beachten Sie, dass die Verwendung von Elementen aus dem Namespace System.Drawing in macOS- und Linux-Umgebungen nicht empfohlen wird. Die macOS- und Linux-Implementierungen von System.Drawing sind unvollständig und unterscheiden sich von der Windows-Implementierung. Wenn Sie den Namespace System.Drawing in macOS- und Linux-Umgebungen verwenden, können falsche und/oder inkonsistente Ergebnisse auftreten.
WPF bietet ebenfalls eine PrintDialog-Klasse, stellt jedoch keine Klassen für die Druckvorschau bereit. Glücklicherweise können Sie in WPF die PrintPreviewDialog-Klasse aus System.Windows.Forms.dll verwenden. Daher ist es einfacher, in WPF-Anwendungen Druckklassen aus den Namespaces System.Windows.Forms und System.Drawing.Printing zu verwenden.
Schauen Sie sich die Demoanwendung PDF in .NET drucken an, die in C#- und VB.NET-Versionen für WinForms und WPF verfügbar ist. Die Anwendung zeigt, wie Sie:
- eine Druckvorschau für PDF-Dokumente anzeigen
- PDF-Dokumente auf einem ausgewählten Drucker drucken
- Papierformat, Skalierungsmodus und andere Druckeinstellungen festlegen
Die Anwendung verwendet die Docotic.Pdf-Bibliothek, die BitMiracle.Docotic.Pdf.Gdi-Erweiterungs-DLL und Druckklassen aus den Namespaces System.Windows.Forms und System.Drawing.Printing. Sie können die Klassen PdfPrintDocument und PdfPrintHelper in Ihren WPF- oder Windows Forms-Projekten verwenden.
Die PdfPrintDocument-Klasse beschreibt die Hauptdrucklogik. Diese Klasse verbindet Docotic.Pdf mit der Klasse System.Drawing.Printing.PrintDocument. Die zentrale Methode ist der Ereignishandler printDocument_PrintPage:
private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
Graphics gr = e.Graphics ?? throw new InvalidOperationException("No Graphics!");
// Mit Punkten arbeiten, um in allen Kontexten konsistente Einheiten zu haben:
// 1. Drucker
// 2. Druckvorschau
// 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);
}
Zuerst richten wir die Transformationen des Graphics-Objekts der gedruckten Seite ein. Es ist wichtig, die Einstellungen „An Seite anpassen“ und „Tatsächliche Größe“ zu berücksichtigen. Außerdem zeigen wir die nicht bedruckbaren Ränder des Druckers im Dialog zur Druckvorschau an. Dann zeichnen wir die aktuelle PDF-Seite mit der Erweiterungsmethode PdfPage.Draw auf das Graphics-Objekt.
Die PdfPrintHelper-Klasse ermöglicht Ihnen die Verwendung von PdfPrintDocument mit UI-Klassen zum Drucken. Sie können beispielsweise den Druckdialog für Ihr PDF-Dokument so anzeigen:
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;
}
}
Das ist alles. Gehen Sie wie folgt vor, um PDF-Druck in Ihrer Windows Forms- oder WPF-Anwendung zu implementieren:
- fügen Sie die Dateien
PdfPrintDocument,PdfPrintHelperundPrintSizeaus dem Beispiel hinzu - fügen Sie einen Verweis auf die Docotic.Pdf-Bibliothek hinzu
- fügen Sie einen Verweis auf die BitMiracle.Docotic.Pdf.Gdi-Erweiterungs-DLL hinzu
- (nur WPF) fügen Sie Verweise auf die Assemblys System.Windows.Forms und System.Drawing hinzu
PDF über Konvertierung in ein Bild drucken
Klassen aus dem Namespace System.Drawing.Printing funktionieren gut in Windows Forms- und WPF-Anwendungen. Es gibt jedoch Fälle, in denen Sie System.Drawing.Printing nicht verwenden können oder sollten.
Zum Beispiel sollten Sie System.Drawing.Printing nicht in Windows-Diensten oder ASP.NET-Anwendungen verwenden. System.Drawing.Printing kann beim Drucken unter Linux oder macOS inkonsistente Ergebnisse liefern. Und Sie können System.Drawing.Printing nicht in Eto.Forms- oder Avalonia-Anwendungen verwenden.
In solchen Fällen müssen Sie das PDF-Dokument zuerst in ein Bild konvertieren. Dieses C#-Beispiel zeigt, wie Sie eine PDF-Seite als PNG-Bild speichern oder ein gesamtes PDF-Dokument in ein mehrseitiges TIFF konvertieren:
using var pdf = new PdfDocument(@"your_document.pdf");
PdfDrawOptions options = PdfDrawOptions.Create();
options.HorizontalResolution = printerDpi;
options.VerticalResolution = printerDpi;
// eine Seite speichern
pdf.Pages[0].Save("page0.png", options);
// das gesamte Dokument als mehrseitiges bitonales TIFF speichern
options.Compression = ImageCompressionOptions.CreateTiff().SetBitonal();
pdf.SaveAsTiff("your_document.tiff", options);
Drucken Sie die Bilder anschließend mit einem alternativen Druck-Framework oder -Tool. Schauen Sie sich die Demoanwendung PDF in Eto.Forms drucken an, die zeigt, wie Sie PDF-Dokumente ohne System.Drawing.Printing drucken.
PDF in C# und VB.NET rendern
Das Anzeigen von PDFs in Ihrer Anwendung ähnelt dem Drucken. In ASP.NET-, WPF-, Eto.Forms-, Avalonia- oder anderen Anwendungstypen sollten Sie PDF in ein Bild konvertieren und dann das Bild anzeigen.
In einer Windows Forms-App können Sie eine PDF-Seite von jedem Steuerelement aus auf einen System.Drawing.Graphics-Kontext zeichnen. Oder Sie konvertieren eine PDF-Seite in ein System.Drawing.Bitmap und zeigen das Bitmap dann in einer PictureBox an.
Dieses Beispiel zeigt, wie Sie eine PDF-Seite in C# in Bitmap konvertieren:
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");
Der obige Code erfordert, dass Sie Ihrem Projekt die BitMiracle.Docotic.Pdf.Gdi-Erweiterungs-DLL hinzufügen.
PDF-Viewer oder PDF-Editor in einer .NET-Anwendung erstellen
Docotic.Pdf ermöglicht es Ihnen, detaillierte Informationen über jedes Objekt auf einer PDF-Seite zu erhalten. Sie können Textabschnitte, Bilder, Vektorpfade, Formularsteuerelemente und Anmerkungen aus einer PDF-Seite extrahieren.
Anschließend können Sie in Ihrer Anwendung alle extrahierten Objekte rendern. Sie können außerdem die Möglichkeit implementieren, die gerenderten Objekte auszuwählen und zu bearbeiten.
Schauen Sie sich das Beispiel Text, Bilder und Pfade aus PDF extrahieren an. Es zeigt, wie Seitenobjekte in einen System.Drawing.Graphics-Kontext extrahiert und gezeichnet werden.
Sie können Textobjekte auch als Vektorpfade extrahieren. Verwenden Sie dafür die Überladung PdfPage.GetObjects(PdfObjectExtractionOptions).
Abschluss
Verwenden Sie die Docotic.Pdf-Bibliothek, um PDF-Dokumente in Ihren .NET-Projekten anzuzeigen und zu drucken. Schauen Sie sich die zugehörigen C#- und VB.NET-Beispiele an:
Kontaktieren Sie uns, wenn Sie Fragen zum PDF-Drucken oder Rendern haben.
Verwandte Ressourcen
- PDF in C# und VB.NET in ein Bild konvertieren article
- PDF rendern und drucken samples