c#,将pdf文件转换成图片文件。
本文采用Adobe Acrobat9.0的COM組件,將Pdf文件的每一頁(yè)轉(zhuǎn)換成對(duì)應(yīng)的圖片文件。
開(kāi)發(fā)環(huán)境:VS2010,.Net Framework4.0,Adobe Acrobat9.0。
工程中添加COM引用:Adobe Acrobat 9.0 Type Library(必須裝了Adobe Acrobat9.0才會(huì)有)。
?
思路:
1、需要用到的COM對(duì)象:
??? 1)CAcroPDDoc:Acrobat文檔對(duì)象。
??? 2)CAcroPDPage:頁(yè)對(duì)象。
??? 3)CAcroRect:用來(lái)描述頁(yè)中一個(gè)矩形區(qū)域的對(duì)象。
??? 4)CAcroPoint:實(shí)際上代表的是Size。
?
2、轉(zhuǎn)換過(guò)程:
???1)打開(kāi)文檔。
???2)取出每一頁(yè)。
?? 3)獲取每一頁(yè)的大小,生成一個(gè)表示該頁(yè)的矩形區(qū)域。
?? 4)將當(dāng)前頁(yè)的指定區(qū)域編碼成圖片,并且復(fù)制到剪貼板中。
?? 5)將剪貼板中的圖片取出,保存為圖片文件。
?
轉(zhuǎn)換函數(shù)代碼:
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對(duì)象
pdfDoc = (Acrobat.CAcroPDDoc)Microsoft.VisualBasic.Interaction.CreateObject("AcroExch.PDDoc", "");
//檢查輸入?yún)?shù)
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("參數(shù)\"beginPageNum\"必須小于\"endPageNum\"!");
}
if (format == null) {
format = ImageFormat.Png;
}
if (zoom <= 0) {
zoom = 1;
}
//轉(zhuǎn)換
for (int i = beginPageNum; i <= endPageNum; i++) {
//2)
//取出當(dāng)前頁(yè)
pdfPage = (Acrobat.CAcroPDPage)pdfDoc.AcquirePage(i - 1);
//3)
//得到當(dāng)前頁(yè)的大小
pdfPoint = (Acrobat.CAcroPoint)pdfPage.GetSize();
//生成一個(gè)頁(yè)的裁剪區(qū)矩形對(duì)象
pdfRect = (Acrobat.CAcroRect)Microsoft.VisualBasic.Interaction.CreateObject("AcroExch.Rect", "");
//計(jì)算當(dāng)前頁(yè)經(jīng)縮放后的實(shí)際寬度和高度,zoom==1時(shí),保持原比例大小
int imgWidth = (int)((double)pdfPoint.x * zoom);
int imgHeight = (int)((double)pdfPoint.y * zoom);
//設(shè)置裁剪矩形的大小為當(dāng)前頁(yè)的大小
pdfRect.Left = 0;
pdfRect.right = (short)imgWidth;
pdfRect.Top = 0;
pdfRect.bottom = (short)imgHeight;
//4)
//將當(dāng)前頁(yè)的裁剪區(qū)的內(nèi)容編成圖片后復(fù)制到剪貼板中
pdfPage.CopyToClipboard(pdfRect, 0, 0, (short)(100 * zoom));
//5)
IDataObject clipboardData = Clipboard.GetDataObject();
//檢查剪貼板中的對(duì)象是否是圖片,如果是圖片則將其保存為指定格式的圖片文件
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();
}
}
//關(guān)閉和釋放相關(guān)COM對(duì)象
pdfDoc.Close();
Marshal.ReleaseComObject(pdfRect);
Marshal.ReleaseComObject(pdfPoint);
Marshal.ReleaseComObject(pdfPage);
Marshal.ReleaseComObject(pdfDoc);
}
?
代碼:
http://download.csdn.net/download/kongxh_1981/9161481
?
網(wǎng)上有一篇搜集的非常全的將Pdf文件轉(zhuǎn)換成圖片的各種方法,拿出來(lái)分享:
http://topic.csdn.net/u/20120219/20/4888d128-3b77-47bc-aa21-cb02c014bc1f.html?84661?
?
總結(jié)
以上是生活随笔為你收集整理的c#,将pdf文件转换成图片文件。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [Python学习]PycURL简单学习
- 下一篇: 淘宝技术发展(Java时代:脱胎换骨)