2009-10-29 87 views
14

我想從圖像(如jpg或png)轉換爲PDF。JPG到PDF轉換器在C#

我已經簽出ImageMagickNET,但對我的需求來說太複雜了。

還有哪些.NET解決方案或代碼可用於將圖像轉換爲PDF?

+0

還有http://www.graphicsmagick.org/這是一個改進版OG的ImageMagick(代碼明智)。不過,我不知道你是否會找到.NET庫。 – csl 2009-10-29 08:30:19

+0

它適用於桌面/服務器/ Web應用程序嗎? – 2009-10-29 08:32:27

+0

這是一個web應用程序,但是它不會對應用程序的類型產生任何影響,因爲編碼將會是相同的 – Coppermill 2009-10-30 09:38:42

回答

14

iTextSharp它乾得很乾淨,是開源的。另外,它有a very good accompanying book by the author,我建議如果你最終做更多有趣的事情,如管理表單。對於正常使用情況,郵件列表和新聞組上有大量資源用於處理常見事情的示例。

編輯:正如暗示在@Chirag's comment,@Darin's answer有代碼,肯定與當前版本編譯。

用法示例:

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是開源的,但不是免費的。由於他們使用的AGPL許可證,您將不得不支付許可證費用或開放自己的代碼。 自己看看這裏: http://itextpdf.com/terms-of-use/index.php – asmo 2012-10-05 18:00:23

+0

越來越錯誤錯誤「iTextSharp.text.Document」:在使用語句中使用的類型必須可隱可轉換爲'System.IDisposable' – Chirag 2015-10-10 07:29:28

+0

@Chirag我沒有回憶我是否實際編譯了代碼或者是否可能是您使用的是其他版本(這裏是[類似代碼示例](http:///stackoverflow.com/questions/28923080/itextsharp-can-not-convert-all-html-to-pdf)以確認它在某一點上有意義)。但是,一般情況下,如果它不是一次性的,那麼省略「使用」應該是安全的。請繼續,看看[@ Darin的答案](http://stackoverflow.com/a/1642301/11635)。謝謝指向皇帝的衣服:) – 2015-10-10 08:01:10

26

易與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

不錯,爲整理+1也是如此。作爲一個感興趣的問題(我沒有用過它的年齡),是否有一個更清潔的方式來使用Document w/IDisposable和/或應該有一個嘗試/最後守衛關閉?假設imageStream是實際的資源擁有者/所有者,大概不會。 – 2009-10-29 09:54:55

+0

我收到「PdfWriter在當前上下文中不存在」 – Ladessa 2013-01-14 15:04:52

+1

如何在pdf中添加圖像寬度和高度? – 2015-12-09 14:20:40

-3

許多差異工具在那裏。我使用的是PrimoPDF(免費)http://www.primopdf.com/你去打印文件,並打印到您的驅動器上的PDF格式。在Windows上工作

+4

錯誤的答案。他想用編程的方式來完成它(特定的C#)。 – Raptor 2009-10-29 08:40:03

4

我們曾經很幸運的一款產品是PDFSharp(我們每天使用它用於TIFF和Text to PDF轉換以獲得數百種醫療索賠)。

http://pdfsharp.com/PDFsharp/

+0

我已經使用PDFSharp,但pdf是扭曲的。請參閱我的問題http://stackoverflow.com/questions/15437706/pdf-from-bitmap-wrong-size – Ladessa 2013-03-18 12:11:21

0

不知道,如果你正在尋找的只是自由/開源解決方案或考慮商業的爲好。但是,如果您包含商業解決方案,則有一個名爲EasyPDF SDK的工具包,它提供了一個用於將圖像(以及其他多種文件類型)轉換爲PDF的API。它支持C#和可以在這裏找到:

http://www.pdfonline.com/ 

的C#代碼將如下所示:

Printer oPrinter = new Printer(); 

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

是完全透明的,我應該放棄,我做EasyPDF SDK的製造商合作(因此我的手柄),所以這個建議不是沒有一些個人偏見:)但如果你有興趣,隨時查看eval版本。乾杯!

2

這樣的任務可以通過Docotic.Pdf library幫助輕鬆完成。

下面是從給定的圖像創建PDF(不僅是JPG格式,實際上)樣本:

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

聲明:我在圖書館的供應商合作。

2

另一個工作代碼,試試吧

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