c#,将pdf文件转换成图片文件。

来源:互联网 发布:问答软件名字 编辑:程序博客网 时间:2024/04/27 10:42

本文采用Adobe Acrobat9.0的COM组件,将Pdf文件的每一页转换成对应的图片文件。

开发环境:VS2010,.Net Framework4.0,Adobe Acrobat9.0。

工程中添加COM引用:Adobe Acrobat 9.0 Type Library(必须装了Adobe Acrobat9.0才会有)。

 

思路:

1、需要用到的COM对象:

    1)CAcroPDDoc:Acrobat文档对象。

    2)CAcroPDPage:页对象。

    3)CAcroRect:用来描述页中一个矩形区域的对象。

    4)CAcroPoint:实际上代表的是Size。

 

2、转换过程:

   1)打开文档。

   2)取出每一页。

   3)获取每一页的大小,生成一个表示该页的矩形区域。

   4)将当前页的指定区域编码成图片,并且复制到剪贴板中。

   5)将剪贴板中的图片取出,保存为图片文件。

 

转换函数代码:

        public static void ConvertPdf2Image(string pdfFilePath, string imageDirectoryPath,            int beginPageNum, int endPageNum, ImageFormat format, double zoom = 1) {                        Acrobat.CAcroPDDoc pdfDoc = null;            Acrobat.CAcroPDPage pdfPage = null;            Acrobat.CAcroRect pdfRect = null;            Acrobat.CAcroPoint pdfPoint = null;            //1)            //生成操作Pdf文件的Com对象              pdfDoc = (Acrobat.CAcroPDDoc)Microsoft.VisualBasic.Interaction.CreateObject("AcroExch.PDDoc", "");            //检查输入参数              if (!pdfDoc.Open(pdfFilePath)) {                throw new FileNotFoundException(string.Format("源文件{0}不存在!", pdfFilePath));            }            if (!Directory.Exists(imageDirectoryPath)) {                Directory.CreateDirectory(imageDirectoryPath);            }            if (beginPageNum <= 0) {                beginPageNum = 1;            }            if (endPageNum > pdfDoc.GetNumPages() || endPageNum <= 0) {                endPageNum = pdfDoc.GetNumPages();            }            if (beginPageNum > endPageNum) {                throw new ArgumentException("参数\"beginPageNum\"必须小于\"endPageNum\"!");            }            if (format == null) {                format = ImageFormat.Png;            }            if (zoom <= 0) {                zoom = 1;            }            //转换              for (int i = beginPageNum; i <= endPageNum; i++) {                //2)                //取出当前页                  pdfPage = (Acrobat.CAcroPDPage)pdfDoc.AcquirePage(i - 1);                //3)                //得到当前页的大小                   pdfPoint = (Acrobat.CAcroPoint)pdfPage.GetSize();                //生成一个页的裁剪区矩形对象                   pdfRect = (Acrobat.CAcroRect)Microsoft.VisualBasic.Interaction.CreateObject("AcroExch.Rect", "");                //计算当前页经缩放后的实际宽度和高度,zoom==1时,保持原比例大小                   int imgWidth = (int)((double)pdfPoint.x * zoom);                int imgHeight = (int)((double)pdfPoint.y * zoom);                //设置裁剪矩形的大小为当前页的大小                   pdfRect.Left = 0;                pdfRect.right = (short)imgWidth;                pdfRect.Top = 0;                pdfRect.bottom = (short)imgHeight;                //4)                //将当前页的裁剪区的内容编成图片后复制到剪贴板中                  pdfPage.CopyToClipboard(pdfRect, 0, 0, (short)(100 * zoom));                //5)                IDataObject clipboardData = Clipboard.GetDataObject();                //检查剪贴板中的对象是否是图片,如果是图片则将其保存为指定格式的图片文件                  if (clipboardData.GetDataPresent(DataFormats.Bitmap)) {                    Bitmap pdfBitmap = (Bitmap)clipboardData.GetData(DataFormats.Bitmap);                    pdfBitmap.Save(                        Path.Combine(imageDirectoryPath, i.ToString("0000") + "." + format.ToString()), format);                    pdfBitmap.Dispose();                }            }            //关闭和释放相关COM对象              pdfDoc.Close();            Marshal.ReleaseComObject(pdfRect);            Marshal.ReleaseComObject(pdfPoint);            Marshal.ReleaseComObject(pdfPage);            Marshal.ReleaseComObject(pdfDoc);        }

代码:

http://download.csdn.net/download/kongxh_1981/9161481


网上有一篇搜集的非常全的将Pdf文件转换成图片的各种方法,拿出来分享:

http://topic.csdn.net/u/20120219/20/4888d128-3b77-47bc-aa21-cb02c014bc1f.html?84661 


0 0
原创粉丝点击