65.9K
CodeProject 正在变化。 阅读更多。
Home

将图像文件转换为PDF

2008年8月15日

CPOL

2分钟阅读

viewsIcon

487528

downloadIcon

41283

一篇关于将图像文件(BMP、PNG、GIF、JPEG、TIFF)转换为PDF的文章

ImageToPdf.JPG

引言

大家好!这是我在这里发表的第一篇文章。它没有什么特别的,但是如果您需要在您的.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 PanelPaint 事件中绘制“东西”(文本、形状、图像)。有了这个知识,将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日 - 文章的首次提交。

© . All rights reserved.