Saltar al contenido

Cómo renderizar archivos PDF usando C#

Contamos con la contestación a este inconveniente, o por lo menos eso deseamos. Si sigues con interrogantes compártelo en un comentario, que sin dudarlo te ayudaremos

Solución:

Google ha abierto su excelente motor de renderizado de PDF, PDFium, que escribió con Foxit Software.

Hay un paquete nuget de C# llamado PdfiumViewer que proporciona un contenedor de C# alrededor de PDFium y permite mostrar e imprimir archivos PDF.

Lo he usado y quedé muy impresionado con la calidad de la representación.


PDFium funciona directamente con flujos, por lo que no requiere que se escriba ningún dato en el disco.

Este es mi ejemplo de una aplicación WinForms

    public void LoadPdf(byte[] pdfBytes)
    
        var stream = new MemoryStream(pdfBytes);
        LoadPdf(stream)
    

    public void LoadPdf(Stream stream)
    
        // Create PDF Document
        var pdfDocument = PdfDocument.Load(stream);

        // Load PDF Document into WinForms Control
        pdfRenderer.Load(pdfDocument);
    

Editar: para obtener el renderizador de pdf control en WinForm: Agregue el PdfiumViewer paquete NuGet para el proyecto; abra la carpeta de paquetes de proyectos en el Explorador de Windows y arrastre el PdfiumViewer.dll archivo en el Toolbox ventana; Un control llamado PdfRenderer estará disponible para agregar:

Agregar el control PdfRenderer a WinForms

Hay algunas otras opciones en caso de que Adobe ActiveX no sea lo que está buscando (ya que Acrobat debe estar presente en la máquina del usuario y no puede enviarlo usted mismo).

Para crear la vista previa en PDF, primero eche un vistazo a otras discusiones sobre el tema en StackOverflow:

  • ¿Cómo puedo obtener una vista previa de los documentos?
  • ¿Obtener una vista previa jpeg de un pdf en Windows?
  • .NET abrir PDF en winform sin dependencias externas
  • Vista previa y visualización de PDF

En los dos últimos hablo de algunas cosas que puedes probar:

  • Puede obtener un procesador comercial (PDFViewForNet, PDFRasterizer.NET, ABCPDF, ActivePDF, XpdfRasterizer y otros en las otras respuestas…).
    Sin embargo, la mayoría son bastante caros, especialmente si lo único que te importa es hacer una vista previa/miniaturas simples.

  • Además del fragmento de código de Omar Shahine, hay un artículo de CodeProject que muestra cómo usar Adobe ActiveX, pero puede estar desactualizado, romperse fácilmente con los nuevos lanzamientos y su legalidad es confusa (básicamente, está bien para uso interno, pero puede no lo envía y no puede usarlo en un servidor para producir imágenes de PDF).

  • Puede echar un vistazo al código fuente de SumatraPDF, un visor de PDF OpenSource para Windows.

  • También está Poppler, un motor de renderizado que utiliza Xpdf como motor de renderizado. Todos estos son geniales, pero requerirán una buena cantidad de compromiso para que funcionen y se conecten con .Net y tienden a distribuirse bajo la licencia GPL.

  • Es posible que desee considerar el uso de GhostScript como intérprete porque la representación de páginas es un proceso bastante simple.
    El inconveniente es que deberá volver a empaquetarlo para instalarlo con su aplicación o convertirlo en un requisito previo (o al menos una parte de su proceso de instalación).
    No es un gran desafío, y ciertamente es más fácil que tener que masajear a los otros motores de renderizado para que cooperen con .Net.
    Hice un pequeño proyecto que encontrará en los foros de Developer Express como archivo adjunto.
    Tenga cuidado con los requisitos de licencia para GhostScript.
    Si no puede irse con eso, entonces el software comercial es probablemente su única opción.

Aquí está mi respuesta de una pregunta diferente.

Primero debe hacer referencia al control ActiveX de Adobe Reader

Biblioteca de tipos de controles de navegador de Adobe Acrobat 1.0

%archivos de programa&Archivos comunesAdobeAcrobatActiveXAcroPDF.dll

Luego, simplemente arrástrelo a su Windows Form desde la Caja de herramientas.

Y use un código como este para inicializar el Control ActiveX.

private void InitializeAdobe(string filePath)

    try
    
        this.axAcroPDF1.LoadFile(filePath);
        this.axAcroPDF1.src = filePath;
        this.axAcroPDF1.setShowToolbar(false);
        this.axAcroPDF1.setView("FitH");
        this.axAcroPDF1.setLayoutMode("SinglePage");
        this.axAcroPDF1.Show();
    
    catch (Exception ex)
    
        throw;
    

Cuando se cierre el formulario, asegúrese de desechar el control ActiveX

this.axAcroPDF1.Dispose();
this.axAcroPDF1 = null;

de lo contrario, Acrobat podría quedarse tirado.

Comentarios y calificaciones

Si te sientes impulsado, puedes dejar una crónica acerca de qué le añadirías a este ensayo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *