HOWTO · Csharp

Wie man eine PDF-Datei in C# öffnet

Erfahren Sie, wie Sie eine PDF-Datei mit C# in ihrem Standardanzeigeprogramm starten oder ihren Text extrahieren, und wie Sie WinForms-Anzeige-Steuerelemente beurteilen.

Auf dieser Seite

In einer Windows-Forms-Anwendung kann das Öffnen einer PDF-Datei bedeuten, eine separate Anwendung zu starten, Seiten innerhalb des Formulars zu rendern oder Dokumenttext zu extrahieren. Process.Start() mit UseShellExecute = true fordert Windows auf, die Dateizuordnung zu verwenden. Es bettet keine Seiten ein. Das Rendern erfordert ein bestimmtes Viewer-Steuerelement und dessen dokumentierte WinForms-API. Die für diesen Artikel verfügbaren Produkt- und Versionsinformationen identifizieren keine Viewer-API, die als vollständiger eingebetteter Workflow gezeigt werden könnte; daher erläutern die Viewer-Abschnitte, was überprüft werden muss, statt nicht verifizierten Einrichtungs- oder Lade-Code zu präsentieren. Die folgenden Abschnitte zu PdfDocument und System.IO.Stream behandeln nur die Textextraktion.

Verwenden Sie die Methode Process.Start(), um eine PDF-Datei in C# zu öffnen

Verwenden Sie Process.Start() mit UseShellExecute = true, um eine PDF-Datei in der zugeordneten Anwendung des Benutzers zu öffnen. Der unten stehende Pfad wird relativ zum Anwendungsverzeichnis aufgebaut und hängt daher nicht vom aktuellen Arbeitsverzeichnis des Prozesses ab. Legen Sie report.pdf in einen Ordner Resources neben der Anwendung, oder verwenden Sie einen mit OpenFileDialog ausgewählten Pfad. Die Process.Start-API-Referenz von Microsoft dokumentiert die Shell-Ausführung.

Dieses eigenständige C#-Beispiel konstruiert den üblichen Pfad. Sein mitgeliefertes Laufzeitergebnis überprüft nur den Dateinamen; es startet keine PDF-Anwendung und überprüft nicht, ob sich eine PDF-Datei öffnet.

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string pdfPath = Path.Combine(AppContext.BaseDirectory, "Resources", "report.pdf");
        Console.WriteLine(Path.GetFileName(pdfPath));
    }
}

Output:

report.pdf

Fügen Sie für eine WinForms-Schaltfläche using System.Diagnostics;, using System.IO; und using System.Windows.Forms; hinzu. Dieser Handler fordert eine Datei an, startet die zugeordnete Anwendung und meldet häufige Fehler bei Datei oder Shell-Start: private void openPdfButton_Click(object sender, EventArgs e) { using (var dialog = new OpenFileDialog { Filter = "PDF files (*.pdf)|*.pdf|All files (*.*)|*.*" }) { if (dialog.ShowDialog(this) != DialogResult.OK) return; try { Process.Start(new ProcessStartInfo { FileName = dialog.FileName, UseShellExecute = true }); } catch (FileNotFoundException ex) { MessageBox.Show(this, ex.Message, "Could not open PDF"); } catch (System.ComponentModel.Win32Exception ex) { MessageBox.Show(this, ex.Message, "Could not open PDF"); } } }. Ein erfolgreicher Aufruf startet eine externe Anwendung; er zeigt keine PDF-Seiten im Formular an.

Verwenden Sie den DynamicPDF-Viewer, um eine PDF-Datei in C# zu öffnen

DynamicPDF allein identifiziert kein Viewer-Steuerelement: Es ist ein Produktname, der für verschiedene Angebote verwendet wird. Die mitgelieferte Dokumentation identifiziert keine bestimmte DynamicPDF-Edition und -Version mit einem WinForms-Viewer, Installationsanweisungen, Lizenzbedingungen oder einer PDF-Lade-API. Dieser Abschnitt gibt daher keine DynamicPDF-Einrichtungs- oder Code-Sequenz an und behauptet nicht, dass DynamicPDF den von der Überschrift verlangten eingebetteten Workflow bereitstellt. Bevor Sie ein Produkt unter diesem Namen einsetzen, suchen Sie dessen Herstellerdokumentation für die genaue Edition und Version und bestätigen Sie WinForms-Unterstützung, Lizenzierung, Dateiladen und Dokumentlebensdauer. Der oben stehende Process.Start()-Handler ist eine verfügbare Option zum externen Starten; er rendert keine Seiten in einem Formular.

Verwenden Sie das PdfDocument, um eine PDF-Datei in C# zu öffnen

PdfDocument ist kein integrierter .NET-Typ, und sein Konstruktor sowie sein Renderverhalten hängen von der Bibliothek ab, die ihn definiert. In der mitgelieferten Produktdokumentation ist keine bestimmte PdfDocument-Viewer-API identifiziert, daher zeigt dieser Abschnitt keinen Byte-Array-zu-Viewer-Workflow. Das folgende Beispiel ist eine andere Aufgabe: Es liest PDF-Bytes mit iTextSharp 5.5.13.4 und extrahiert Text. Es rendert keine Seiten.

Installieren Sie das NuGet-Paket iTextSharp in der Version 5.5.13.4. Lesen Sie mit using System.IO;, using System.Text; und den beiden importierten iTextSharp-Namespaces einen ausgewählten PDF-Pfad mit byte[] pdfBytes = File.ReadAllBytes(path); var text = new StringBuilder(); using (var reader = new PdfReader(pdfBytes)) { for (int page = 1; page <= reader.NumberOfPages; page++) text.AppendLine(PdfTextExtractor.GetTextFromPage(reader, page)); }. Hier ist path der ausgewählte PDF-Dateiname. Der PdfReader besitzt das geparste Dokument und wird nach der Schleife entsorgt. Die versionierte iTextSharp 5 .NET-API-Referenz dokumentiert die Reader- und Extraktions-APIs. Um diese Bytes in einem WinForms-Steuerelement zu rendern, verwenden Sie eine Bibliothek, deren genaue Version das Laden von Byte-Arrays und das Rendern von Seiten dokumentiert; behandeln Sie PdfReader nicht als Viewer.

Verwenden Sie die Instanz System.IO.Stream, um eine PDF-Datei in C# zu öffnen

Ein System.IO.Stream liefert Bytes an eine Bibliothek; ein Stream allein zeigt keine PDF-Seiten an. Die folgende iTextSharp-5.5.13.4-Operation extrahiert Text aus einer PDF-Datei im Speicher und rendert ihn nicht. Sie erfordert using System.IO;, using System.Text; und die iTextSharp-Namespaces: var text = new StringBuilder(); using (var stream = new MemoryStream(pdfBytes, writable: false)) { using (var reader = new PdfReader(stream)) { reader.CloseStream = false; for (int page = 1; page <= reader.NumberOfPages; page++) text.AppendLine(PdfTextExtractor.GetTextFromPage(reader, page)); } }. pdfBytes enthält die PDF-Daten. Der Reader wird zuerst entsorgt; CloseStream = false lässt den Stream für seinen Besitzer geöffnet, und das äußere using entsorgt ihn danach. Der Stream muss lesbar und am Anfang positioniert sein, wenn er an den Reader übergeben wird. Die versionierte iTextSharp 5 .NET-API-Referenz dokumentiert die Stream-Eingabe. Dies ist Textextraktion, kein eingebetteter Viewer-Workflow. Die Regeln eines Viewers für das Laden von Streams und die Eigentümerschaft müssen aus der eigenen versionierten Dokumentation dieses Viewers stammen.

Verwenden Sie das NuGet-Paket iTextSharp, um eine PDF-Datei in C# zu öffnen

Dieser iTextSharp-5.5.13.4-Workflow extrahiert Text in eine WinForms-RichTextBox; er zeigt keine PDF-Seiten an. Installieren Sie das NuGet-Paket iTextSharp in der Version 5.5.13.4, platzieren Sie eine RichTextBox mit dem Namen textBox1 auf dem Formular und importieren Sie iTextSharp.text.pdf, iTextSharp.text.pdf.parser und System.Text. Bei einem ausgewählten Pfad in dialog.FileName lautet die Kernoperation: var text = new StringBuilder(); using (var reader = new PdfReader(dialog.FileName)) { for (int page = 1; page <= reader.NumberOfPages; page++) text.AppendLine(PdfTextExtractor.GetTextFromPage(reader, page)); } textBox1.Text = text.ToString();. Die versionierte iTextSharp 5 .NET-API-Referenz dokumentiert diese Reader- und Extraktions-APIs. Prüfen Sie bei der Auswahl des Pakets die AGPLv3-Lizenzinformationen von iText.

Der PdfReader wird nach der Seitenschleife entsorgt. Verwenden Sie für ein Dokument im Speicher den dokumentierten Byte-Array-Konstruktor; verwenden Sie für eine passwortgeschützte Datei eine von derselben Version unterstützte Passwort-Überladung und erhalten Sie das Passwort vom Benutzer. Extrahierter Text bewahrt weder Seitenlayout noch Schriftarten, Bilder oder Anmerkungen. Dies ist ein Ansatz zum Lesen von Inhalten, kein Viewer-Steuerelement.

Verwenden Sie den PdfViewer aus der Toolbox, um eine PDF-Datei in C# zu öffnen

PdfViewer ist ein produktspezifischer Steuerelementname, keine Standard-WinForms-Komponente mit einer gemeinsamen Lademethode. Die mitgelieferte Dokumentation nennt keine Hersteller-Edition und -Version und bietet keine direkten Herstelleranleitungen für WinForms-Verfügbarkeit, Toolbox-Installation, Lizenzierung, PDF-Laden oder die Lebensdauer von Dokument und Stream. Dieser Abschnitt stellt daher keine Toolbox-Sequenz als verifiziert dar und bietet keinen verwendbaren eingebetteten Viewer-Workflow. Wählen Sie für einen echten WinForms-Viewer eine dokumentierte Produktversion und folgen Sie deren Herstelleranweisungen, um das Steuerelement hinzuzufügen, eine Datei oder unterstützte Eingabe zu laden und das Dokument oder den Stream gemäß deren Eigentumsregeln zu entsorgen. Die oben stehende externe Process.Start()-Option öffnet eine separate zugeordnete Anwendung; sie ist kein eingebetteter PdfViewer.