2011-07-21 29 views
30

Necesito convertir un archivo pdf a jpeg usando C#. Y la solución (biblioteca) debe ser gratuita.Guardar pdf a jpeg usando C#

He buscado mucha información, pero parece que no tengo nada claro.

Ya intenté con itextsharp y pdfbox (pero esto, el pdf2image es solo para Java, creo) sin éxito.

Intenté extraer las imágenes del pdf individualmente, pero tengo un error de parámetros no válidos cuando intento extraer las imágenes ... Parece que tienen una codificación extraña.

¿Alguien me puede recomendar cualquier biblioteca para guardar un pdf en un jpeg? Los ejemplos serán muy apreciados también.

Gracias!


SOLUCIÓN: Cómo convertir pdf a la imagen usando C#

  1. Ir a: http://www.codeproject.com/KB/cs/GhostScriptUseWithCSharp.aspx
  2. Descarga de la biblioteca
  3. Siga los pasos en la web
  4. Añadir su código a su aplicación, así (muy simple):

    //Transform pdf to jpg 
        PdfToImage.PDFConvert pp = new PDFConvert(); 
        pp.OutputFormat = "jpeg"; //format 
        pp.JPEGQuality = 100; //100% quality 
        pp.ResolutionX = 300; //dpi 
        pp.ResolutionY = 300; 
        pp.FirstPageToConvert = 1; //pages you want 
        pp.LastPageToConvert = 1; 
        pp.Convert(PATH_PDF+ "report.pdf", PATH_IMAGE + "name.jpg"); 
    
+1

Gracias por compartir la solución. –

+1

¡Perfecto! ¡Trabajó muy, muy bien! – Joe

Respuesta

12

La biblioteca pdfiumviewer podría ser útil aquí. También está disponible como nuget.

  1. Crea una nueva aplicación de winforms. Agregue nuget "PdfiumViewer" a él.
  2. Esto también agregará dos archivos dll nativos denominados "pdfium.dll" en las carpetas x86 y x64 a su proyecto. Ajuste "Copiar al directorio de salida" a "Copiar siempre".
  3. Pruebe el siguiente código (cambie las rutas para adaptarse a su configuración).

    try 
        { 
         using (var document = PdfiumViewer.PdfDocument.Load(@"input.pdf")) 
         { 
          var image = document.Render(0, 300, 300, true); 
          image.Save(@"output.png", ImageFormat.Png); 
         } 
        } 
        catch (Exception ex) 
        { 
         // handle exception here; 
        } 
    

    Editar 2: Se ha cambiado el código para mostrar que el índice de página es 0 basada como se ha señalado en el comentario de SC continuación

Edición 1: Actualización solución Ha intentado PDFsharp ?

This link might be helpful

+0

Me gusta PDFSharp ... parece manejar casi todo PDF +1 – War

+0

@Vijay Gill Hola. Gracias por la recomendación, pero no está funcionando. Extrae las imágenes pero el formato no es legible ...Parece que las imágenes no están en formato jpeg ... Creo que exportar todas las imágenes individuales es más difícil que exportar toda la página del pdf a la imagen (los dos métodos están bien para lo que quiero). – FrioneL

+0

Abra las imágenes en algún editor hexadecimal y vea los primeros bytes/caracteres iniciales para adivinar el formato mirando la firma. Al igual que BPM tiene BM, JPEG tiene JFIF, PNG y PNG en los primeros pocos bytes. Eso podría ayudarte a conocer el formato. –

0

Esta es la forma en que lo hice con PDFLibNet:

public void ConvertPDFtoHojas(string filename, String dirOut) 
{ 
    PDFLibNet.PDFWrapper _pdfDoc = new PDFLibNet.PDFWrapper(); 
    _pdfDoc.LoadPDF(filename); 

    for (int i = 0; i < _pdfDoc.PageCount; i++) 
    { 

     Image img = RenderPage(_pdfDoc, i); 

     img.Save(Path.Combine(dirOut, string.Format("{0}{1}.jpg", i,DateTime.Now.ToString("mmss")))); 

    } 
    _pdfDoc.Dispose(); 
    return; 
} 
public Image RenderPage(PDFLibNet.PDFWrapper doc, int page) 
{ 
    doc.CurrentPage = page + 1; 
    doc.CurrentX = 0; 
    doc.CurrentY = 0; 

    doc.RenderPage(IntPtr.Zero); 

     // create an image to draw the page into 
     var buffer = new Bitmap(doc.PageWidth, doc.PageHeight); 
     doc.ClientBounds = new Rectangle(0, 0, doc.PageWidth, doc.PageHeight); 
     using (var g = Graphics.FromImage(buffer)) 
     { 
      var hdc = g.GetHdc(); 
      try 
      { 
       doc.DrawPageHDC(hdc); 
      } 
      finally 
      { 
       g.ReleaseHdc(); 
      } 
     } 
     return buffer; 

} 
+1

parece que no es una biblioteca gratuita como se solicitó –