将图像文件转换为PDF






4.65/5 (37投票s)
一篇关于将图像文件(BMP、PNG、GIF、JPEG、TIFF)转换为PDF的文章

引言
大家好!这是我在这里发表的第一篇文章。它没有什么特别的,但是如果您需要在您的.NET应用程序中包含一个简单的图像 -> PDF转换器,它可以节省很多麻烦。请原谅可能出现的任何拼写或语法错误。
背景
一段时间前,我需要一个TIFF到PDF的转换器。我找到了这篇文章,名为 Convert Tiff To PDF,它用Visual C++ 6编写,并使用了 CXImage 库以及 LibTIFF。
正如那篇文章所说,它只支持传真格式的TIFF图像文件,不管这意味着什么。我没有深入研究,但可能这就是为什么在我的测试中,从这些 18个TIFF示例文件中,只有11个可以转换为Adobe Reader可以理解的东西。它们包含扫描的文本(来自书籍和手写),技术图纸和图片,所以我想它们涵盖了各种子格式。
所以在短暂的喜悦之后,我以为我找到了完美的解决方案,我又回到了 Google 寻找其他东西。幸运的是,我找到了名为 PDFSharp 的精彩的开源库,它拯救了局面。
Using the Code
PDFSharp库的目的是尽可能轻松地从头开始创建PDF文件。它公开的方法与.NET中的GDI+方法相似。所以你可以想象,编写一个PDF文件就像在Windows Forms Panel
的 Paint
事件中绘制“东西”(文本、形状、图像)。有了这个知识,将BMP/PNG/GIF/JPEG/TIFF文件转换为PDF文件就像这样
- 创建一个新的空PDF文档
- 添加一个空白页
- 获取
XGraphics
对象 - 从源文件创建
XImage
- 绘制图像
- 保存PDF文件
程序的关键部分在下面列出。我使用了一个 BackgroundWorker
,这样UI在转换过程中就不会挂起。
PdfDocument doc = new PdfDocument();
doc.Pages.Add(new PdfPage());
XGraphics xgr = XGraphics.FromPdfPage(doc.Pages[0]);
XImage img = XImage.FromFile(source);
xgr.DrawImage(img, 0, 0);
doc.Save(destinaton);
doc.Close();
结论
使用PDFSharp从图像创建PDF文件非常容易。
对于TIFF图像,缺点是速度明显低于 Convert Tiff To PDF 文章中描述的方法。我没有严格的数据,但作为估计,转换一个大图像(2.5 MB)大约需要2秒钟。另一种方法快10倍左右,但它只支持一些 TIFF文件。性能还不错,但如果你想使用这段代码在应用程序中处理多个文件,请确保使用UI异步处理。
注意:在下载档案中,我包含了PDFSharp库。如果您想要最新版本,请务必访问 他们的下载页面。
历史
2008年8月14日 - 文章的首次提交。