Cómo renderizar archivos PDF usando C #

Quiero cargar y dibujar archivos PDF gráficamente usando C #. No necesito editarlos ni nada, simplemente renderizarlos en un nivel de zoom determinado.

Las bibliotecas de pdf que he encontrado parecen estar enfocadas en la generación. ¿Cómo hago esto?

Gracias.

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 de PDF, primero eche un vistazo a algunas otras discusiones sobre el tema en StackOverflow:

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

En las últimas dos hablo de algunas cosas que puedes probar:

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

  • 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, se puede romper fácilmente con los nuevos lanzamientos y su legalidad es turbia (básicamente está bien para uso interno pero puede no lo use y no puede usarlo en un servidor para producir imágenes de PDF).

  • Podría echarle un vistazo al código fuente de SumatraPDF , un visor de PDF de OpenSource para Windows.

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

  • Es posible que desee considerar el uso de GhostScript como intérprete porque el procesamiento de páginas es un proceso bastante simple.
    El inconveniente es que tendrá que volver a empaquetarlo para instalarlo con su aplicación o hacerlo 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 dar masajes 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 a través de.
    Si no puede irse con eso, probablemente el software comercial sea su única opción.

Google ha abierto fonts de su excelente motor de procesamiento 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 que los archivos PDF se muestren e impriman.

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


PDFium trabaja directamente con las transmisiones, por lo que no requiere que se escriban datos 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 control pdfRenderer en WinForm: Agregue el paquete PdfiumViewer NuGet al proyecto; abra la carpeta de paquetes de proyectos en Windows Explorer y arrastre el archivo PdfiumViewer.dll a la ventana de Toolbox ; Un control llamado PdfRenderer estará disponible para agregar:

Agregar control PdfRenderer a WinForms

Aquí está mi respuesta de una pregunta diferente.

Primero debe hacer referencia al control Adobe Reader ActiveX

Biblioteca de tipos de control del navegador de Adobe Acrobat 1.0

% programfiles & \ Common Files \ Adobe \ Acrobat \ ActiveX \ AcroPDF.dll

Luego, simplemente arrástralo a tu Windows Form desde Toolbox.

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 cierra su Formulario, asegúrese de disponer del control ActiveX

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

de lo contrario, Acrobat podría quedar tendido.

ABCpdf hará esto y muchas otras cosas para ti.

No solo presentará su PDF en una variedad de formatos (por ejemplo, JPEG, GIF, PNG, TIFF, JPEG 2000, vectores EPS, SVG, Flash y PostScript) sino que también puede hacerlo en una variedad de espacios de color (por ejemplo, gris, RGB, CMYK) y profundidades de bit (por ejemplo, 1, 8, 16 bits por componente).

¡Y eso es solo parte de lo que hará!

Para más detalles ver:

http://www.websupergoo.com/abcpdf-8.htm

Ah, y puedes obtener licencias gratuitas a través del esquema de licencia gratuita.

Hay problemas de EULA con el uso de Acrobat para hacer PDF. Si desea ir por esta ruta, compruebe los aspectos legales con mucho cuidado primero.

PdfiumViewer es genial, pero está estrechamente unido a System.Drawing y WinForms. Por esta razón, creé mi propio contenedor en PDFium: PDFiumSharp

Las páginas se pueden representar en un PDFiumBitmap que a su vez se puede guardar en el disco o exponer como una secuencia . De esta forma, cualquier marco capaz de cargar una imagen en formato BMP desde una secuencia puede usar esta biblioteca para mostrar páginas en formato PDF.

Por ejemplo, en una aplicación WPF puede usar el siguiente método para representar una página en pdf:

 using System.Linq; using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging; using PDFiumSharp; static class PdfRenderer { public static ImageSource RenderPage(string filename, int pageIndex, string password = null, bool withTransparency = true) { using (var doc = new PdfDocument(filename, password)) { var page = doc.Pages[pageIndex]; using (var bitmap = new PDFiumBitmap((int)page.Width, (int)page.Height, withTransparency)) { page.Render(bitmap); return new BmpBitmapDecoder(bitmap.AsBmpStream(), BitmapCreateOptions.None, BitmapCacheOption.OnLoad).Frames.First(); } } } } 

Dynamic PDF Viewer del software ceTe puede hacer lo que está buscando. He usado su software de generador y estaba muy contento con él.

http://www.dynamicpdf.com/

Use el control del navegador web. Esto requiere que se instale Adobe Reader, pero lo más probable es que lo tenga de todos modos. Establezca la URL del control en la ubicación del archivo.

La lib más fácil que he usado es la biblioteca de Paolo Gios . Básicamente

 Create GiosPDFDocument object Create TextArea object Add text, images, etc to TextArea object Add TextArea object to PDFDocument object Write to stream 

Este es un gran tutorial para comenzar.

Descargo de responsabilidad: trabajo para Atalasoft

Tenemos un Rasterizador PDF que puede hacer esto para .NET

http://www.atalasoft.com/products/dotimage/pdfrasterizer/

Esto parece lo correcto: http://code.google.com/p/lib-pdf/

Puedes googlear para el componente del visor de PDF y obtener más de unos pocos hits.

Sin embargo, si realmente no necesita insertarlos en su aplicación, puede requerir Acrobat Reader o FoxIt (o agruparlo, si cumple con sus respectivos términos de licencia) y pagarlo. No es tan genial, pero hace el trabajo gratis.