c# asp.net Pdf 转换图片 在线预览 发布到iis中问题 最终解决篇—_—!
关于:excel和word 预览 请看我的博文:
excel和word 在线预览 详细配置及代码
使用Adobe 组件 在本机vs中调试成功
发布到iis中 在 代码中涉及到 剪贴板的地方 会不成功 莫名其妙的没有数据 也不报错 设置iis权限 、com组件权限+各种搞 均无果..... -_-! 很是郁闷
最终放弃
改用 Ghostscript
须安装 gs861w32.exe (高版本 貌似 还有问题......)
在安装目录 bin 下 找到gsdll32.dll
下在 dll
itextsharp.dll
PDFView.dll
把三个dll放入 项目dll(新建)文件夹中
引入
itextsharp.dll
PDFView.dll
gsdll32.dll无法引入 拷贝到项目bin 目录下
上代码:
1 /// <summary>2 /// 将PDF 相应的页转换为图片3 /// </summary>4 /// <param name="strPDFpath">PDF 路径</param>5 /// <param name="Page">需要转换的页页码</param>6 private string GetImage(string strPDFpath, string imgDire, ImageFormat imgeF)7 {8 StringBuilder b = new StringBuilder();9 10 PdfReader reader = new PdfReader(strPDFpath); 11 // 获得文档页数 12 int pageCount = reader.NumberOfPages; 13 14 System.IO.MemoryStream Ms = new MemoryStream(); 15 try 16 { 17 b = b.AppendLine("<ul style='azimuth:center; list-style-type:none;' >"); 18 for (int page = 1; page <= pageCount; page++) 19 { 20 System.Drawing.Image img = PDFView.ConvertPDF.PDFConvert.GetPageFromPDF(strPDFpath, page, 100, "", true); 21 img.Save(Ms, imgeF); 22 23 Bitmap returnImage = (Bitmap)Bitmap.FromStream(Ms); 24 25 string strImgPath = Request.MapPath("..\\" + imgDire + "\\" + page.ToString("0000") + ".jpg"); 26 27 returnImage.Save(strImgPath); 28 29 Ms.Position = 0; 30 31 32 b = b.AppendLine("<li> <img src='..\\" + imgDire + "\\" + page.ToString("0000") + ".jpg' /> </li><span>第" + (page) + "页</span>"); 33 } 34 35 Ms.Close(); 36 b = b.AppendLine("</ul>"); 37 38 } 39 catch (Exception ex) 40 { 41 // b.Clear(); 42 // b.AppendLine(ex.ToString()); 43 throw; 44 } 45 46 47 return b.ToString(); 48 49 50 }
vs 运行 成功
发布到服务器iis 中 设置 iis 对应应用程序池 启用32为应用程序 为true
-_-! 报错
System.InvalidOperationException: 当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。
换一种调用方法 :在web中调用外部的控制台程序
将上面方法 放入控制台程序中
mian函数如下:
1 [STAThread]2 static void Main(string[] args)3 {4 #region MyRegion5 /*6 if (args != null && args.Length > 0)7 {8 string PdfPath = args[0].ToString();9 string ImgPath = args[1].ToString(); 10 string imgDire = args[2].ToString(); 11 string b = PDFToPic(PdfPath,ImgPath ,imgDire, ImageFormat.Jpeg); 12 13 if (string.IsNullOrEmpty(b)) 14 { 15 b = "出错"; 16 } 17 18 Console.WriteLine(b); 19 Console.ReadKey(); 20 21 } 22 else 23 { 24 Console.WriteLine("无参数"); 25 Console.ReadKey(); 26 } 27 */ 28 29 #endregion 30 31 32 #region gs 33 34 if (args != null && args.Length > 0) 35 { 36 string PdfPath = args[0].ToString(); 37 string HtmlDic = args[1].ToString(); 38 string ImgPath = args[2].ToString(); 39 40 string b = GetImage(PdfPath, HtmlDic, ImgPath, ImageFormat.Jpeg); 41 42 if (string.IsNullOrEmpty(b)) 43 { 44 b = "出错"; 45 } 46 Console.WriteLine(b); 47 } 48 else 49 { 50 Console.WriteLine("无参数"); 51 } 52 #endregion 53 // GetImage(@"C:\Users\Administrator.DVT\Desktop\fu.pdf", @"C:\Users\Administrator.DVT\Desktop\imgs", @"C:\Users\Administrator.DVT\Desktop\imgs",ImageFormat.Jpeg); 54 55 }
生成 拿到Debug 下 控制台.exe 和三个组件(
itextsharp.dll
PDFView.dll
gsdll32.dll
)
放入web项目中 (必须放在 同一文件夹下)
在web中调用方法的地方 改写成 调用控制台程序
代码如下:
1 try2 {3 Process pro = new Process();4 pro.StartInfo.RedirectStandardOutput = true;5 pro.StartInfo.RedirectStandardInput = false;6 //不显示窗口7 pro.StartInfo.CreateNoWindow = true;8 pro.StartInfo.UseShellExecute = false;9 //要调用的控制台程序 10 pro.StartInfo.FileName = Request.MapPath("../FileUpload/ConsoleApplication1.exe"); 11 //给控制台程序的参数传递值 12 pro.StartInfo.Arguments = filePath+" "+HtmlDic+" "+imgDire; 13 pro.Start(); 14 15 16 string b= pro.StandardOutput.ReadToEnd(); 17 18 pro.WaitForExit(); 19 pro.Close(); 20 pro.Dispose(); 21 result = b; 22 } 23 catch (Exception) 24 { 25 26 throw; 27 }
vs中测试 通过
发布到iis中 的配置:
iis 中 应用程序池 设置中 启用 32位应用程序
ok,终于解决了 (-_-! 调了两周)
最近改功能上线 又发现些问题...并解决
1,EXCLE文件生成html 预览
xlsx文件 生成html后 打开html 会有 警告 或提示
导致进程卡死(因为再程序中打开 ,无法响应)
2,docx文件生成html 预览 问题同上 、
解决方法:只需设置 两个属性 即可
repExcel.DisplayAlerts = false;
word.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;
另外 要做进程回收
excel事例:
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);workbook = null;GC.Collect();System.Runtime.InteropServices.Marshal.ReleaseComObject(repExcel.Application.Workbooks);GC.Collect();System.Runtime.InteropServices.Marshal.ReleaseComObject(repExcel);repExcel = null;GC.Collect();//根据时间杀进程System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName("EXCEL");//依据时间杀灭进程foreach (System.Diagnostics.Process p in process){if (DateTime.Now.Second - p.StartTime.Second > 0 && DateTime.Now.Second - p.StartTime.Second < 5){p.Kill();}}Thread.Sleep(3000);//保证完全关闭
/// <summary>/// 杀掉进程/// </summary>/// <param name="hwnd"></param>/// <param name="id"></param>/// <returns></returns>[DllImport("user32.dll")]private static extern int GetWindowThreadProcessId(IntPtr hwnd, out int id);public void killexcel(Excel.Application xlapp){try{IntPtr app = new IntPtr(xlapp.Hwnd);int processid;GetWindowThreadProcessId(app, out processid);System.Diagnostics.Process.GetProcessById(processid).Kill();}catch{ }}
pdf 同样要 回收资源 杀掉进程
....................................擦 ,貌似解决了。。。
转载于:https://www.cnblogs.com/DamonTang/archive/2012/12/04/2801333.html
c# asp.net Pdf 转换图片 在线预览 发布到iis中问题 最终解决篇—_—!相关推荐
- C# web实现word 转Html、office转Html、pdf转图片 在线预览文件
改篇 pdf 预览再本机没问题,发布再iis中 不行 ,(使用剪贴板的问题..excel和word 可以,) pdf解决:请看我的博文 ----最终解决篇 详细配置及代码 word 转Html 1 / ...
- 文档转换、在线预览的几种方式以及推荐
互联网时代的繁荣期,在线教育犹如三国中的巴蜀之地,无论是各大巨头还是中小软件.都希望在此领域分的一口肥肉. 其中,关于文档转换.一直是开发在线教育软件让人头痛的事. 在这先说一下文档转换以及预览的几种 ...
- img pdf 展示_pdf.js实现图片在线预览
项目需求 前段时间项目中遇到了一个模块,是关于在线预览word文档(PDF文件)的,所以,找了很多插件,例如,pdf.js,pdfobject.js框架,但是pdfobject.js框架对于IE浏览器 ...
- java pdf 预览_pdf.js实现图片在线预览
项目需求 前段时间项目中遇到了一个模块,是关于在线预览word文档(PDF文件)的,所以,找了很多插件,例如,pdf.js,pdfobject.js框架,但是pdfobject.js框架对于IE浏览器 ...
- java图片的在线预览_【Java】web实现图片在线预览
一.场景还原 用户上传了一张图片,已有服务器保存路径,现由于系统配置无法直接通过图片URL打开预览图片,需实现点击预览将图片显示在浏览器上. 二.实现方法 html: 预览 此处用预览按钮方法实现 J ...
- 文档在线预览(四)使用js前端实现word、excel、pdf、ppt 在线预览
文章目录 实现方案 一.docx文件实现前端预览 1.docx-preview 2.Mammoth 二.PDF文件实现前端预览 1.pdf.js 2.pdfobject.js 3.vue-pdf 4. ...
- 使用libreoffice将office文档(word、ppt、excel)转pdf,实现在线预览
项目需要实现局域网预览office文档的功能,之前做的在线项目,都是将文档上传到cdn,利用cdn自带的转码功能,把文档转换为pdf,然后再用pdf.js实现在线预览. 因为是局域网,没有办法上传到c ...
- 【aspose】 word/excel转pdf,实现在线预览文件功能
项目场景: 需求描述:上传附件后,可实现在线预览,这里就会存在一个问题,很多附件的类型是没法在线预览的,点击就会下载.除pdf/jpg/jpeg等,于是技术方案定,将word/excel等类型的文件转 ...
- 前端实现docx、pdf格式文件在线预览
介绍 在业务中,如果遇到文档管理类的功能,会出现需要在线预览的业务需求,本文主要是通过第三方库来实现文档预览功能,并将其封装成preview组件 docx docx的实现需要使用docx-previe ...
最新文章
- 有必要学python吗-学习Python有必要去培训机构吗?
- linux 网络管理 防火墙 iptables
- Spring5 - 向IOC容器中添加组件的4种方式
- 使用微型计算机的基础知识,计算机应用基础考试大纲基本要求1具有使用微型计算机的基础知识.DOC...
- 各个会议期刊论文录取情况
- redis的安装过程基本配置及遇到问题的解决
- 终于,把十大经典排序算法汇总了!(Java实现版)
- VSTO学习笔记(二)Excel对象模型
- FCPX插件:创意多画面组合动态分屏转场过渡 Multiscreen Transition
- ios 渐变透明背景_15张案例,告诉你PPT背景的处理套路
- CIF进口货物流程图_广州进口报关公司阿根廷红酒上海进口清关成本选择聚海
- boolean类型默认值_【Java基础】还在问String属于什么数据类型
- 一个功能强大超级好用的图表组件Dundas Chart
- jQuery常用语法总结
- 维特比算法(Viterbi Algorithm)
- 黑马程序员java整套视频地址 javaweb+ssh+ssm视频+源码+软件
- vue + d3.js(v6) 绘制【树状图/思维导图】
- python中shift函数_Pandas Shift函数的基础入门学习笔记
- 关于springboot微信点餐的错题集
- C++编译器优化:Copy Elision
热门文章
- 设计模式之策略模式(strategy)--游戏角色使用武器
- angularJS1笔记-(18)-$http及用angular实现JSONP跨域访问过程
- Qtum量子链应邀出席2019棉兰区块链沙龙进军东南亚市场第一站
- 前端框架——Jquery——基础篇2__获取DOM节点的值
- 函数,匿名函数新认知(与预解释、作用域的关系)
- 用iptables自动封连接数较大的IP防止CC***的方法 zt
- Spring的依赖注入和管理Bean
- windows下python安装Numpy和Scipy模块
- 6大设计原则之依赖倒置原则
- Sms中关于操作系统的部署之上