pdf 切割成圖片的方法
/// <summary> /// 将PDF文档转换为图片的方法 /// </summary> /// <param name="pdfInputPath">PDF文件路径</param> /// <param name="imageOutputPath">图片输出路径</param> /// <param name="imageName">生成图片的名字</param> /// <param name="startPageNum">从PDF文档的第几页开始转换</param> /// <param name="endPageNum">从PDF文档的第几页开始停止转换</param> /// <param name="imageFormat">设置所需图片格式</param> /// <param name="definition">设置图片的清晰度,数字越大越清晰</param> public BookInfoViewModel PdfToImages(string pdfInputPath, string imageOutputPath, string imageName, int startPageNum, int endPageNum, ImageFormat imageFormat, PdfToPicture.ImageQuality definition, BookInfoViewModel BookInfoViewmodel) { int imgVerticalResolution = Convert.ToInt32(Settings.imgVerticalResolution); //var pdfFile = PDFFile.Open(pdfInputPath);
//if (!Directory.Exists(imageOutputPath)) //{ // Directory.CreateDirectory(imageOutputPath); //}
//// validate pageNum //if (startPageNum <= 0) //{ // startPageNum = 1; //}
//if (endPageNum > pdfFile.PageCount) //{ // endPageNum = pdfFile.PageCount; //}
//if (startPageNum > endPageNum) //{ // int tempPageNum = startPageNum; // startPageNum = endPageNum; // endPageNum = tempPageNum; //} //BookInfoViewmodel.PageNoCount = pdfFile.PageCount; //BookInfoViewmodel.BookPdfToImgInfoModelList = new List<BookInfoViewModel.BookPdfToImgInfoModel>(); //for (int i = startPageNum; i <= endPageNum; i++) //{ // BookInfoViewModel.BookPdfToImgInfoModel BookPdfToImgInfomodel = new BookInfoViewModel.BookPdfToImgInfoModel(); // var pageImage = pdfFile.GetPageImage(i - 1, 96 * (int)definition); // int Width = pageImage.Width; // int Height = pageImage.Height; // if (i == startPageNum) // { // BookInfoViewmodel.FileDimension = Width + "*" + Height; // } // BookPdfToImgInfomodel.ImgFileDimension = Width + "*" + Height; // BookPdfToImgInfomodel.ImgFileExtension = imageFormat.ToString(); // BookPdfToImgInfomodel.ImgFileName = imageName + "_" + i.ToString(); // BookPdfToImgInfomodel.ImgFileNo = Convert.ToInt32(Session["PageCount"]) + i; // pageImage.Save(imageOutputPath + "/" + imageName + "_" + i.ToString() + "." + imageFormat.ToString(), imageFormat); // pageImage.Dispose(); // //string sourcePdfFilePath = pdfInputPath;
// //將上傳的圖片重新命名 // //var destFile = GetFilePath(pdfInputPath); // //System.IO.File.Copy(pdfInputPath, destFile, true); // //切割pdf // //GhostscriptWrapper.GeneratePageThumb(destFile, imageOutputPath + "/" + imageName + "_" + i.ToString() + "." + imageFormat.ToString(), 1, 150, 150); // //刪除複製的文件 // //System.IO.File.Delete(destFile);
// //生成小图 // CompressionImage.generateImage(imageName + "_" + i.ToString() + "." + imageFormat.ToString(), imageOutputPath, "S_" + imageName + "_" + i.ToString() + "." + imageFormat.ToString(), 150, 150); // //生成中图 // if (Width > 850) // { // CompressionImage.generateImage(imageName + "_" + i.ToString() + "." + imageFormat.ToString(), imageOutputPath, "M_" + imageName + "_" + i.ToString() + "." + imageFormat.ToString(), 850, 99999); // } // else // { // System.IO.File.Copy(Path.Combine(imageOutputPath, imageName + "_" + i.ToString() + "." + imageFormat.ToString()), Path.Combine(imageOutputPath, "M_" + imageName + "_" + i.ToString() + "." + imageFormat.ToString())); // } // //获取图片的大小 // FileInfo file = new FileInfo(imageOutputPath + "/" + imageName + "_" + i.ToString() + "." + imageFormat.ToString()); // BookPdfToImgInfomodel.ImgFileSize = file.Length; // BookInfoViewmodel.BookPdfToImgInfoModelList.Add(BookPdfToImgInfomodel);
//} //Session["PageCount"] = Convert.ToInt32(Session["PageCount"]) + 1; //pdfFile.Dispose();
var destFile = GetFilePath(pdfInputPath); System.IO.File.Copy(pdfInputPath, destFile, true); try { //和选择的文件并列创建一个目录 string directoryPath = imageOutputPath;
//定义Jpeg转换设备 Aspose.Pdf.Document document = new Aspose.Pdf.Document(destFile); var device = new Aspose.Pdf.Devices.JpegDevice(); int quality = 100; // directoryPath += quality; if (!System.IO.Directory.Exists(directoryPath)) { Directory.CreateDirectory(directoryPath); } //默认质量为100,设置质量的好坏与处理速度不成正比,甚至是设置的质量越低反而花的时间越长,怀疑处理过程是先生成高质量的再压缩 //device = new Aspose.Pdf.Devices.JpegDevice(quality); //device = new Aspose.Pdf.Devices.JpegDevice(1,, quality,); //遍历每一页转为jpg endPageNum = 1; BookInfoViewmodel.BookPdfToImgInfoModelList = new List<BookInfoViewModel.BookPdfToImgInfoModel>(); BookInfoViewmodel.PageNoCount = document.Pages.Count; for (var i = 1; i <= endPageNum; i++) { string filePathOutPut = Path.Combine(directoryPath, string.Format("{0}_{1}.{2}", imageName, i.ToString(), imageFormat.ToString())); FileStream fs = new FileStream(filePathOutPut, FileMode.OpenOrCreate); try { BookInfoViewModel.BookPdfToImgInfoModel BookPdfToImgInfomodel = new BookInfoViewModel.BookPdfToImgInfoModel(); BookPdfToImgInfomodel.ImgFileExtension = imageFormat.ToString(); BookPdfToImgInfomodel.ImgFileName = imageName + "_" + i.ToString(); BookPdfToImgInfomodel.ImgFileNo = Convert.ToInt32(Session["PageCount"]) + i; BookPdfToImgInfomodel.ImgFileSize = fs.Length; BookInfoViewmodel.BookPdfToImgInfoModelList.Add(BookPdfToImgInfomodel);
//var pdfFile = PDFFile.Open(pdfInputPath); //var pageImage = pdfFile.GetPageImage(i - 1, imgVerticalResolution * (int)definition);//设置分辨率为96dpi int Width = 0; int Height = 0; //設置生成圖片的分辨率 Aspose.Pdf.Devices.Resolution pdfResolution = new Aspose.Pdf.Devices.Resolution(imgVerticalResolution, imgVerticalResolution); //pdfResolution.X = 96; //pdfResolution.Y = 96; //默认质量为100,设置质量的好坏与处理速度不成正比,甚至是设置的质量越低反而花的时间越长,怀疑处理过程是先生成高质量的再压缩 //device = new Aspose.Pdf.Devices.JpegDevice(quality); device = new Aspose.Pdf.Devices.JpegDevice(Width, Height, pdfResolution, quality); device.Process(document.Pages[i], fs); fs.Close(); //pageImage.Dispose(); //pdfFile.Dispose(); //BookInfoViewmodel.FileDimension = Width + "*" + Height;
DirectoryInfo folder = new DirectoryInfo(imageOutputPath); int pdffileount = 0; foreach (FileInfo pdffile in folder.GetFiles()) { if (pdffileount == 0) { if (pdffile.Extension.Substring(1, pdffile.Extension.Length - 1) == imageFormat.ToString()) { Image newImage = Image.FromFile(pdffile.FullName); Width = newImage.Width; Height = newImage.Height; pdffileount++; newImage.Dispose(); } }
} BookInfoViewmodel.FileDimension = Width + "*" + Height; //生成小图 CompressionImage.generateImage(imageName + "_" + i.ToString() + "." + imageFormat.ToString(), imageOutputPath, "S_" + imageName + "_" + i.ToString() + "." + imageFormat.ToString(), 150, 150); //生成中图 if (Width > 850) { CompressionImage.generateImage(imageName + "_" + i.ToString() + "." + imageFormat.ToString(), imageOutputPath, "M_" + imageName + "_" + i.ToString() + "." + imageFormat.ToString(), 850, 99999); } else { System.IO.File.Copy(Path.Combine(imageOutputPath, imageName + "_" + i.ToString() + "." + imageFormat.ToString()), Path.Combine(imageOutputPath, "M_" + imageName + "_" + i.ToString() + "." + imageFormat.ToString())); }
} catch (Exception ex) { fs.Close(); System.IO.Directory.Delete(filePathOutPut); } } document.Dispose(); } catch (Exception ex) {
} finally { System.IO.File.Delete(destFile); } return BookInfoViewmodel; }
pdf 切割成圖片的方法的更多相关文章
- C#pdf 切割成图片
引用 using Ghostscript.NET;using Ghostscript.NET.Rasterizer; 需要安装 exe文件 public static GhostscriptVersi ...
- PdfReader按页将PDF切割成多个PDF
private MemoryStream GetNewPdfByPageNum(PdfReader pdfReader, int pageNum) { MemoryStream memoryStrea ...
- 如何用ABBYY把PDF转换成PPT
在电子科技迅速发展的今天,文件格式转换并不是什么稀罕事,因为现在都是电子化办公,出现很多文件格式,但是不同的场合需要的格式不同,所以常常需要进行文件格式的转换.PDF转换成PPT也是众多文件格式转换中 ...
- oracle 字符串切割成结果集方法
oracle字符串切割几种方式 方法一: SELECT COLUMN_VALUE FROM TABLE(SYS.ODCIVARCHAR2LIST('1','2','3','4','5')); 方法二: ...
- ABBYY把pdf转换成word的方法
有时候我们在网上下载的资料文献是PDF格式文档,遇到喜欢的字句总忍不住想要收藏起来,但是PDF文档不同于普通的Word文档可以直接进行复制粘贴,需要下载安装相关的编辑工具,才能对文字内容进行编辑.倒不 ...
- 利用jpedal进行pdf转换成jpeg,jpg,png,tiff,tif等格式的图片
项目中运用到pdf文件转换成image图片,开始时使用pdfbox开源库进行图片转换,但是转换出来的文件中含有部分乱码的情况.下面是pdfBox 的pdf转换图片的代码示例. try{ String ...
- C#技术分享【PDF转换成图片——13种方案】(2013-07-25重新整理)
原文:C#技术分享[PDF转换成图片--13种方案](2013-07-25重新整理) 重要说明:本博已迁移到 石佳劼的博客,有疑问请到 文章新地址 留言!!! 写在最前面:为了节约大家时间,撸主把最常 ...
- php 将pdf转成图片且将图片拼接
说明: 1.pdf转图片通过安装php扩展imagick实现. 2.由于windows扩展安装的一系列问题,建议在linux环境开发,windows大伙可以尝试安装. 3.为Centos 安装Imag ...
- Android中将一个图片切割成多个图片
有种场景,我们想将一个图片切割成多个图片.比如我们在开发一个拼图的游戏,就首先要对图片进行切割. 以下是封装好的两个类,可以实现图片的切割.仅供参考和学习. 一个是ImagePiece类,此类保存了一 ...
随机推荐
- C# List 的一些操作 (两List元素是否想同,List是否包含在另一个List中)
一. 假设有两个List<T>对象 ,List1和List2,如下方法判断两个List是否相等 List1.All(List2.Contains) && List1.Cou ...
- Linux下使用ping快速检测存活主机
该shell脚本主要是通过ping来批量检测网段内存活主机,执行结果保存在脚本当前目录下的IPinfor目录中,写的比较匆忙,希望大家留下更好的建议. #!/usr/bin/env bash##### ...
- svn import后,服务器上少了所有*.a文件的问题解决
转载自:http://blog.csdn.net/lwl_ls/article/details/20222051 将本地代码import到svn服务器. svn co出代码,编译却报错少了这个那个*. ...
- [综] Sparse Representation 稀疏表示 压缩感知
稀疏表示 分为 2个过程:1. 获得字典(训练优化字典:直接给出字典),其中字典学习又分为2个步骤:Sparse Coding和Dictionary Update:2. 用得到超完备字典后,对测试数据 ...
- wkhtmltopdf乱码解决方案
在CentOS下使用wkhtmltopdf将html页面转换成pdf的时候对于某些页面可能会出现转换成的pdf中很多字符乱码的情况,更怪异的是直接在命令行下运行一切正常,但在httpd+php下使用却 ...
- Spring MVC4 纯注解配置教程
阅读本文需要又一定的sping基础,最起码要成功的运行过一个SpringMvc项目. 在传统的Spring项目中,我们要写一堆的XML文件.而这些XML文件格式要求又很严格,很不便于开发.而网上所谓的 ...
- CORBA IOR学习
Interoperable Object References: IOR IOR用于表示一个对象引用,我们知道,当我们在客户端一个CORBA对象的时候,接触的并不是真正的对象,而是这个对象的代理(Pr ...
- 第一周:设计一个简易ATM取款机简易程序(2)
1.了解用户对ATM取款机功能需求如下: 2.新建一个login函数使用for循环方法和if选择方法编写登陆界面用来及设置ATM内用户的金额和取款机内的金额: 3.使用新建函数方法及if选择方法编写登 ...
- Netty是什么?
Netty是什么? 本质:JBoss做的一个Jar包 目的:快速开发高性能.高可靠性的网络服务器和客户端程序 优点:提供异步的.事件驱动的网络应用程序框架和工具 通俗的说:一个好使的处理Socket的 ...
- usb-serial驱动问题
pl2303 prolific usb-serial驱动,驱动安装后,win10下仍然有问题,选择更新驱动程序-从计算机选择-列表选择-尝试不同版本程序.