关于: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 目录下

上代码:

View Code

 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函数如下:

View Code

 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中调用方法的地方    改写成   调用控制台程序
代码如下:

View Code

 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中问题 最终解决篇—_—!相关推荐

  1. C# web实现word 转Html、office转Html、pdf转图片 在线预览文件

    改篇 pdf 预览再本机没问题,发布再iis中 不行 ,(使用剪贴板的问题..excel和word 可以,) pdf解决:请看我的博文 ----最终解决篇 详细配置及代码 word 转Html 1 / ...

  2. 文档转换、在线预览的几种方式以及推荐

    互联网时代的繁荣期,在线教育犹如三国中的巴蜀之地,无论是各大巨头还是中小软件.都希望在此领域分的一口肥肉. 其中,关于文档转换.一直是开发在线教育软件让人头痛的事. 在这先说一下文档转换以及预览的几种 ...

  3. img pdf 展示_pdf.js实现图片在线预览

    项目需求 前段时间项目中遇到了一个模块,是关于在线预览word文档(PDF文件)的,所以,找了很多插件,例如,pdf.js,pdfobject.js框架,但是pdfobject.js框架对于IE浏览器 ...

  4. java pdf 预览_pdf.js实现图片在线预览

    项目需求 前段时间项目中遇到了一个模块,是关于在线预览word文档(PDF文件)的,所以,找了很多插件,例如,pdf.js,pdfobject.js框架,但是pdfobject.js框架对于IE浏览器 ...

  5. java图片的在线预览_【Java】web实现图片在线预览

    一.场景还原 用户上传了一张图片,已有服务器保存路径,现由于系统配置无法直接通过图片URL打开预览图片,需实现点击预览将图片显示在浏览器上. 二.实现方法 html: 预览 此处用预览按钮方法实现 J ...

  6. 文档在线预览(四)使用js前端实现word、excel、pdf、ppt 在线预览

    文章目录 实现方案 一.docx文件实现前端预览 1.docx-preview 2.Mammoth 二.PDF文件实现前端预览 1.pdf.js 2.pdfobject.js 3.vue-pdf 4. ...

  7. 使用libreoffice将office文档(word、ppt、excel)转pdf,实现在线预览

    项目需要实现局域网预览office文档的功能,之前做的在线项目,都是将文档上传到cdn,利用cdn自带的转码功能,把文档转换为pdf,然后再用pdf.js实现在线预览. 因为是局域网,没有办法上传到c ...

  8. 【aspose】 word/excel转pdf,实现在线预览文件功能

    项目场景: 需求描述:上传附件后,可实现在线预览,这里就会存在一个问题,很多附件的类型是没法在线预览的,点击就会下载.除pdf/jpg/jpeg等,于是技术方案定,将word/excel等类型的文件转 ...

  9. 前端实现docx、pdf格式文件在线预览

    介绍 在业务中,如果遇到文档管理类的功能,会出现需要在线预览的业务需求,本文主要是通过第三方库来实现文档预览功能,并将其封装成preview组件 docx docx的实现需要使用docx-previe ...

最新文章

  1. 有必要学python吗-学习Python有必要去培训机构吗?
  2. linux 网络管理   防火墙 iptables
  3. Spring5 - 向IOC容器中添加组件的4种方式
  4. 使用微型计算机的基础知识,计算机应用基础考试大纲基本要求1具有使用微型计算机的基础知识.DOC...
  5. 各个会议期刊论文录取情况
  6. redis的安装过程基本配置及遇到问题的解决
  7. 终于,把十大经典排序算法汇总了!(Java实现版)
  8. VSTO学习笔记(二)Excel对象模型
  9. FCPX插件:创意多画面组合动态分屏转场过渡 Multiscreen Transition
  10. ios 渐变透明背景_15张案例,告诉你PPT背景的处理套路
  11. CIF进口货物流程图_广州进口报关公司阿根廷红酒上海进口清关成本选择聚海
  12. boolean类型默认值_【Java基础】还在问String属于什么数据类型
  13. 一个功能强大超级好用的图表组件Dundas Chart
  14. jQuery常用语法总结
  15. 维特比算法(Viterbi Algorithm)
  16. 黑马程序员java整套视频地址 javaweb+ssh+ssm视频+源码+软件
  17. vue + d3.js(v6) 绘制【树状图/思维导图】
  18. python中shift函数_Pandas Shift函数的基础入门学习笔记
  19. 关于springboot微信点餐的错题集
  20. C++编译器优化:Copy Elision

热门文章

  1. 设计模式之策略模式(strategy)--游戏角色使用武器
  2. angularJS1笔记-(18)-$http及用angular实现JSONP跨域访问过程
  3. Qtum量子链应邀出席2019棉兰区块链沙龙进军东南亚市场第一站
  4. 前端框架——Jquery——基础篇2__获取DOM节点的值
  5. 函数,匿名函数新认知(与预解释、作用域的关系)
  6. 用iptables自动封连接数较大的IP防止CC***的方法 zt
  7. Spring的依赖注入和管理Bean
  8. windows下python安装Numpy和Scipy模块
  9. 6大设计原则之依赖倒置原则
  10. Sms中关于操作系统的部署之上