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://www.cnblogs.com/kongxianghai/archive/2012/04/09/2438321.html

源代码敬上:http://files.cnblogs.com/kongxianghai/Pdf2ImageWithAcrobat.rar

 

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

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

转载于:https://www.cnblogs.com/hyqs/articles/4453852.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android进程间通信

一.Linux系统进程间通信有哪些方式&#xff1f; 1.socket&#xff1b; 2.name pipe命名管道&#xff1b; 3.message queue消息队列&#xff1b; 4.singal信号量&#xff1b; 5.share memory共享内存&#xff1b; 二.Java系统的通信方式是什么&#xff1f; 1.socket; 2.name pip…

最新的一些开源face alignment及评价

dlib &#xff1a;https://github.com/davisking/dlib/tree/v18.18 评价&#xff1a;速度快&#xff0c;可商用&#xff0c;有些时候不太准确 2. CLM-framework: https://github.com/TadasBaltrusaitis/CLM-framework 评价:很准确&#xff0c;不可商用 3. Face Detection…

1048 石子归并

1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description有n堆石子排成一列&#xff0c;每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子&#xff0c;一次合并的代价为两堆石子的重量和w[i]w[i1]。问安排怎样的合并顺序&#xf…

internetreadfile读取数据长度为0_【完结】TensorFlow2.0 快速上手手册

大家好&#xff0c;这是专栏《TensorFlow2.0》的第五篇文章&#xff0c;我们对专栏《TensorFlow2.0》进行一个总结。我们知道全新的TensorFlow2.0 Alpha已经于2019年3月被发布&#xff0c;新版本对TensorFLow的使用方式进行了重大改进&#xff0c;为了满足各位AI人对TensorFlow…

Facial Landmark Detection(人脸特征点检测)

原文地址&#xff1a;http://www.learnopencv.com/facial-landmark-detection/#comment-2471797375 作为计算机视觉研究员&#xff0c;我们很早就开始研究人脸。人脸分析领域最广为人知的就是人脸识别&#xff08;face recognition&#xff09;.但是为了识别一幅图像中的人脸&…

cpu卡操作协议iso14443协议

http://baike.baidu.com/link?url3mef2ZMRoNuBrVLA2HpEh8xrBtzACdIi5nIDUsMyVkA8OulIXGWgswvFcTiBfh_B转载于:https://www.cnblogs.com/shuenjian901/p/3496331.html

Python 字符串的内置函数

方法描述string.capitalize()把字符串的第一个字符大写string.center(width)返回一个原字符串居中,并使用空格填充至长度 width 的新字符串string.count(str, beg0, endlen(string))返回 str 在 string 里面出现的次数&#xff0c;如果 beg 或者 end 指定则返回指定范围内 str …

Java中的Error和Exceptiond的异同点

Error和Exception的异同点&#xff1a; &#xff08;1&#xff09;Error类和Exception类都继承超类Java.lang.Throwable &#xff08;2&#xff09;Error&#xff1a;一般指与虚拟机相关的问题&#xff0c;如系统崩溃&#xff0c;内存溢出等。对于这类错误&#xff0c;仅靠程序…

python算法题_python基本算法题(一)

1、3位水仙花数计算 "3位水仙花数”是指一个三位整数&#xff0c;其各位数字的3次方和等于该数本身。 例如&#xff1a; ABC是一个“3位水仙花数”&#xff0c;则&#xff1a;A的3次方&#xff0b;B的3次方&#xff0b;C的3次方 ABC。 使用Python&#xff0c;输出所有的3…

虚拟机环境下安装ESX不能安装虚拟系统解决方案

在虚拟机环境&#xff08;ESX、workstation等&#xff09;下安装ESX或workstation等虚拟机&#xff0c;在虚拟机上再安装操作系统&#xff0c;会提示“虚拟系统不能启动&#xff0c;直到你配置了外部虚拟机&#xff08;vmware esx in a virtual machine requires the outer vir…

superviseddescent (SDM C++11实现)环境配置

今天试着用了一下SDM的C11实现&#xff0c;本来以为挺简单的&#xff0c;可是配置环境还是花了一些时间。为了给自己留下一些记忆&#xff0c;特把配置过程记录下来。 这个实现是C11的版本&#xff0c;是一个通用版本&#xff0c;里面包含了很多的功能&#xff0c;比如函数的最…

1008: University

台州ACM&#xff1a;1008: University Description 在大学里&#xff0c;非常多单词都是一词多义。偶尔在文章里还要用引申义。这困扰Redraiment非常长的时间。 他開始搜集那些单词的全部意义。他发现了一些规律&#xff0c;比如 “a”能用“e”来取代, “c”能用“f”来取代……

Android 5.1 API 22 所有sdk文件下载地址

开源中国的 IT 公司开源软件整理计划介绍 https://dl-ssl.google.com/android/repository/docs-22_r01.ziphttp://dl.google.com/android/repository/android-22_r01.ziphttps://dl-ssl.google.com/android/repository/samples-22_r05.ziphttps://dl-ssl.google.com/android/re…

python图形小游戏代码_手把手制作Python小游戏:俄罗斯方块(一)

手把手制作Python小游戏&#xff1a;俄罗斯方块1大家好&#xff0c;新手第一次写文章&#xff0c;请多多指教 A.准备工作&#xff1a; 这里我们运用的是Pygame库&#xff0c;因为Python没有内置&#xff0c;所以需要下载 如果没有pygame&#xff0c;可以到官网下载 pygame官网&…

关于Git使用的一些心得

2019独角兽企业重金招聘Python工程师标准>>> 本篇稍微记录下Git使用的一些心得。 对Git的使用&#xff0c;应该是从搭建自己的博客开始的。当时看到开源中国推荐的一篇基于码云hexo搭建自己博客的文章。所以就花了一天时间鼓捣了下博客。 顺带整理下目前能看到我写的…

Dlib机器学习库安装

昨天使用了一下dlib的人脸检测功能&#xff0c;效果出奇的好。下面给出dlib整个的安装过程和使用指导。 下载安装 我们可以从dlib的官网下载最新的版本&#xff0c;我的是dlib18.18.然后我们需要使用cmake编译dlib库和examples示例。 当然前提是你要按照好cmake和opencv。 …

struts2上传

今天在使用struts2上传的过程中无意发现,struts2上传一个文件大小为0字节的文本竟然会报错FileNotFoundException,尝试了好久也没找到答案,最后只能判断文件的大小后上传,至于文件字节为0的怎么处理就看各位了 struts2上传java源码 1 package com.jzgx.web.action;2 3 import j…

BitSet之为什么用long保存信息

BitSet内部使用long[] words来保存位信息。咋看之下并不理解原因&#xff0c;在解读set(int bitIndex)之后似乎有了一些领悟。 public void set(int bitIndex) { if (bitIndex < 0) throw new IndexOutOfBoundsException("bitIndex < 0: " bitIndex); //用来计…

ipv4地址是几位二进制数_几张思维导图,让你清楚的知道ip地址怎么回事?

网络工程中&#xff0c;ip地址是必须要了解的内容&#xff0c;今天我们用几张思维导图来给大家详细讲解IP地址。一、什么是IP地址在生活中我们使用具有上网功能的电子设备都有IP地址&#xff0c;就跟每个人都有自己的名字一样。IP地址分为IPV4 IPV6&#xff0c;我们所说的的IP地…

《关系营销2.0——社交网络时代的营销之道》一检查拼写和语法

本节书摘来异步社区《关系营销2.0——社交网络时代的营销之道》一书中的第2章&#xff0c;作者&#xff1a; 【美】Mari Smith 译者&#xff1a; 张猛 , 于宏 , 赵俐 责编&#xff1a; 陈冀康, 更多章节内容可以访问云栖社区“异步社区”公众号查看。 检查拼写和语法 关系营销2…