Pdf转图片

来源:互联网 发布:化学模拟实验室软件 编辑:程序博客网 时间:2024/06/07 05:32

由于项目需要将pdf转化为jpg,所以花了一点时间研究了一下,主要采用以下两种方式实现:

1.ImageMagick

ImageMagick 是一个用来创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线, 多边形,椭圆,曲线,附加到图片伸展旋转。ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布。最主要的是,其提供了.net平台的一个支持库:Magick.NET,这个库相对比较稳定,使用也很简单,转化的主要代码如下:

public void TransformToJPG(string filePath,bool isThumbnails) {
var fileInfo = new FileInfo(filePath);
var dirInfo = fileInfo.Directory;
var settings = new MagickReadSettings();
if(isThumbnails){
settings.Density = new MagickGeometry(15, 15);
}else{
settings.Density = new MagickGeometry(300, 300);
}
using (MagickImageCollection images = new MagickImageCollection()) {
var fileName = "";
images.Read(filePath,settings);
int page = 1;
foreach (MagickImage image in images) {
if(isThumbnails){
fileName = String.Format("_page-{0}.jpg",page.ToString().PadLeft(4,'0'));;
}else{
fileName = String.Format("page-{0}.jpg",page.ToString().PadLeft(4,'0'));
}
image.Write(fileName);
++page;

}
}

其中,主要的几个参数说明如下:

-trim:裁剪图像四周空白区域; 
-transparent color:去除图像中指定的颜色; 
-density geometry:设定图像的 DPI 值; 
-antialias:让图像具有抗锯齿的效果; 
-quality:图像压缩等级。

2.Acrobat的一个接口

这个方法需要安装Adobe Acrobat,从安装文件copy出Acrobat.dll就可以,这个方式的转化方式就我看来是最好的,无论从转化的效率还是从转化的图片效果来看,本人最终也是采用的这种方式,其实现主要代码如下:

public static void ConvertPDF2Image(string pdfInputPath, string imageOutputPath,
string imageName, int startPageNum, int endPageNum, ImageFormat imageFormat, double resolution)
{
Acrobat.CAcroPDDoc pdfDoc = null;
Acrobat.CAcroPDPage pdfPage = null;
Acrobat.CAcroRect pdfRect = null;
Acrobat.CAcroPoint pdfPoint = null;
// Create the document (Can only create the AcroExch.PDDoc object using late-binding)
// Note using VisualBasic helper functions, have to add reference to DLL
pdfDoc = (Acrobat.CAcroPDDoc)Microsoft.VisualBasic.Interaction.CreateObject("AcroExch.PDDoc", "");
// validate parameter
if (!pdfDoc.Open(pdfInputPath)) { throw new FileNotFoundException(); }
if (!Directory.Exists(imageOutputPath)) { Directory.CreateDirectory(imageOutputPath); }
if (startPageNum <= 0) { startPageNum = 1; }
if (endPageNum > pdfDoc.GetNumPages() || endPageNum <= 0) {
endPageNum = pdfDoc.GetNumPages(); 
if (startPageNum > endPageNum) { 
int tempPageNum = startPageNum; 
startPageNum = endPageNum; endPageNum = startPageNum; 
}
if (imageFormat == null) { imageFormat = ImageFormat.Jpeg; }
if (resolution <= 0) { resolution = 1; }
// start to convert each page
for (int i = 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", "");
int imgWidth = (int)((double)pdfPoint.x * resolution);
int imgHeight = (int)((double)pdfPoint.y * resolution);
pdfRect.Left = 0;
pdfRect.right = (short)imgWidth;
pdfRect.Top = 0;
pdfRect.bottom = (short)imgHeight;
// Render to clipboard, scaled by 100 percent (ie. original size)
// Even though we want a smaller image, better for us to scale in .NET
// than Acrobat as it would greek out small text
pdfPage.CopyToClipboard(pdfRect, 0, 0, (short)(100 * resolution));
IDataObject clipboardData = Clipboard.GetDataObject();
if (clipboardData.GetDataPresent(DataFormats.Bitmap)){
Bitmap pdfBitmap = (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);
}
说明:如果是在新开的Thread中运行此代码,需要设置Thread的ApartmentState为ApartmentState.STA。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 脚趾长鸡眼好痛怎么办 月加班超过36小时怎么办 月经老提前怎么办才好 20岁例假不规律怎么办 农村的医保门诊封顶了怎么办 保研夏令营被拒怎么办 小学生去英国游学怎么办签证 医生说我湿气重怎么办 喉咙痛有来医生感冒喉咙痛怎么办 暴马丁香叶子卷怎么办 房产权40年以后怎么办 面试回答不了考官的问题怎么办 轻伤事故对方要钱太多我怎么办 退休后有房子住公积金怎么办 江苏副高评过不聘怎么办 抗环瓜氨酸肽抗体高怎么办 脚被磨破了好痛怎么办 脚磨破皮肿了怎么办 脚磨破皮发炎了怎么办 3个月婴儿流口水怎么办 beats耳机被偷了怎么办 beats X耳机丢了怎么办 头戴耳机戴着热怎么办 长时间戴耳机耳朵疼怎么办 手表秒针走得声音很大怎么办 顾客总找老板剪头发怎么办 马来西亚国籍想去中国怎么办 有限元学位课挂了怎么办 五百丁简历导出后不一样怎么办 面试早到了1小时怎么办 头顶头发会越来越少怎么办 vr游戏过后想吐怎么办 win10电脑不能打汉字怎么办 手机看vr特别烫怎么办 苹果手机浏览器横屏怎么办 苹果笔记本浏览器没有了怎么办 剑与家园魔镜带错兵怎么办 橙子vr上下反了怎么办 我的恐龙手机不支持ar怎么办 被小人陷害又无计可施怎么办 蚂蚁借呗2万逾期怎么办