Diese Seite kann automatisch übersetzten Text enthalten.
Rendern und drucken Sie PDF-Dokumente in C# und VB.NET
Beim Lesen von PDF-Dokumenten denkt jeder an den Adobe Reader. Doch was tun, wenn Sie als Softwareentwickler PDF-Dokumente in Ihrer Anwendung anzeigen möchten? Sie möchten den Benutzer nicht bitten, Adobe Reader einzurichten und das Dokument dort zu öffnen.
Möglicherweise müssen Sie auch andere PDF-bezogene Anforderungen implementieren. Drucken Sie beispielsweise PDF-Dokumente. Oder generieren Sie Miniaturansichten für hochgeladene PDF-Dokumente. Oder unterstützen Sie die PDF-Bearbeitung in Ihrer Desktop- oder Webanwendung.
Sie benötigen lediglich eine PDF-Bibliothek, die PDF-Dokumente rendern und drucken kann.
.NET-Bibliothek zum Anzeigen, Bearbeiten oder Drucken von PDF-Dokumenten
Mit der Docotic.Pdf-Bibliothek können Sie PDF-Dokumente in C# und VB.NET anzeigen, bearbeiten und drucken. Mit drei Kernfunktionen können Sie jeden komplexen PDF-Rendering-Ablauf implementieren.
Die erste Möglichkeit ist die Möglichkeit, PDF in Bilder umzuwandeln. Mit dieser Funktion können Sie fast alles umsetzen. Vom PDF-Druck über die Anzeige eines PDFs auf HoloLense bis hin zum 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 Zeichenoberfläche eines
System.Drawing.Graphics
zu zeichnen. Es ermöglicht Ihnen, PDFs in Windows Forms- oder
WPF-Anwendungen zu rendern und zu drucken. Um diese Funktion zu nutzen, fügen Sie Ihrem Projekt
BitMiracle.Docotic.Pdf.Gdi-Erweiterungs-DLL hinzu.
Last but not least gibt es die Möglichkeit, PDF-Seitenobjekte zu extrahieren. Mit dieser Funktion können Sie einen PDF-Viewer oder PDF-Editor in Ihrer C#- oder VB.NET-Anwendung erstellen.
9.5.17585-dev 14,810 bestanden NuGet-Downloads insgesamt 4,858,021Holen Sie sich die Bibliothek und einen kostenlosen zeitlich begrenzten Lizenzschlüssel auf der Laden Sie die C# .NET PDF-Bibliothek herunter-Seite.
Drucken Sie PDF in Windows Forms oder einer WPF-Anwendung
.NET unterstützt das Drucken von PDF-Dokumenten nicht sofort. Sie müssen Ihr PDF-Dokument in ein
Bild oder eine XPS-Datei umwandeln oder es auf einer 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 auch praktische Klassen PrintDialog
und PrintPreviewDialog
zum Erstellen
einer Druck-Benutzeroberfläche.
Bitte beachten Sie, dass es nicht empfohlen wird, in macOS- und Linux-Umgebungen etwas aus dem
Namespace System.Drawing
zu verwenden. 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, erhalten Sie
möglicherweise falsche und/oder inkonsistente Ergebnisse.
WPF stellt eine weitere PrintDialog
-Klasse bereit, stellt jedoch keine Klassen für die
Druckvorschau bereit. Glücklicherweise ermöglicht Ihnen WPF die Verwendung der Klasse
PrintPreviewDialog
aus System.Windows.Forms.dll. Daher ist es einfacher, Druckklassen aus den
Namespaces System.Windows.Forms
und System.Drawing.Printing
in WPF-Anwendungen zu verwenden.
Schauen Sie sich die Demoanwendung PDF in .NET drucken an, die in C#- und VB.NET-Versionen für WinForms und WPF erhältlich ist. Die Anwendung zeigt, wie man:
- Anzeige einer Druckvorschau für PDF-Dokumente
- PDF-Dokumente auf einem ausgewählten Drucker drucken
- Richten Sie das Papierformat, den Skalierungsmodus und andere Druckeinstellungen ein
Die Anwendung verwendet die Docotic.Pdf-Bibliothek,
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 Klasse PdfPrintDocument
beschreibt die Hauptdrucklogik. Diese Klasse verbindet Docotic.Pdf
mit der Klasse System.Drawing.Printing.PrintDocument
. Die Schlüsselmethode ist der Event-Handler
printDocument_PrintPage
:
private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
Graphics gr = e.Graphics;
// In Punkten arbeiten, um konsistente Einheiten für alle Kontexte 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 Transformationen des Graphics
-Objekts der gedruckten Seite ein. Es ist
wichtig, die Einstellungen „Seite anpassen“ und „Tatsächliche Größe“ zu beachten. Und wir zeigen
auch die harten Ränder des Druckers im Druckvorschau-Dialog an. Dann zeichnen wir die aktuelle
PDF-Seite mit der Erweiterungsmethode
PdfPage.Draw auf das Objekt Graphics
.
Mit der Klasse PdfPrintHelper
können Sie PdfPrintDocument
mit UI-Klassen zum Drucken verwenden.
Sie können den Druckdialog für Ihr PDF-Dokument beispielsweise 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 es. Gehen Sie wie folgt vor, um den PDF-Druck in Ihrer Windows Forms- oder WPF-Anwendung zu implementieren:
- Fügen Sie die Dateien
PdfPrintDocument
,PdfPrintHelper
undPrintSize
aus dem Beispiel hinzu - Fügen Sie einen Verweis auf die Docotic.Pdf-Bibliothek hinzu
- Fügen Sie einen Verweis auf BitMiracle.Docotic.Pdf.Gdi-Erweiterungs-DLL hinzu.
- (Nur WPF) Verweise auf System.Windows.Forms- und System.Drawing-Assemblys hinzufügen
Drucken Sie PDF mit der Konvertierung in ein Bild
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.
Beispielsweise sollten Sie System.Drawing.Printing
nicht in Windows-Diensten oder
ASP.NET-Anwendungen verwenden. System.Drawing.Printing
kann beim Drucken unter Linux oder macOS
zu inkonsistenten Ergebnissen führen. Und Sie können System.Drawing.Printing
nicht in Eto.Forms-
oder Avalonia-Anwendungen verwenden.
In solchen Fällen müssen Sie zuerst PDF-Dokument in 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;
// save one page
pdf.Pages[0].Save("page0.png", options);
// save the whole document as multipage bitonal TIFF
options.Compression = ImageCompressionOptions.CreateTiff().SetBitonal();
pdf.SaveAsTiff("your_document.tiff", options);
}
Drucken Sie dann die Bilder 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 PDF-Dateien in Ihrer Anwendung ähnelt dem Drucken. In ASP.NET, WPF, Eto.Forms, Avalonia oder einem anderen Anwendungstyp PDF in Bild konvertieren und dann das Bild anzeigen.
In einer Windows Forms-App können Sie von jedem Steuerelement aus eine PDF-Seite in einem
System.Drawing.Graphics
-Kontext zeichnen. Oder Sie können eine PDF-Seite in eine
System.Drawing.Bitmap
konvertieren und die Bitmap dann in einer PictureBox
anzeigen.
Dieses Beispiel zeigt, wie man eine PDF-Seite in Bitmap
in C# konvertiert:
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");
}
}
Für den obigen Code müssen Sie Ihrem Projekt BitMiracle.Docotic.Pdf.Gdi-Erweiterungs-DLL hinzufügen.
Erstellen Sie einen PDF-Viewer oder PDF-Editor in einer .NET-Anwendung
Mit Docotic.Pdf können Sie detaillierte Informationen zu jedem Objekt auf einer PDF-Seite abrufen. Sie können Textblöcke, 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 auch 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 extrahiert und in den Kontext System.Drawing.Graphics
gezeichnet
werden.
Sie können Textobjekte auch als Vektorpfade extrahieren. Verwenden Sie dazu die Überladung PdfPage.GetObjects(PdfObjectExtractionOptions).
Abschluss
Verwenden Sie die Docotic.Pdf-Bibliothek, um PDF-Dokumente in Ihren .NET-Projekten anzuzeigen und zu drucken. Sehen Sie sich verwandte C#- und VB.NET-Beispiele an:
Kontaktieren Sie uns, wenn Sie Fragen zum Drucken oder Rendern von PDFs haben.
Verwandte Ressourcen
- Artikel Konvertieren Sie PDF in ein Bild in C# und VB.NET
- PDF rendern und drucken Codebeispiele