zoukankan      html  css  js  c++  java
  • 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)) {
    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 

  • 相关阅读:
    新手学逆向,调试abexcm1过程
    (原创)渗透某国工业系统
    (原创)对某国的一次渗透
    汇编笔记 RETF
    汇编笔记 CALL(1)
    汇编笔记 RET
    大小写转换
    JDK下载太慢?让国内镜像帮助你
    Win7,docker安装后,创建虚拟机分配不了ip错误 err: exit status 255
    Spring事务传播实践与Spring“事务失效”
  • 原文地址:https://www.cnblogs.com/kongxianghai/p/2438321.html
Copyright © 2011-2022 走看看