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

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://files.cnblogs.com/kongxianghai/Pdf2ImageWithAcrobat.rar


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值