当前位置:编程学习 > C#/ASP.NET >>

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

本文采用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)) {
              &n

补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,