博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#,将pdf文件转换成图片文件。
阅读量:4607 次
发布时间:2019-06-09

本文共 3356 字,大约阅读时间需要 11 分钟。

本文采用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文件转换成图片的各种方法,拿出来分享:

 

 

转载于:https://www.cnblogs.com/kongxianghai/archive/2012/04/09/2438321.html

你可能感兴趣的文章
Jenkins插件之Publish Over SSH/CIFS/FTP
查看>>
寻找OEP
查看>>
TableView下拉cell
查看>>
面试题:升高的温度
查看>>
Android学习-使用单例模式实现一键退出APP
查看>>
Android-L-Samples
查看>>
判断特征中是否含有空值、空值填充
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
luffy项目的接口开发
查看>>
3DMAX导出FBX的烘焙动画选项
查看>>
spring依赖注入之构造函数注入,set方法注入
查看>>
k8s用kubectl管理应用升级,服务发布与回滚,扩缩容
查看>>
【每天一题ACM】可重复组合数的实现,求解素数解组合Prime Solutions
查看>>
10.4 中断控制方式
查看>>
模式识别课堂笔记之聚类(1)
查看>>
Atitti.java exp ast java表达式语法ast构造器
查看>>
集成禅道和svn
查看>>
UltraEdit-32 温馨提示:右协会,取消 bak文件
查看>>
VelocityTracker简单介绍
查看>>
操作系统的功能
查看>>