2009-10-29 147 views
14

Me gustaría convertir de una imagen (como jpg o png) a PDF.Convertidor de JPG a PDF en C#

He comprobado ImageMagickNET, pero es demasiado complejo para mis necesidades.

¿Qué otras soluciones .NET o código hay para convertir una imagen a PDF?

+0

También hay http://www.graphicsmagick.org/ que es una mejor versión de ImageMagick og (código-wise). No obstante, no sé si encontrará bibliotecas .NET para ello. – csl

+0

¿Es para una aplicación de escritorio/servidor/web? –

+0

Es una aplicación web, sin embargo, eso no hace ninguna diferencia en el tipo de aplicación ya que la codificación será la misma – Coppermill

Respuesta

14

iTextSharp lo hace bastante limpio y es de código abierto. Además, tiene a very good accompanying book by the author que recomiendo si terminas haciendo cosas más interesantes como administrar formularios. Para el uso normal, hay muchos recursos en listas de correo y grupos de noticias para ejemplos de cómo hacer cosas comunes.

EDITAR: aludido en @Chirag's comment, @Darin's answer tiene un código que definitivamente se compila con las versiones actuales.

Ejemplo de uso:

public static void ImagesToPdf(string[] imagepaths, string pdfpath) 
{ 
    using(var doc = new iTextSharp.text.Document()) 
    { 
     iTextSharp.text.pdf.PdfWriter.GetInstance(doc, new FileStream(pdfpath, FileMode.Create)); 
     doc.Open(); 
     foreach (var item in imagepaths) 
     { 
      iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(item); 
      doc.Add(image); 
     } 
    } 
} 

+7

iTextSharp es de código abierto, pero no es gratuito. Deberá pagar la tarifa de la licencia o crear su propio código de código abierto debido a la licencia de AGPL que está utilizando. Vea usted mismo aquí: http://itextpdf.com/terms-of-use/index.php – asmo

+0

conseguir un error de error \t \t 2 'iTextSharp.text.Document': tipo utilizado en una instrucción using debe ser implícitamente convertible a 'System.IDisposable' – Chirag

+0

@Chirag No recuerdo si realmente compilé el código en ese momento o si la probabilidad es que esté usando otra versión (aquí hay [un ejemplo de código similar] (http://stackoverflow.com/questions/28923080/itextsharp-can-not-convert-all-html-to-pdf) para confirmar que tiene sentido en algún momento). Sin embargo, en general, si no es Desechable, debería ser seguro omitir el "uso". Espera, echa un vistazo a [@ Darin's answer] (http://stackoverflow.com/a/1642301/11635). Gracias por señalar la ropa del Emperador :) –

26

fácil con iTextSharp:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Document document = new Document(); 
     using (var stream = new FileStream("test.pdf", FileMode.Create, FileAccess.Write, FileShare.None)) 
     { 
      PdfWriter.GetInstance(document, stream); 
      document.Open(); 
      using (var imageStream = new FileStream("test.jpg", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
      { 
       var image = Image.GetInstance(imageStream); 
       document.Add(image); 
      } 
      document.Close(); 
     } 
    } 
} 
+0

Bueno, +1 para la limpieza también. Como cuestión de interés (no lo he usado en mucho tiempo), ¿existe una forma más clara de utilizar el documento con IDisposable y/o debería haber un intento/finalmente proteger el cierre? ¿Presumiblemente no si imageStream es el titular/propietario real del recurso? –

+0

Me aparece "PdfWriter no existe en el contexto actual" – Ladessa

+1

¿Cómo agregar ancho y alto de la imagen en pdf? –

-3

Muchas herramientas de diferenciación que hay. Uno que uso es PrimoPDF (GRATIS) http://www.primopdf.com/ para imprimir el archivo y lo imprime en formato pdf en su disco. funciona en Windows

+4

respuesta incorrecta. él quiere hacerlo en una forma de programación (C# en específico). – Raptor

4

Uno con el que hemos tenido mucha suerte es PDFSharp (lo utilizamos para conversión de TIFF y texto a PDF para cientos de reclamaciones médicas todos los días).

http://pdfsharp.com/PDFsharp/

+0

He usado PDFSharp pero el pdf es distorsionado. Por favor, vea mi pregunta http://stackoverflow.com/questions/15437706/pdf-from-bitmap-wrong-size – Ladessa

0

no está seguro de si usted está buscando soluciones de código abierto sólo Libre/o considerando los comerciales también. Pero si incluye soluciones comerciales, hay un kit de herramientas llamado EasyPDF SDK que ofrece una API para convertir imágenes (más varios otros tipos de archivos) a PDF. Es compatible con C# y se puede encontrar aquí:

http://www.pdfonline.com/ 

El código C# se vería de la siguiente manera:

Printer oPrinter = new Printer(); 

ImagePrintJob oPrintJob = oPrinter.ImagePrintJob; 
oPrintJob.PrintOut(imageFile, pdfFile); 

para ser totalmente transparente, debería negar que yo trabajo para los fabricantes de easyPDF SDK (de ahí mi manejo), por lo que esta sugerencia no es sin algún sesgo personal :) Pero no dude en consultar la versión de evaluación si está interesado. ¡Aclamaciones!

2

Tal tarea se puede hacer fácilmente con la ayuda de Docotic.Pdf library.

Aquí es un ejemplo que crea PDF a partir de imágenes dadas (no sólo los archivos JPG, en realidad):

public static void imagesToPdf(string[] images, string pdfName) 
{ 
    using (PdfDocument pdf = new PdfDocument()) 
    { 
     for (int i = 0; i < images.Length; i++) 
     { 
      if (i > 0) 
       pdf.AddPage(); 

      PdfPage page = pdf.Pages[i]; 
      string imagePath = images[i]; 
      PdfImage pdfImage = pdf.AddImage(imagePath); 

      page.Width = pdfImage.Width; 
      page.Height = pdfImage.Height; 
      page.Canvas.DrawImage(pdfImage, 0, 0); 
     } 

     pdf.Save(pdfName); 
    } 
} 

responsabilidad: Yo trabajo para el proveedor de la biblioteca.

2

Otro código de trabajo, probarlo

public void ImagesToPdf(string[] imagepaths, string pdfpath) 
{ 
     iTextSharp.text.Rectangle pageSize = null; 

     using (var srcImage = new Bitmap(imagepaths[0].ToString())) 
     { 
      pageSize = new iTextSharp.text.Rectangle(0, 0, srcImage.Width, srcImage.Height); 
     } 

     using (var ms = new MemoryStream()) 
     { 
      var document = new iTextSharp.text.Document(pageSize, 0, 0, 0, 0); 
      iTextSharp.text.pdf.PdfWriter.GetInstance(document, ms).SetFullCompression(); 
      document.Open(); 
      var image = iTextSharp.text.Image.GetInstance(imagepaths[0].ToString()); 
      document.Add(image); 
      document.Close(); 

      File.WriteAllBytes(pdfpath+"cheque.pdf", ms.ToArray()); 
     } 
}