2009-10-29 6 views
14

Je voudrais convertir d'une image (comme jpg ou png) en PDF. J'ai vérifié ImageMagickNET, mais c'est beaucoup trop complexe pour mes besoins. Quelles sont les autres solutions ou codes .NET pour convertir une image en format PDF?JPG en PDF Convertisseur en C#

+0

Il y a aussi http://www.graphicsmagick.org/ qui est une version améliorée og ImageMagick (code sage). Je ne sais pas si vous trouverez des bibliothèques .NET pour cela, cependant. – csl

+0

S'agit-il d'une application de bureau/serveur/web? –

+0

C'est une application web, cependant cela ne fait aucune différence pour le type d'application car le codage sera le même – Coppermill

Répondre

14

iTextSharp le fait plutôt proprement et est open source. En outre, il a a very good accompanying book by the author que je recommande si vous finissez par faire des choses plus intéressantes comme la gestion des formulaires. Pour une utilisation normale, il existe de nombreuses ressources sur les listes de diffusion et les groupes de discussion pour des exemples de comment faire des choses communes.

EDIT: comme mentionné dans @Chirag's comment, @Darin's answer a du code qui compile définitivement avec les versions actuelles.

Exemple d'utilisation:

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 est open source, mais pas gratuit. Vous devrez soit payer les frais de licence, soit créer votre propre code source ouvert en raison de la licence AGPL qu'ils utilisent. Voyez vous-même ici: http://itextpdf.com/terms-of-use/index.php – asmo

+0

erreur est survenue lors erreur « iTextSharp.text.Document »: type utilisé dans une déclaration à l'aide doit être implicitement convertible en 'System.IDisposable' – Chirag

+0

@Chirag Je n'ai aucun souvenir de savoir si j'ai effectivement compilé le code à ce moment-là ou si la probabilité est que vous utilisez une autre version (voici [un exemple de code similaire] (http://stackoverflow.com/questions/28923080/itextsharp-can-not-convert-all-html-to-pdf) pour confirmer que cela avait du sens à un moment donné). Cependant, en général, s'il n'est pas jetable, il devrait être prudent d'omettre le 'using '. Attendez, regardez la réponse de [@ Darin] (http://stackoverflow.com/a/1642301/11635). Merci de pointer du doigt les vêtements de l'Empereur :) –

26

facile avec 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

Nice, +1 pour le rangement aussi. En tant qu'intérêt (je ne l'ai pas utilisé depuis longtemps), existe-t-il une façon plus simple d'utiliser le document avec IDisposable et/ou devrait-il y avoir un essai/enfin garder le Close? Probablement pas si imageStream est le détenteur/propriétaire réel de la ressource? –

+0

Je reçois "PdfWriter n'existe pas dans le contexte actuel" – Ladessa

+1

Comment ajouter la largeur et la hauteur de l'image en pdf? –

-3

De nombreux outils diff là-bas. Un que j'utilise est PrimoPDF (GRATUIT) http://www.primopdf.com/ vous allez imprimer le fichier et vous l'imprimez au format pdf sur votre disque. fonctionne sur Windows

+4

mauvaise réponse. il veut le faire de manière programmée (C# en particulier). – Raptor

4

PDFSharp est l'un de nos meilleurs atouts (nous l'utilisons pour la conversion TIFF et Text to PDF pour des centaines de demandes de règlement chaque jour).

http://pdfsharp.com/PDFsharp/

+0

J'ai utilisé PDFSharp mais le pdf est déformé. S'il vous plaît, voir ma question http://stackoverflow.com/questions/15437706/pdf-from-bitmap-wrong-size – Ladessa

0

ne sais pas si vous cherchez simplement des solutions libres/open source ou considérer les commerciaux ainsi. Mais si vous incluez des solutions commerciales, il existe une boîte à outils appelée EasyPDF SDK qui offre une API pour convertir des images (plus un certain nombre d'autres types de fichiers) en PDF. Il prend en charge C# et peut être trouvé ici:

http://www.pdfonline.com/ 

Le code C# regarderait comme suit:

Printer oPrinter = new Printer(); 

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

Pour être totalement transparent, je désavouer que je ne travaille pour les fabricants de easyPDF SDK (d'où ma prise en main), donc cette suggestion n'est pas sans biais personnel :) Mais n'hésitez pas à consulter la version d'évaluation si vous êtes intéressé. À votre santé!

2

Cette tâche peut être facilement réalisée avec l'aide de Docotic.Pdf library.

Voici un exemple qui crée PDF à partir d'images données (non seulement JPGs, en fait):

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); 
    } 
} 

Disclaimer: Je travaille pour le vendeur de la bibliothèque.

2

Un autre code de travail, essayez

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()); 
     } 
}