.Net的PDF转图片
用的是破解版的 O2S.Components.PDFRender4NET.dll 插件, 简单引用即可
public static class PdfToImage
{
public static MemoryStream GetPdfImagePageStream(string pdfInputPath, int pageIndex, ImageFormat format, int width = , int height = , int quality = )
{
try
{
//pdf处理插件
PDFFile pdfFile = PDFFile.Open(pdfInputPath);
int total = pdfFile.PageCount; #region 防止异常参数
if (pageIndex < )
{
pageIndex = ;
}
if (pageIndex > total)
{
pageIndex = total - ;
}
if (quality < )
{
quality = ;
}
if (quality > )
{
quality = ;
}
if (width <= )
{
width = ;
} if (height <= )
{
height = ;
}
#endregion //pdf转换图片
SizeF pageSize = pdfFile.GetPageSize(pageIndex); Bitmap pageImage = pdfFile.GetPageImage(pageIndex, * quality); MemoryStream ms = new MemoryStream(); pageImage.Save(ms, format); //原图
Image img = Image.FromStream(ms, true); double ratio = (double)width / (double)height; double oRatio = (double)img.Width / (double)img.Height; int sbWidth = ; int sbHeight = ; int outX = ;
int outY = ; if (oRatio < ratio)
{
sbWidth = (int)(img.Width * ((double)height / (double)(img.Height)));
sbHeight = height; outX = (width - sbWidth) / ;
}
else
{
sbHeight = (int)(img.Height * ((double)width / (double)(img.Width)));
sbWidth = width; outY = (height - sbHeight) / ;
} //缩放
Image sbImg = new Bitmap(sbWidth, sbHeight);
Graphics sbGra = Graphics.FromImage(sbImg);
sbGra.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
sbGra.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
sbGra.Clear(Color.White);
sbGra.DrawImage(img, new System.Drawing.Rectangle(, , sbWidth, sbHeight), new System.Drawing.Rectangle(, , img.Width, img.Height), System.Drawing.GraphicsUnit.Pixel); //补白
Image outImg = new System.Drawing.Bitmap(width, height);
Graphics outGra = System.Drawing.Graphics.FromImage(outImg);
outGra.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
outGra.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
outGra.Clear(Color.White);
outGra.DrawImage(sbImg, new System.Drawing.Rectangle(outX, outY, sbWidth, sbHeight), new System.Drawing.Rectangle(, , sbWidth, sbHeight), System.Drawing.GraphicsUnit.Pixel); MemoryStream outMs = new MemoryStream(); outImg.Save(outMs, format); sbImg.Dispose();
outImg.Dispose();
img.Dispose(); return outMs; }
catch (Exception ex)
{ } return new MemoryStream();
} public static MemoryStream GetPdfImagePageStream(Stream stream, int pageIndex, ImageFormat format, int width = , int height = , int quality = )
{
try
{
//pdf处理插件
PDFFile pdfFile = PDFFile.Open(stream);
int total = pdfFile.PageCount; #region 防止异常参数
if (pageIndex < )
{
pageIndex = ;
}
if (pageIndex > total)
{
pageIndex = total - ;
}
if (quality < )
{
quality = ;
}
if (quality > )
{
quality = ;
}
if (width <= )
{
width = ;
} if (height <= )
{
height = ;
}
#endregion //pdf转换图片
SizeF pageSize = pdfFile.GetPageSize(pageIndex); Bitmap pageImage = pdfFile.GetPageImage(pageIndex, * quality); MemoryStream ms = new MemoryStream(); pageImage.Save(ms, format); //原图
Image img = Image.FromStream(ms, true); double ratio = (double)width / (double)height; double oRatio = (double)img.Width / (double)img.Height; int sbWidth = ; int sbHeight = ; int outX = ;
int outY = ; if (oRatio < ratio)
{
sbWidth = (int)(img.Width * ((double)height / (double)(img.Height)));
sbHeight = height; outX = (width - sbWidth) / ;
}
else
{
sbHeight = (int)(img.Height * ((double)width / (double)(img.Width)));
sbWidth = width; outY = (height - sbHeight) / ;
} //缩放
Image sbImg = new Bitmap(sbWidth, sbHeight);
Graphics sbGra = Graphics.FromImage(sbImg);
sbGra.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
sbGra.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
sbGra.Clear(Color.White);
sbGra.DrawImage(img, new System.Drawing.Rectangle(, , sbWidth, sbHeight), new System.Drawing.Rectangle(, , img.Width, img.Height), System.Drawing.GraphicsUnit.Pixel); //补白
Image outImg = new System.Drawing.Bitmap(width, height);
Graphics outGra = System.Drawing.Graphics.FromImage(outImg);
outGra.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
outGra.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
outGra.Clear(Color.White);
outGra.DrawImage(sbImg, new System.Drawing.Rectangle(outX, outY, sbWidth, sbHeight), new System.Drawing.Rectangle(, , sbWidth, sbHeight), System.Drawing.GraphicsUnit.Pixel); MemoryStream outMs = new MemoryStream(); outImg.Save(outMs, format); sbImg.Dispose();
outImg.Dispose();
img.Dispose(); return outMs; }
catch (Exception ex)
{ } return new MemoryStream();
}
}
DLL下载: O2S.Components.PDFRender4NET.dll
.Net的PDF转图片的更多相关文章
- C# 给PDF添加图片背景
C# 给PDF添加图片背景 今天要实现的是给PDF文件添加图片背景这个功能.PDF是近年来最流行的文件之一,无论是办公还是日常生活中都经常会用到,很多时候,PDF文件的背景色都是白色,看多了难免觉得累 ...
- C# 第三方DLL,可以实现PDF转图片,支持32位系统、64位系统
itextsharp.dll,是一个开源的在C#中用来生成PDF文档的库文件,不少C#爱好者用它制作出了PDF文档生成器.使用时只需在你的C#项目中添加引入此组件即可,使用方法网上有很多,自己查阅一下 ...
- PDF转图片 C# with Adobe API
PDF转图片大概有十几种方式,褒贬不一,我就详细给大家说一下我认为效率最高的方式,使用Adobe官方的SDK 安装acrobat reader 9.0以上即可,勾选如下组件.
- 在线提取PDF中图片和文字
无需下载软件,你就可以在线提取PDF中图片和文字,http://www.extractpdf.com/不仅可以获取本地PDF文档的图片和文字,还能获取远程PDF文档的图片和文字.如下图所示:结果本人测 ...
- 使用pdfbox分页保存pdf为图片
一.背景 pdfbox作为Apache开源的PDF操作工具,允许创建新的PDF文档,操作现有文档,以及从文档中提取内容的能力.Apache PDFBox还包括一些命令行实用工具.本文楼主主要介绍其中的 ...
- JAVA中pdf转图片的方法
JAVA中实现pdf转图片可以通过第三方提供的架包,这里介绍几种常用的,可以根据自身需求选择使用. 一.icepdf.有收费版和开源版,几种方法里最推荐的.转换的效果比较好,能识别我手头文件中的中文, ...
- 【JAVA】pdf转图片
最近java项目中使用到了pdf转图片的需求,在此记录一下. 1.基于GhostScript p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px ...
- PDF转图片工具
点击下载( 提取码:1ll1 ) 软件功能基于mupdf,UI使用wxpython开发 功能: 支持pdf转图片,图片格式png 支持批量转换 使用: 第一步,点击按钮添加文档到列表,或直接将待转换文 ...
- Ubuntu下pdf和图片互转
前边文章可以将ppt转换为pdf 查看 使用unoconv将ppt转为pdf,再使用imagemagick将pdf转为图片 这次想将pdf和图片进行互转 当前目录下只有2.ppt 1.ppt转pdf ...
随机推荐
- 旧版asp.net 发送邮件代码
说到发送邮件发送,先提一下SMTP(呵呵,高手就跳过这一段吧!). SMTP的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议.它是一组用于从源地址到目的地址传 ...
- 本地windows下PHP连接远程oracle遇到的诸多问题
任务目的:本地windows下PHP连接远程服务器下的oracle. 必须必须 确定服务器的数据库版本,如果本地的驱动和对方服务器版本不一致,会导致许多报错. 已知的oracle版本 分为 32位的 ...
- 解决div里面img的缝隙问题~
解决div里面img的缝隙问题 图片IMG与容器下边界之间有空隙怎么办?这里介绍3中简单的解决方法. 第一,给图片img标签display:block. img{display:block} 第二,定 ...
- 类和对象:面向对象编程 - 零基础入门学习Python037
类和对象:面向对象编程 让编程改变世界 Change the world by program 经过上节课的热身,相信大家对类和对象已经有了初步的认识,但似乎还是懵懵懂懂:好像面向对象编程很厉害,但不 ...
- 移动端远程关闭PC端实现(一)需求设计
公司有台半新不旧的电脑,因无甚大用,就拿来做了服务器,服务于民.服务器所提供的功能不是太多,无非是数据库以及svn服务. 公司每天下班会断电,我们吧会常常忘记关闭服务器,所以服务器非正常关机的次数约等 ...
- IOS内存nil与release的区别
IOS内存nil与release的区别 分类: IOS内存管理 nil和release的作用: nil就是把一个对象的指针置为空,只是切断了指针与内存中对象的联系:而release才是真正通知 ...
- 安装Hadoop集群的最快的软件
Quick Hadoop是一款安装Hadoop集群的桌面软件,只需要点两下鼠标,一分钟之内安装Hadoop到集群上,超快! 还在每台主机的Shell里一行一行地敲安装Hadoop的命令?别苦逼了! 用 ...
- 动态Linq(结合反射)
这篇文章决定对最近一个单机版Web程序用到的东西总结一下. 一.反射Linq之OrderBy 动态Linq结合反射对某字段排序: namespace 动态Linq { class Program { ...
- cv:显示Linux命令运行进度
cv: 显示 cp.mv 等命令的进度 2014-07-14 By toy Posted in Apps Edit on GitHub 在 Linux 系统中 , 大多数命令从来都是信奉 “ 沉默是金 ...
- 【转】 ubuntu12.04更新源
原文网址:http://blog.chinaunix.net/uid-26404477-id-3382633.html 摘 要:本文列出ubuntu 12.04 LTS更新源列表,内容为网友整理,此处 ...