HOWTO · Csharp
Cómo abrir un archivo PDF en C#
Aprenda a abrir un PDF en su visor predeterminado o a extraer su texto con C#, y a evaluar los controles de visor de WinForms.
En esta página
En una aplicación de Windows Forms, abrir un PDF puede significar iniciar una aplicación independiente, renderizar páginas dentro del formulario o extraer el texto del documento. Process.Start() con UseShellExecute = true pide a Windows que use la asociación de archivos. No incrusta páginas. Para renderizar se necesita un control de visor concreto y su API de WinForms documentada. La información de producto y versión disponible para este artículo no identifica una API de visor que pueda mostrarse como un flujo de trabajo incrustado completo, por lo que las secciones del visor explican lo que debe verificarse en lugar de presentar código de instalación o carga no verificado. Las secciones de PdfDocument y System.IO.Stream siguientes cubren únicamente la extracción de texto.
Use el método Process.Start() para abrir un archivo PDF en C#
Use Process.Start() con UseShellExecute = true para abrir un PDF en la aplicación asociada del usuario. La ruta siguiente se construye en relación con el directorio de la aplicación, por lo que no depende del directorio de trabajo actual del proceso. Coloque report.pdf en una carpeta Resources junto a la aplicación, o use una ruta seleccionada con OpenFileDialog. La referencia de la API Process.Start de Microsoft documenta la ejecución mediante el shell.
Este ejemplo autónomo de C# construye la ruta convencional. Su resultado de ejecución suministrado verifica únicamente el nombre del archivo; no inicia una aplicación de PDF ni verifica que un PDF se abra.
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
Para un botón de WinForms, añada using System.Diagnostics;, using System.IO; y using System.Windows.Forms;. Este controlador solicita un archivo, inicia la aplicación asociada e informa de los errores habituales de archivo o de inicio del shell: 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"); } } }. Una llamada correcta inicia una aplicación externa; no muestra páginas del PDF en el formulario.
Use el visor DynamicPDF para abrir un archivo PDF en C#
DynamicPDF por sí solo no identifica un control de visor: es un nombre de producto usado en diferentes ofertas. La documentación suministrada no identifica una edición y versión concretas de DynamicPDF con un visor de WinForms, instrucciones de instalación, condiciones de licencia ni una API de carga de PDF. Por tanto, esta sección no ofrece una secuencia de instalación o de código de DynamicPDF, ni afirma que DynamicPDF proporcione el flujo de trabajo incrustado que pide el encabezado. Antes de adoptar un producto con este nombre, localice la documentación de su proveedor para la edición y versión exactas y confirme la compatibilidad con WinForms, la licencia, la carga de archivos y la vida útil del documento. El controlador Process.Start() anterior es una opción disponible de inicio externo; no renderiza páginas en un formulario.
Use PdfDocument para abrir un archivo PDF en C#
PdfDocument no es un tipo integrado de .NET, y su constructor y su comportamiento de renderizado dependen de la biblioteca que lo define. Ninguna API de visor PdfDocument concreta está identificada en la documentación de producto suministrada, por lo que esta sección no muestra un flujo de trabajo de matriz de bytes a visor. El ejemplo siguiente es una tarea diferente: lee los bytes de un PDF con iTextSharp 5.5.13.4 y extrae texto. No renderiza páginas.
Instale el paquete NuGet iTextSharp en la versión 5.5.13.4. Con using System.IO;, using System.Text; y los dos espacios de nombres de iTextSharp importados, lea una ruta de PDF seleccionada con 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)); }. Aquí, path es el nombre del archivo PDF seleccionado. El PdfReader es el propietario del documento analizado y se desecha después del bucle. La referencia de la API de iTextSharp 5 para .NET con versión documenta las API de lectura y extracción. Para renderizar esos bytes en un control de WinForms, use una biblioteca cuya versión exacta documente la carga desde matrices de bytes y el renderizado de páginas; no trate PdfReader como un visor.
Use la instancia System.IO.Stream para abrir un archivo PDF en C#
Un System.IO.Stream suministra bytes a una biblioteca; un flujo por sí solo no muestra páginas de PDF. La siguiente operación con iTextSharp 5.5.13.4 extrae texto de un PDF en memoria y no lo renderiza. Requiere using System.IO;, using System.Text; y los espacios de nombres de iTextSharp: 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 contiene los datos del PDF. El lector se desecha primero; CloseStream = false deja el flujo abierto para su propietario, y el using exterior lo desecha después. El flujo debe permitir la lectura y estar posicionado al principio cuando se pasa al lector. La referencia de la API de iTextSharp 5 para .NET con versión documenta la entrada mediante flujos. Esto es extracción de texto, no un flujo de trabajo de visor incrustado. Las reglas de un visor sobre carga desde flujos y propiedad deben proceder de la propia documentación con versión de ese visor.
Use el paquete NuGet iTextSharp para abrir un archivo PDF en C#
Este flujo de trabajo con iTextSharp 5.5.13.4 extrae texto en un RichTextBox de WinForms; no muestra páginas de PDF. Instale el paquete NuGet iTextSharp en la versión 5.5.13.4, coloque un RichTextBox llamado textBox1 en el formulario e importe iTextSharp.text.pdf, iTextSharp.text.pdf.parser y System.Text. Con una ruta seleccionada en dialog.FileName, la operación central es 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();. La referencia de la API de iTextSharp 5 para .NET con versión documenta estas API de lectura y extracción. Revise la información de licencia AGPLv3 de iText al elegir el paquete.
El PdfReader se desecha después del bucle de páginas. Para un documento en memoria, use el constructor de matriz de bytes documentado; para un archivo protegido con contraseña, use una sobrecarga con contraseña compatible con esa misma versión y obtenga la contraseña del usuario. El texto extraído no conserva el diseño de página, las fuentes, las imágenes ni las anotaciones. Este es un enfoque de lectura de contenido, no un control de visor.
Use el PdfViewer de la caja de herramientas para abrir un archivo PDF en C#
PdfViewer es un nombre de control específico de un producto, no un componente estándar de WinForms con un método de carga común. La documentación suministrada no indica una edición y versión de un proveedor ni ofrece orientación directa del proveedor sobre disponibilidad en WinForms, instalación en la caja de herramientas, licencias, carga de PDF o vida útil del documento y del flujo. Por tanto, esta sección no presenta una secuencia de la caja de herramientas como si estuviera verificada, ni ofrece un flujo de trabajo de visor incrustado utilizable. Para un visor de WinForms real, seleccione una versión de producto documentada y siga las instrucciones de su proveedor para añadir el control, cargar un archivo o una entrada compatible y desechar el documento o el flujo según sus reglas de propiedad. La opción externa Process.Start() anterior abre una aplicación asociada independiente; no es un PdfViewer incrustado.