2009-10-29 40 views
14

Tôi muốn chuyển đổi từ một hình ảnh (như jpg hoặc png) thành PDF.JPG to PDF Trình chuyển đổi trong C#

Tôi đã kiểm tra ImageMagickNET, nhưng điều này quá phức tạp đối với nhu cầu của tôi.

Có các giải pháp hoặc mã .NET nào khác để chuyển đổi hình ảnh sang PDF?

+0

Cũng http://www.graphicsmagick.org/ mà là một phiên bản cải tiến og ImageMagick (mã khôn ngoan) là. Tôi không biết nếu bạn sẽ tìm thấy thư viện NET cho nó, mặc dù. – csl

+0

Ứng dụng dành cho máy tính để bàn/máy chủ/ứng dụng web? –

+0

Đó là một ứng dụng web, tuy nhiên điều đó không tạo ra bất kỳ sự khác biệt nào đối với loại ứng dụng vì mã hóa sẽ giống nhau – Coppermill

Trả lời

14

iTextSharp hiện nó khá sạch sẽ và là nguồn mở. Ngoài ra, nó có a very good accompanying book by the author mà tôi khuyên bạn nên nếu bạn kết thúc làm những việc thú vị hơn như quản lý biểu mẫu. Đối với việc sử dụng bình thường, có rất nhiều tài nguyên trên danh sách gửi thư và nhóm tin cho các mẫu làm thế nào để làm những việc chung.

CHỈNH SỬA: như được mô tả trong @Chirag's comment, @Darin's answer có mã chắc chắn biên dịch với các phiên bản hiện tại.

sử dụng Ví dụ:

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 là mã nguồn mở, nhưng không miễn phí. Bạn sẽ phải trả phí giấy phép hoặc tạo mã nguồn mở của riêng bạn vì giấy phép AGPL mà họ đang sử dụng. Xem cho chính mình ở đây: http://itextpdf.com/terms-of-use/index.php – asmo

+0

nhận Lỗi lỗi 'iTextSharp.text.Document': loại sử dụng trong một tuyên bố sử dụng phải được ngầm convertible to 'System.IDisposable' – Chirag

+0

@Chirag Tôi không có hồi ức về việc liệu tôi có thực sự biên dịch mã vào lúc đó hay khả năng bạn đang sử dụng một phiên bản khác (đây là [ví dụ về mã tương tự] (http://stackoverflow.com/questions/28923080/itextsharp-can-not-convert-all-html-to-pdf) để xác nhận nó có ý nghĩa tại một số điểm). Tuy nhiên nói chung nếu nó không phải là dùng một lần, nó sẽ được an toàn để bỏ qua 'sử dụng'. Hãy đợi, hãy xem câu trả lời của [@ ​​Darin] (http://stackoverflow.com/a/1642301/11635). Cảm ơn vì đã chỉ vào quần áo của Hoàng đế :) –

26

dễ dàng với 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

Tốt, +1 cho việc dọn dẹp. Như một vấn đề quan tâm (tôi không thích sử dụng nó trong lứa tuổi), là có một cách sạch hơn để sử dụng tài liệu w/IDisposable và/hoặc nên có một thử/cuối cùng bảo vệ đóng? Có lẽ không phải nếu imageStream là chủ sở hữu/chủ sở hữu tài nguyên thực sự? –

+0

Tôi nhận được "PdfWriter không tồn tại trong ngữ cảnh hiện tại" – Ladessa

+1

Làm cách nào để thêm chiều rộng và chiều cao của hình ảnh bằng pdf? –

-3

Nhiều công cụ diff ra khỏi đó. Một trong những tôi sử dụng là PrimoPDF (miễn phí) http://www.primopdf.com/ bạn đi để in các tập tin và bạn in nó sang định dạng pdf vào ổ đĩa của bạn. hoạt động trên Windows

+4

câu trả lời sai. anh ấy muốn làm điều đó theo cách lập trình (C# cụ thể). – Raptor

4

Một trong những điều chúng tôi đã may mắn là PDFSharp (chúng tôi sử dụng nó để chuyển đổi TIFF và Text thành PDF cho hàng trăm tuyên bố y tế mỗi ngày).

http://pdfsharp.com/PDFsharp/

+0

Tôi đã sử dụng PDFSharp nhưng pdf bị bóp méo. Vui lòng xem câu hỏi của tôi http://stackoverflow.com/questions/15437706/pdf-from-bitmap-wrong-size – Ladessa

0

không chắc chắn nếu bạn đang tìm kiếm/giải pháp mã nguồn mở miễn phí chỉ hoặc xem xét những thương mại là tốt. Nhưng nếu bạn đang bao gồm các giải pháp thương mại, có một bộ công cụ gọi là EasyPDF SDK cung cấp một API để chuyển đổi hình ảnh (cộng với một số loại tệp khác) sang PDF. Nó hỗ trợ C# và có thể được tìm thấy ở đây:

http://www.pdfonline.com/ 

C# mã sẽ trông như sau:

Printer oPrinter = new Printer(); 

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

Để được hoàn toàn minh bạch, tôi nên từ chối mà tôi làm việc cho các nhà sản xuất của EasyPDF SDK (do đó xử lý của tôi), vì vậy đề nghị này không phải là không có một số thiên vị cá nhân :) Nhưng cảm thấy tự do để kiểm tra phiên bản eval nếu bạn quan tâm. Chúc mừng!

2

Nhiệm vụ này có thể dễ dàng thực hiện với sự trợ giúp của Docotic.Pdf library.

Đây là một mẫu tạo PDF từ hình ảnh nhất định (không chỉ JPG, trên thực tế):

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: Tôi làm việc cho các nhà cung cấp của thư viện.

2

Một mã làm việc, hãy thử nó

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()); 
     } 
} 
Các vấn đề liên quan