2010-03-16 62 views
8

Estoy buscando el componente .NET GUI (diferente de PDFsharp) que permite vista previa PDF 1-página documento.
Básicamente, necesito algo similar a PictureBox, donde puedo cargar mapas de bits y mostrarlos.Vista previa de PDF en C#

Sería genial si ese componente permite acercar y alejar la imagen.
Soluciones de software gratuito preferidas :)

+1

Al seguir esta pista, dejaremos de publicar en stackoverflow, ya que podemos encontrar casi todo en google ... Créame, he hecho investigaciones antes. Me interesan los componentes que los carteles probaron y encontraron útiles/flexibles y pueden aconsejar su uso. – Maciej

Respuesta

5

Otra opción es usar el control WebBrowser en su GUI. Utilizará el navegador para renderizar el PDF, pero yo haría esa ruta en lugar de perder el control con el componente Adobe Reader ActiveX.

Si no desea tener ningún tipo de lector de PDF disponible en el cliente, también puede convertirlo en un archivo gráfico a través de GhostScript y mostrarlo como un mapa de bits.

+1

¡Buena idea! ¿Puede darme algunos consejos sobre cómo puedo abrirlo en el navegador web? Estoy configurando webbrowser.URL en, por ejemplo, "file: // c: /temp/test.pdf" pero no funciona, abre Acro Reader como un proceso separado ... (Igual que IExplore ...) – Maciej

+0

OKAY Encontré la solución aquí: http://kb2.adobe.com/cps/331/331025.html – Maciej

2

puede utilizar el componente activex que viene con Acrobat Reader.

How to render pdfs using C#

+3

Sí, puede hacerlo, pero el usuario final debe tener Adobe Reader instalado ... – Rowan

+0

El lector es gratuito, así que esto no es gran cosa para mí ... – Maciej

1

ImageGear for .NET

No libre. Podría decirse que tiene un alcance más amplio que lo que le preocupa. Espero que sea de alguna manera útil.

+0

Parece interesante, pero el precio por cliente de tiempo de ejecución no es aceptable en mi caso. – Maciej

0

Quick PDF Library, my companies PDF SDK, lo ayudará a procesar archivos PDF. No es software gratuito, pero la licencia permite la distribución libre de regalías de las aplicaciones compiladas que construyes con él. Encontrar componentes de código abierto/gratuito para renderizar archivos PDF es un poco más complicado que otras tareas básicas de manipulación de PDF porque renderizar archivos PDF puede ser bastante difícil.

Aquí hay un código fuente de muestra C# que muestra cómo renderizar el PDF en el cuadro de imagen de su formulario.

private void Form1_Load(object sender, EventArgs e) 
{ 
    QuickPDFAX0718.PDFLibrary pdf = new QuickPDFAX0718.PDFLibrary(); 

    qp.UnlockKey("......Licence Key......"); 

    // Open PDF File 
    int Handle = qp.DAOpenFile("C:\\sample.pdf", null); 

    // Get Total Number of Pages in a PDF File 
    int PageCount = qp.DAGetPageCount(Handle); 

    int PageNo = 1; 

    // It will get Reference of page 1 from PDF file 
    int PageRefNo = qp.DAFindPage(Handle, PageNo); 

    // You can change this parameter for Zoom In/Zoom Out purpose 
    int Zoom = 76; 
    double pageWidth = qp.DAGetPageWidth(Handle, PageRefNo)/Zoom; 
    double pageHeight = qp.DAGetPageHeight(Handle, PageRefNo)/Zoom; 

    // DPI use for rendering the page. Increase DPI will increate quality of image 
    int dpi = 92; 

    // Calculate Dimension of final output image 
    Bitmap b = new Bitmap(Convert.ToInt32(pageWidth * dpi), Convert.ToInt32(pageHeight * dpi)); 

    // This will Draw render image on GDI 
    using (Graphics g = Graphics.FromImage(b)) 
    { 
    IntPtr dc = g.GetHdc(); 
    qp.DARenderPageToDC(Handle, PageRefNo, dpi, (int)dc); 
    g.ReleaseHdc(dc); 
    } 

    // Assigne rendered image to PictureBox Control which will display PDF on Windows Form. 
    pictureBox1.Image = b; 
    pictureBox1.BorderStyle = BorderStyle.Fixed3D; 
} 

La biblioteca no incluye funciones integradas para ayudarle con el zoom, pero ya que estás reproduciendo el archivo PDF como una imagen BMP que puede hacerse cargo del zoom con bastante facilidad.

+0

Se ve bien de hecho. Pero más fácil y más barato para mí es usar el método de @bryanjonker :) – Maciej

+0

Más fácil y más barato para usted, pero no necesariamente para su usuario final. ;-) – Rowan

2

pregunta es bastante antiguo, pero las soluciones propuestas tienen inconvenientes significativos:

  • control WebBrowser se basa en la IE y que puede mostrar documentos PDF (esto es cierto sólo si se ha instalado Adobe Reader)
  • Ghostscript está licenciado bajo AGPL y requiere una licencia bastante cara para su uso en proyectos de fuente cerrada/comerciales.

Afortunadamente existe una alternativa gratuita: las herramientas poppler (basadas en la base de código xpdf) que están licenciadas bajo GPL y se pueden usar como utilidad de consola. Desde el código .NET, puede ejecutarse con System.Diagnostics.Process.

Para simplificar el uso de las herramientas que hemos desarrollado poppler NReco.PdfRenderer envoltorio .NET que incorpora ventanas poppler binarios (que están extraídos en el primer uso) y proporciona API simple para renderizar las páginas PDF a la imagen:

var pdfToImg = new NReco.PdfRenderer.PdfToImageConverter(); 
Image firstPageImg = pdfToImg.GenerateImage("test.pdf", 1); 

Componente no es gratis, pero su precio es muy razonable.

+0

System.Diagnostics.Process aún requiere Adobe Reader para que la asociación de archivos funcione, pero +1 para simplificar. – OldDog

+0

@OldDog System.Diagnostics.Process no necesita Adobe Reader, y la herramienta poppler (pdftoppm) no tiene ninguna dependencia en Adobe Reader. Produce imágenes (png o jpg) que se pueden mostrar como cualquier otro archivo de imagen. –

+0

Para aclarar, solo me refería a System.Diagnostics.Process, que se basa en una asociación de archivos a .PDF. Antes de Windows 10, no existía un lector de PDF de Windows nativo. Incluso con Windows 10, usa IE (Edge) como el lector nativo, lo que acepto es un inconveniente. Actualmente estoy usando System.Diagnostics.Process según su sugerencia y dado que Adobe Reader está escrito en mi humilde opinión y se usa de forma bastante universal, y sí gratis, se adapta bien a mis necesidades debido a que es básicamente simplicidad de declaración única. Si está diciendo que puede usar poppler, entonces simplemente no estamos de acuerdo con la asociación. – OldDog

Cuestiones relacionadas