您的位置:首页 > 编程语言 > C#

C#实现PDF转图片

2013-07-05 11:06 176 查看
最近因为写文献,很保密的那种,想要防止别人复制是ORC图文识别,这里就设计到一个老生长谈的问题了,就是做成图片格式,并且加上干扰码,正弦,余弦,噪点,反射弧什么的统统加上,这样就实现了我们的目的。
之前也有人说用百度文库啊,豆丁啊,之类的方式,但是想想他们处理的还是不够彻底,至少我都有数十种方法获取到他们的源文件了。
文献是使用word编写的,所以我们的想法就只是把word转成图片,然后考虑到实现起来的复杂度,以及网上出现的那些转换软件不能实现我们的需求。这时我就意识到,可能得自己写程序去实现了。
首先就是利用word本身自带的转为pdf格式的文件,再通过Adobe官方Acrobat提供的接口实现该功能。
虽然这个程序非常简单,但是也不是我靠文字能够表达清楚的。
下面直接上代码,同志们看好了!

///<summary>
///将PDF文档转换为图片的方法,你可以像这样调用该方法:ConvertPDF2Image("F:\\A.pdf","F:\\","A",0,0,null,0);
///因为大多数的参数都有默认值,startPageNum默认值为1,endPageNum默认值为总页数,
///imageFormat默认值为ImageFormat.Jpeg,resolution默认值为1
///</summary>
///<paramname="pdfInputPath">PDF文件路径</param>
///<paramname="imageOutputPath">图片输出路径</param>
///<paramname="imageName">图片的名字,不需要带扩展名</param>
///<paramname="startPageNum">从PDF文档的第几页开始转换,默认值为1</param>
///<paramname="endPageNum">从PDF文档的第几页开始停止转换,默认值为PDF总页数</param>
///<paramname="imageFormat">设置所需图片格式</param>
///<paramname="resolution">设置图片的分辨率,数字越大越清晰,默认值为1</param>
publicstaticvoidConvertPDF2Image(stringpdfInputPath,stringimageOutputPath,
stringimageName,intstartPageNum,intendPageNum,ImageFormatimageFormat,doubleresolution)
{
Acrobat.CAcroPDDocpdfDoc=null;
Acrobat.CAcroPDPagepdfPage=null;
Acrobat.CAcroRectpdfRect=null;
Acrobat.CAcroPointpdfPoint=null;
//Createthedocument(CanonlycreatetheAcroExch.PDDocobjectusinglate-binding)
//NoteusingVisualBasichelperfunctions,havetoaddreferencetoDLL
pdfDoc=(Acrobat.CAcroPDDoc)Microsoft.VisualBasic.Interaction.CreateObject("AcroExch.PDDoc","");
//validateparameter
if(!pdfDoc.Open(pdfInputPath)){thrownewFileNotFoundException();}
if(!Directory.Exists(imageOutputPath)){Directory.CreateDirectory(imageOutputPath);}
if(startPageNum<=0){startPageNum=1;}if(endPageNum>pdfDoc.GetNumPages()||endPageNum<=0){endPageNum=pdfDoc.GetNumPages();}if(startPageNum>endPageNum){inttempPageNum=startPageNum;startPageNum=endPageNum;endPageNum=startPageNum;}
if(imageFormat==null){imageFormat=ImageFormat.Jpeg;}
if(resolution<=0){resolution=1;}
//starttoconverteachpage
for(inti=startPageNum;i<=endPageNum;i++)
{
pdfPage=(Acrobat.CAcroPDPage)pdfDoc.AcquirePage(i-1);
pdfPoint=(Acrobat.CAcroPoint)pdfPage.GetSize();
pdfRect=(Acrobat.CAcroRect)Microsoft.VisualBasic.Interaction.CreateObject("AcroExch.Rect","");
intimgWidth=(int)((double)pdfPoint.x*resolution);
intimgHeight=(int)((double)pdfPoint.y*resolution);
pdfRect.Left=0;
pdfRect.right=(short)imgWidth;
pdfRect.Top=0;
pdfRect.bottom=(short)imgHeight;
//Rendertoclipboard,scaledby100percent(ie.originalsize)
//Eventhoughwewantasmallerimage,betterforustoscalein.NET
//thanAcrobatasitwouldgreekoutsmalltext
pdfPage.CopyToClipboard(pdfRect,0,0,(short)(100*resolution));
IDataObjectclipboardData=Clipboard.GetDataObject();
if(clipboardData.GetDataPresent(DataFormats.Bitmap))
{
BitmappdfBitmap=(Bitmap)clipboardData.GetData(DataFormats.Bitmap);
pdfBitmap.Save(Path.Combine(imageOutputPath,imageName)+".jpg",imageFormat);
pdfBitmap.Dispose();
}
}
pdfDoc.Close();
Marshal.ReleaseComObject(pdfPage);
Marshal.ReleaseComObject(pdfRect);
Marshal.ReleaseComObject(pdfDoc);
Marshal.ReleaseComObject(pdfPoint);
}


.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: