USO DE IRONPDF

Cómo mostrar texto incrustado en PDF en .NET MAUI

Este es un tutorial que te guiará para mostrar texto incrustado en PDF en .NET MAUI usando IronPDF.

.NET Multi-platform App UI (MAUI) simplifica el desarrollo de aplicaciones multiplataforma. Con la nueva y mejorada versión de Xamarin.Forms, los desarrolladores pueden crear aplicaciones para Android, iOS, macOS y Windows con un solo proyecto. Los archivos PDF, conocidos por conservar fuentes, imágenes y diseño, suelen gestionarse con esta tecnología.

En este contexto, la biblioteca IronPDF ofrece potentes funciones de gestión de PDF. Los desarrolladores pueden aprovechar la potencia de IronPDF para trabajar con texto incrustado sin esfuerzo, simplificando el proceso de generación y manipulación de archivos PDF al tiempo que se adhieren a la configuración predeterminada para una representación coherente.

Comprender la incrustación de texto y fuentes en PDF

El texto incrustado en PDF, o fuentes PDF, son entidades de texto incrustadas en un archivo PDF. Se trata de un elemento crucial para la coherencia y la precisión de la representación en las aplicaciones de visualización de PDF, incluidas aplicaciones tan populares como Adobe InDesign. Al incrustar las fuentes en el documento PDF, se conservan las fuentes correctas, independientemente del tipo de aplicación de visualización de PDF que se utilice o de si la fuente específica está instalada en el dispositivo de visualización.

La incrustación de fuentes a veces puede aumentar el tamaño del documento PDF, pero es crucial para mantener el aspecto del documento original. La configuración de Adobe PDF suele determinar si las fuentes de un PDF están incrustadas o no.

Existen diferentes tipos de fuentes incrustadas en un documento PDF:

  1. Fuentes incrustadas: Toda la fuente está incrustada en el documento.

  2. Incrustar subconjutno de fuentes: Solo se incrusta un subconjunto de las fuentes utilizadas en el documento original.

  3. No hay fuentes incrustadas: No hay fuentes incrustadas en el documento.

    En Adobe Acrobat, puede comprobar si las fuentes están incrustadas comprobando las propiedades del documento. Por defecto, las fuentes están incrustadas en un archivo PDF. Sin embargo, estos ajustes pueden modificarse con Adobe Acrobat Pro u otras herramientas similares.

    El término "PDF aplanado" se utiliza a menudo en el contexto de documentos PDF en los que se han incrustado todas las fuentes, lo que hace que el archivo sea autónomo y garantiza que tenga la misma apariencia en todos los sistemas y visores de PDF.

IronPDF C#

Documentación de IronPDF es una potente biblioteca PDF de C# que permite a los desarrolladores generar, leer y editar archivos PDF en aplicaciones .NET. Puedes aprender a generar archivos PDF desde HTML con IronPDF. Una función interesante de IronPDF es la posibilidad de trabajar con texto incrustado en archivos PDF. La posibilidad de incrustar fuentes en un archivo PDF es crucial para conservar el aspecto original del documento, incluso cuando el archivo PDF se visualiza o imprime en un sistema que no tiene acceso a las fuentes originales utilizadas en el documento. Vamos a entender cómo mostrar texto incrustado en un PDF utilizando IronPDF en .NET MAUI.

Requisitos previos

Antes de empezar con el tutorial, asegúrate de que cumples los siguientes requisitos:

  1. .NET MAUI: el conjunto de herramientas de interfaz de usuario unificado de Microsoft que te permite crear aplicaciones para Android, iOS, macOS y Windows con una única base de código compartida. Puedes descargar el .NET MAUI desde la web de Microsoft.

  2. Visual Studio 2022 (o posterior): Un potente y fácil de usar Entorno de Desarrollo Integrado (IDE) para la programación .NET. Puede descargar Visual Studio desde el sitio web de Microsoft. Asegúrese de que tiene las cargas de trabajo .NET MAUI instaladas en Visual Studio 2022.

  3. Biblioteca IronPDF: Esta es una biblioteca de procesamiento de PDF para .NET, y la usaremos para interactuar con los archivos PDF. Puede instalar IronPDF a través de NuGet, que es un gestor de paquetes para la plataforma de desarrollo de Microsoft.

  4. Un archivo PDF de Adobe: Para el propósito de este tutorial, necesitaremos un archivo PDF.

Crear una aplicación .NET MAUI

Sigue estos pasos para crear una nueva aplicación .NET MAUI:

Inicia Visual Studio 2022: Después de iniciar, navega a Archivo > Nuevo > Proyecto. En la ventana de plantilla de proyecto, selecciona .NET MAUI App y luego haz clic en Siguiente.

Cómo Mostrar Texto Incrustado en PDF en .NET MAUI, Figura 1: Crear una Aplicación .NET MAUI en Visual Studio

Crear una aplicación .NET MAUI en Visual Studio

Nombre su proyecto: En la siguiente ventana, deberá dar un nombre a su proyecto. Llamémoslo IronPDF_Read_and_View. Elige una ubicación para guardar tu proyecto y luego haz clic en Siguiente.

Cómo mostrar texto incrustado en PDF en .NET MAUI, Figura 2: Configurar el proyecto

Configurar el proyecto

Seleccionar marco de trabajo: Seleccione .NET Framework de la lista desplegable. Seleccione la última versión de .NET Framework para un proceso fluido y haga clic en el botón "Crear".

Cómo mostrar texto incrustado en PDF en .NET MAUI, Figura 3: Selección de .NET Framework

Selección de .NET Framework

Instalar IronPDF

Después de crear la aplicación .NET MAUI, el siguiente paso es instalar la librería IronPDF. He aquí cómo hacerlo:

  1. Abra el administrador de paquetes de NuGet: Navegue a Herramientas > Administrador de paquetes de NuGet > Administrar paquetes de NuGet para la solución.

    Cómo mostrar texto incrustado en PDF en .NET MAUI, Figura 4: Navegar al Administrador de paquetes NuGet

    Navegar al Administrador de Paquetes NuGet

  2. Buscar IronPDF: En la ventana abierta, haz clic en Buscar y escribe IronPdf en el cuadro de búsqueda.

    Cómo mostrar texto incrustado en PDF en .NET MAUI, Figura 5: Buscar IronPDF en la interfaz de usuario del Administrador de paquetes NuGet

    Buscar IronPDF en el administrador de paquetes NuGet UI

  3. Instalar IronPDF: Una vez que veas IronPDF en los resultados de búsqueda, haz clic en él. Asegúrate de que la casilla de verificación para tu proyecto en el panel derecho esté marcada y luego haz clic en Instalar.

    Acepte cualquier solicitud de permisos o condiciones de uso que aparezca durante el proceso de instalación.

    También puede instalar IronPDF mediante la consola del gestor de paquetes NuGet utilizando el siguiente comando:

Install-Package IronPdf

Creación de la interfaz de usuario

Ahora vamos a proceder a construir la interfaz de usuario (UI) para esta aplicación. El archivo MainPage.xaml servirá como la página de inicio. Tendrá un botón para abrir el archivo PDF y etiquetas para mostrar el nombre del archivo seleccionado y su contenido.

Procedamos a crear la interfaz de usuario:

Abra el archivo MainPage.xaml: Este archivo contiene el diseño de la página principal. Encontrará este archivo en la carpeta Páginas del Explorador de soluciones.

Definir el Diseño: Vamos a usar un control <Scroll View> que permite al usuario desplazarse a través del contenido de la página cuando no puede caber completamente en la pantalla. Dentro de la vista de desplazamiento, utilizaremos un <Stack Layout> para apilar nuestros controles verticalmente. Dentro del Stack Layout, tenemos tres <Frame> controles. Cada marco se utiliza para sostener una sección distinta de nuestra página, proporcionando un aspecto ordenado y organizado.

Añadir Controles: El primer Marco tiene un <VerticalStackLayout> que contiene un Label y un Button. La etiqueta muestra el nombre de la aplicación y el botón permite al usuario abrir un archivo PDF. El atributo Clicked tiene asignado el método OpenAndReadFile que se definirá más adelante en el archivo de código subyacente.

<VerticalStackLayout
    Spacing="25"
    Padding="30,0"
    VerticalOptions="Center">
    <Label
        Text="IronPDF MAUI Application"
        SemanticProperties.HeadingLevel="Level1"
        SemanticProperties.Description="IronPDF MAUI Application"
        FontSize="30"
        HorizontalOptions="Center"
        FontAttributes="Bold"

    />
    <Button
        x:Name="opneFileBtn"
        Text="Open Pdf File"
        SemanticProperties.Hint="Open PDF File"
        Clicked="OpenAndReadFile"
        HorizontalOptions="Center" />
</VerticalStackLayout>
<VerticalStackLayout
    Spacing="25"
    Padding="30,0"
    VerticalOptions="Center">
    <Label
        Text="IronPDF MAUI Application"
        SemanticProperties.HeadingLevel="Level1"
        SemanticProperties.Description="IronPDF MAUI Application"
        FontSize="30"
        HorizontalOptions="Center"
        FontAttributes="Bold"

    />
    <Button
        x:Name="opneFileBtn"
        Text="Open Pdf File"
        SemanticProperties.Hint="Open PDF File"
        Clicked="OpenAndReadFile"
        HorizontalOptions="Center" />
</VerticalStackLayout>
XML

El segundo Frame tiene un <HorizontalStackLayout> que contiene dos Labels. La primera etiqueta es para mostrar el texto estático "Nombre de archivo seleccionado:", y la segunda etiqueta llamada fileName muestra el nombre del archivo seleccionado.

<HorizontalStackLayout
    Spacing="25"
    Padding="30,0"
    VerticalOptions="Center">
    <Label
        Text="Selected File Name: "
        SemanticProperties.HeadingLevel="Level2"
        SemanticProperties.Description="Selected File Name"
        FontSize="18"
        HorizontalOptions="Center"
        FontAttributes="Bold"
    />
    <Label
        x:Name="fileName"
        Text=""
        SemanticProperties.HeadingLevel="Level3"
        SemanticProperties.Description="Selected File Name"
        FontSize="18"
        HorizontalOptions="Center" 
     />
</HorizontalStackLayout>
<HorizontalStackLayout
    Spacing="25"
    Padding="30,0"
    VerticalOptions="Center">
    <Label
        Text="Selected File Name: "
        SemanticProperties.HeadingLevel="Level2"
        SemanticProperties.Description="Selected File Name"
        FontSize="18"
        HorizontalOptions="Center"
        FontAttributes="Bold"
    />
    <Label
        x:Name="fileName"
        Text=""
        SemanticProperties.HeadingLevel="Level3"
        SemanticProperties.Description="Selected File Name"
        FontSize="18"
        HorizontalOptions="Center" 
     />
</HorizontalStackLayout>
XML

El tercer marco tiene un <VerticalStackLayout> que contiene dos etiquetas. La primera etiqueta muestra el texto estático "PDF Content", y la segunda etiqueta llamada Content muestra el contenido del archivo PDF.


<VerticalStackLayout>
    <Label
        Text="PDF Content"
        SemanticProperties.HeadingLevel="Level2"
        FontSize="25"
        FontAttributes="Bold"
        HorizontalOptions="Center" 
    />
    <Label
        x:Name="content"
        FontSize="18"
        HorizontalTextAlignment="Start"
    />
</VerticalStackLayout>

<VerticalStackLayout>
    <Label
        Text="PDF Content"
        SemanticProperties.HeadingLevel="Level2"
        FontSize="25"
        FontAttributes="Bold"
        HorizontalOptions="Center" 
    />
    <Label
        x:Name="content"
        FontSize="18"
        HorizontalTextAlignment="Start"
    />
</VerticalStackLayout>
XML

Su archivo final MainPage.xaml debería verse algo así:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                x:Class="IronPDF_Read_and_View.MainPage">
    <ScrollView>
        <StackLayout>
            <Frame>
                <VerticalStackLayout
                    Spacing="25"
                    Padding="30,0"
                    VerticalOptions="Center">
                    <Label
                        Text="IronPDF MAUI Application"
                        SemanticProperties.HeadingLevel="Level1"
                        SemanticProperties.Description="IronPDF MAUI Application"
                        FontSize="30"
                        HorizontalOptions="Center"
                        FontAttributes="Bold"

                    />
                    <Button
                        x:Name="opneFileBtn"
                        Text="Open PDF File"
                        SemanticProperties.Hint="Open PDF File"
                        Clicked="OpenAndReadFile"
                        HorizontalOptions="Center" />
                </VerticalStackLayout>
            </Frame>
            <Frame>
                <HorizontalStackLayout
                        Spacing="25"
                        Padding="30,0"
                        VerticalOptions="Center">
                    <Label
                            Text="Selected File Name: "
                            SemanticProperties.HeadingLevel="Level2"
                            SemanticProperties.Description="Selected File Name"
                            FontSize="18"
                            HorizontalOptions="Center"
                            FontAttributes="Bold"

                        />
                    <Label
                            x:Name="fileName"
                            Text=""
                            SemanticProperties.HeadingLevel="Level3"
                            SemanticProperties.Description="Selected File Name"
                            FontSize="18"
                            HorizontalOptions="Center" 
                        />
                </HorizontalStackLayout>
            </Frame>
            <Frame>
                <VerticalStackLayout>
                    <Label
                            Text="PDF Content"
                            SemanticProperties.HeadingLevel="Level2"
                            FontSize="25"
                        FontAttributes="Bold"
                            HorizontalOptions="Center" 
                        />
                    <Label
                        x:Name="content"
                        FontSize="18"
                        HorizontalTextAlignment="Start"
                        />
                </VerticalStackLayout>
            </Frame>
        </StackLayout>
    </ScrollView>
</ContentPage>
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                x:Class="IronPDF_Read_and_View.MainPage">
    <ScrollView>
        <StackLayout>
            <Frame>
                <VerticalStackLayout
                    Spacing="25"
                    Padding="30,0"
                    VerticalOptions="Center">
                    <Label
                        Text="IronPDF MAUI Application"
                        SemanticProperties.HeadingLevel="Level1"
                        SemanticProperties.Description="IronPDF MAUI Application"
                        FontSize="30"
                        HorizontalOptions="Center"
                        FontAttributes="Bold"

                    />
                    <Button
                        x:Name="opneFileBtn"
                        Text="Open PDF File"
                        SemanticProperties.Hint="Open PDF File"
                        Clicked="OpenAndReadFile"
                        HorizontalOptions="Center" />
                </VerticalStackLayout>
            </Frame>
            <Frame>
                <HorizontalStackLayout
                        Spacing="25"
                        Padding="30,0"
                        VerticalOptions="Center">
                    <Label
                            Text="Selected File Name: "
                            SemanticProperties.HeadingLevel="Level2"
                            SemanticProperties.Description="Selected File Name"
                            FontSize="18"
                            HorizontalOptions="Center"
                            FontAttributes="Bold"

                        />
                    <Label
                            x:Name="fileName"
                            Text=""
                            SemanticProperties.HeadingLevel="Level3"
                            SemanticProperties.Description="Selected File Name"
                            FontSize="18"
                            HorizontalOptions="Center" 
                        />
                </HorizontalStackLayout>
            </Frame>
            <Frame>
                <VerticalStackLayout>
                    <Label
                            Text="PDF Content"
                            SemanticProperties.HeadingLevel="Level2"
                            FontSize="25"
                        FontAttributes="Bold"
                            HorizontalOptions="Center" 
                        />
                    <Label
                        x:Name="content"
                        FontSize="18"
                        HorizontalTextAlignment="Start"
                        />
                </VerticalStackLayout>
            </Frame>
        </StackLayout>
    </ScrollView>
</ContentPage>
XML

Cuando los usuarios presionen el botón "Abrir archivo PDF", se activará el método OpenAndReadFile. Este método se definirá en nuestro archivo MainPage.xaml.cs (code-behind). Nuestros etiquetas, fileName y content, mostrarán respectivamente el nombre del archivo del archivo PDF seleccionado y el contenido del archivo PDF.

El código de MainPage.xaml.cs

La lógica de la aplicación reside en el archivo MainPage.xaml.cs, también conocido como el archivo de código auxiliar. Aquí, definimos el método OpenAndReadFile que es responsable de abrir el selector de archivos, permitir al usuario seleccionar un archivo PDF, extraer el contenido del archivo PDF seleccionado y mostrarlo en la interfaz de usuario.

Abre MainPage.xaml.cs: Encuentra este archivo en el Explorador de Soluciones bajo la carpeta Pages. Aquí es donde añadiremos nuestro método.

Agregar el campo filePath: En la parte superior de la clase MainPage, declara un campo string llamado filePath. Utilizaremos este campo para almacenar la ruta del archivo seleccionado.

string filePath = string.Empty;
string filePath = string.Empty;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Inicializar Componentes: En el constructor de MainPage, llame al método InitializeComponent. Este método se llama automáticamente para inicializar la página y sus controles.

public MainPage()
{
    InitializeComponent();
}
public MainPage()
{
    InitializeComponent();
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Implementar el método OpenAndReadFile: Este método está marcado como async porque vamos a usar la palabra clave await dentro de él. El método FilePicker.PickAsync se utiliza para abrir el selector de archivos. Cuando el usuario selecciona un archivo, el nombre del archivo se almacena en la etiqueta fileName, y la ruta del archivo en el campo filePath. La biblioteca IronPDF se utiliza para abrir el documento PDF y extraer todo el texto del mismo. A continuación, el texto extraído se asigna a la etiqueta de contenido.

private async void OpenAndReadFile(object sender, EventArgs e)
{
    FileResult result = await FilePicker.PickAsync();
    fileName.Text = result.FileName;
    filePath = result.FullPath;

    IronPdf.License.LicenseKey = "Your-License-Key";

    //Read PDF File
    var document = PdfDocument.FromFile(filePath);
    var pdfContent = document.ExtractAllText();
    content.Text = pdfContent;
}
private async void OpenAndReadFile(object sender, EventArgs e)
{
    FileResult result = await FilePicker.PickAsync();
    fileName.Text = result.FileName;
    filePath = result.FullPath;

    IronPdf.License.LicenseKey = "Your-License-Key";

    //Read PDF File
    var document = PdfDocument.FromFile(filePath);
    var pdfContent = document.ExtractAllText();
    content.Text = pdfContent;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

El método OpenAndReadFile ahora está completo. Se activará cuando el usuario haga clic en el botón Abrir archivo PDF. Debe reemplazar "Your-License-Key" con su clave de licencia real de IronPDF.

Aquí está el código completo:

using IronPdf;

public partial class MainPage : ContentPage
{
    string filePath = string.Empty;

    public MainPage()
    {
        InitializeComponent();
    }

    private async void OpenAndReadFile(object sender, EventArgs e)
    {
        FileResult result = await FilePicker.PickAsync();
        fileName.Text = result.FileName;
        filePath = result.FullPath;
        IronPdf.License.LicenseKey = "Your-License-Key";

        //Read PDF File
        var document = PdfDocument.FromFile(filePath);
        var pdfContent = document.ExtractAllText();
        content.Text = pdfContent;

    }
}
using IronPdf;

public partial class MainPage : ContentPage
{
    string filePath = string.Empty;

    public MainPage()
    {
        InitializeComponent();
    }

    private async void OpenAndReadFile(object sender, EventArgs e)
    {
        FileResult result = await FilePicker.PickAsync();
        fileName.Text = result.FileName;
        filePath = result.FullPath;
        IronPdf.License.LicenseKey = "Your-License-Key";

        //Read PDF File
        var document = PdfDocument.FromFile(filePath);
        var pdfContent = document.ExtractAllText();
        content.Text = pdfContent;

    }
}
Imports IronPdf

Partial Public Class MainPage
	Inherits ContentPage

	Private filePath As String = String.Empty

	Public Sub New()
		InitializeComponent()
	End Sub

	Private Async Sub OpenAndReadFile(ByVal sender As Object, ByVal e As EventArgs)
		Dim result As FileResult = Await FilePicker.PickAsync()
		fileName.Text = result.FileName
		filePath = result.FullPath
		IronPdf.License.LicenseKey = "Your-License-Key"

		'Read PDF File
		Dim document = PdfDocument.FromFile(filePath)
		Dim pdfContent = document.ExtractAllText()
		content.Text = pdfContent

	End Sub
End Class
$vbLabelText   $csharpLabel

Ejecutar la aplicación

Ahora que hemos configurado con éxito la interfaz de usuario y definido el comportamiento de la aplicación, ¡es hora de ver nuestra aplicación en acción!

Iniciar la aplicación: Para ejecutar la aplicación, puedes presionar F5 en tu teclado o hacer clic en el botón verde de 'Iniciar depuración' en la barra de herramientas en la parte superior de Visual Studio. Asegúrese de seleccionar el dispositivo de destino o emulador correcto en el menú desplegable situado junto al botón "Iniciar depuración".

Usar la aplicación: Una vez que se inicie la aplicación, verá una pantalla con el título "IronPDF MAUI Application" y un botón etiquetado como "Abrir archivo PDF".

Cómo mostrar texto incrustado en PDF en .NET MAUI, Figura 6: La interfaz de usuario de la aplicación IronPDF MAUI

La interfaz de usuario de la aplicación MAUI de IronPDF

Abrir un archivo PDF: Haga clic en el botón "Abrir archivo PDF". Se abrirá un selector de archivos que te permitirá buscar y seleccionar un archivo PDF desde tu dispositivo o emulador.

Cómo mostrar texto incrustado de PDF en .NET MAUI, Figura 7: Diálogo de selección de archivo

Diálogo de Selección de Archivos

Ver el contenido: Al seleccionar un archivo PDF, el nombre del archivo se mostrará bajo "Nombre del archivo seleccionado:", y el contenido del archivo PDF seleccionado se mostrará bajo "Contenido del PDF".

Cómo Mostrar Texto PDF Embebido en .NET MAUI, Figura 8: Mostrar contenido PDF desde el archivo PDF seleccionado

Mostrar contenido PDF del archivo PDF seleccionado

Tenga en cuenta que si el archivo PDF seleccionado es muy grande, puede tardar unos segundos en extraer y mostrar el texto. Además, recuerda que el formato del texto extraído puede no coincidir exactamente con el diseño original del archivo PDF, ya que los detalles del método ExtractAllText extraen el contenido de texto incrustado.

Conclusión

Este tutorial muestra cómo crear una aplicación .NET MAUI utilizando la biblioteca IronPDF para extraer y mostrar el contenido de texto de un archivo PDF. Este proyecto es un gran ejemplo de lo potentes y versátiles que son .NET MAUI y la biblioteca IronPDF a la hora de trabajar con archivos PDF en tus aplicaciones.

Además de extraer textos e imágenes en archivos PDF, la biblioteca IronPDF también admite una amplia gama de funcionalidades, incluyendo interactuar con formularios PDF, dividir archivos PDF, rasterizar páginas PDF a imágenes, autenticación detrás de formularios de inicio de sesión HTML, personalizar encabezados y pies de página en documentos PDF, así como admitir archivos CSS para archivos PDF con precisión de píxel.

IronPDF es un producto comercial con una funcionalidad robusta para la manipulación de PDF, y ofrece una prueba gratuita de IronPDF para que pruebes sus capacidades. Si encuentras el producto beneficioso para tus necesidades de desarrollo y decides usarlo para producción, los planes de licencia comienzan desde $749.

Chipego
Ingeniero de software
Chipego tiene una habilidad natural para escuchar que le ayuda a comprender los problemas de los clientes y a ofrecer soluciones inteligentes. Se unió al equipo de Iron Software en 2023, después de estudiar una licenciatura en Tecnología de la Información. IronPDF e IronOCR son los dos productos en los que Chipego se ha centrado, pero su conocimiento de todos los productos crece día a día, a medida que encuentra nuevas formas de ayudar a los clientes. Disfruta de lo colaborativa que es la vida en Iron Software, con miembros del equipo de toda la empresa que aportan su variada experiencia para contribuir a soluciones eficaces e innovadoras. Cuando Chipego está lejos de su escritorio, a menudo se le puede encontrar disfrutando de un buen libro o jugando al fútbol.
< ANTERIOR
Cómo mostrar un archivo PDF en ASP.NET Core
SIGUIENTE >
Cómo convertir PDF a PNG en C#