通过Pdf预览Excel或者word或者Powerpoint (C#将Office转换为PDF)
1.示意代码
下面代码是Excel转换为PDF
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ms = Microsoft.Office.Interop.Excel; public class Excel2Pdf
{
public static void ToPdf(string excelName, string pdfName)
{
ms.Application app = new ms.Application();
ms.Workbook workBook;
app.ScreenUpdating = false;
var workBooks = app.Workbooks;
workBook = workBooks.Open(HttpContext.Current.Server.MapPath(excelName));
if (workBook == null)
{
app.Quit();
app = null;
workBook = null;
return ;
} workBook.ExportAsFixedFormat(Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF, HttpContext.Current.Server.MapPath(pdfName));
workBook.Close();
System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workBooks);
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
}
}
下面代码是将Word转换为PDF
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ms=Microsoft.Office.Interop.Word; public class Word2Pdf
{ public static void ToPdf(string wordName, string pdfName)
{
ms.Application word=new ms.Application();
word.ScreenUpdating = false;
ms.Document doc=word.Documents.Open(HttpContext.Current.Server.MapPath(wordName));
doc.ExportAsFixedFormat(HttpContext.Current.Server.MapPath(pdfName),ms.WdExportFormat.wdExportFormatPDF); doc.Close();
word.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
System.Runtime.InteropServices.Marshal.ReleaseComObject(word);
}
}
用同样的方法,可以写出Powerpoint转换为PDF的方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ms = Microsoft.Office.Interop.PowerPoint; public class Ppt2Pdf
{
public static void ToPdf(string pptName, string pdfName)
{ ms.Application app = new ms.Application();
ms.Presentation pre = null; pre=app.Presentations.Open(
HttpContext.Current.Server.MapPath(pptName),
Microsoft.Office.Core.MsoTriState.msoTrue,
Microsoft.Office.Core.MsoTriState.msoTrue,
Microsoft.Office.Core.MsoTriState.msoFalse
); pre.SaveAs(
HttpContext.Current.Server.MapPath(pdfName),
Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsPDF,
Microsoft.Office.Core.MsoTriState.msoCTrue); GC.Collect();
GC.WaitForPendingFinalizers(); // https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2003/aa679807(v=office.11)
// System.Runtime.InteropServices.Marshal.ReleaseComObject(cell); pre.Close();
System.Runtime.InteropServices.Marshal.ReleaseComObject(pre); app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(app); //pre.ExportAsFixedFormat(
// HttpContext.Current.Server.MapPath(pdfName),
// Microsoft.Office.Interop.PowerPoint.PpFixedFormatType.ppFixedFormatTypePDF,
// Microsoft.Office.Interop.PowerPoint.PpFixedFormatIntent.ppFixedFormatIntentPrint, //MsoTriState.msoFalse, Microsoft.Office.Interop.PowerPoint.PpPrintHandoutOrder.ppPrintHandoutVerticalFirst, //Microsoft.Office.Interop.PowerPoint.PpPrintOutputType.ppPrintOutputSlides, MsoTriState.msoFalse, null, //Microsoft.Office.Interop.PowerPoint.PpPrintRangeType.ppPrintAll, string.Empty, true, true, true, //true, false, unknownType); }
}
上面代码,本机测试运行的很好,但是一旦部署到服务器上面,很可能出现如下错误:
Microsoft Office Excel 不能访问文件“D:\WWWRoot\\QUOTE5.xls”。 可能的原因有: 1 文件名称或路径不存在。 2 文件正被其他程序使用。 3 您正要保存的工作簿与当前打开的工作簿同名。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Runtime.InteropServices.COMException: Microsoft Office Excel 不能访问文
2.权限设置
这是因为,默认IIS无法启动Office程序,所以,我们还要修改IIS。具体如下
1.以启明星电子文档看为例,系统默认使用edoc应用程序池。在edoc应用程序池上,修改应用程序池标识。使用内置的administrator账户。

2.2.1 在IIS应用程序池里找到 edoc,点击“高级设置”,在标识里选择 自定义用户,选择 “自定义账户”,选择 LocalSystem
2.2.2 在开始--〉运行--〉cmd
2.2.3 命令提示符下面,输入mmc -32,打开32的控制台
2.2.4 文件菜单中,添加删除管理单元--〉组件服务
2.2.5 在"DCOM配置"中找到"Microsoft Excel 应用程序", 在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应用程序属性"对话框
2.2.6 点击"标识"标签,选择"下列用户" ,然后选择“Administrator”
2.2.7 点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限
2.2.8 依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限.
2.2.9 上面步骤主要是让启明星电子文档库能够操作Excel
2.2.10 重复上面2.2.5步骤,在"DCOM配置"中找到"Microsoft Word 97-2003 应用程序...点击属性。。。 以下步骤和上面设置Excel一样。
2.2.11 重复上面2.2.5步骤,在"DCOM配置"中找到"Microsoft PowerPoint 应用程序...点击属性。。。 以下步骤和上面设置Excel一样。
2.2.12 重启电脑
*在上面测试中,有时候能成功,有时候并未成功。
通过Pdf预览Excel或者word或者Powerpoint (C#将Office转换为PDF)的更多相关文章
- ASP.NET MVC在线预览Excel、Word、TXT、PDF文件
代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syste ...
- java实现在线预览--poi实现word、excel、ppt转html
java实现在线预览 - -之poi实现word.excel.ppt转html 简介 java实现在线预览功能是一个大家在工作中也许会遇到的需求,如果公司有钱,直接使用付费的第三方软件或者云在线预览服 ...
- 前端实现预览ppt,word,xls,pdf文件
1.前端实现pdf文件在线预览功能 ps:刚好工作上有这个需求,所以到处找了一下处理方案,大家有需要可以试一下这几种方案,找到合适自己的 方式一. pdf文件理论上可以在浏览器直接打开预览但是需要打开 ...
- 文档控件NTKO OFFICE 详细使用说明之预览Excel文件(查看、编辑、保存回服务器)
1.在线预览Excel文件 (1) 运行环境 ① 浏览器:支持IE7-IE11(平台版本还支持Chrome和Firefox) ② IE工具栏-Internet 选项:将www.ntko.com加入到浏 ...
- Winforn中使用FastReport实现点击导出按钮PDF预览并弹出另存为对话框
场景 FastReport安装包下载.安装.去除使用限制以及工具箱中添加控件: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...
- 在网页中预览excel表格文件
项目需求在前端页面中实现预览excel表格的功能,上网了解之后大致总结为一下几种方法. 1.office文档转换为pdf,再转swf,然后通过网页加载flash进行预览 2.通过 xlsx.js,js ...
- 浏览器实现PDF预览
1.使用jquery.media.js预览PDF <!DOCTYPE html> <html> <head> <meta charset="utf- ...
- PDF预览之PDFObject.js总结
get from:PDF预览之PDFObject.js总结 PDFObject.js - 将PDF嵌入到一个div内,而不是占据整个页面(要求浏览器支持显示PDF,不支持,可配置PDF.js来实现 ...
- Pdf预览功能实现(asp.net)
asp.net中使用 1.pdf预览功能实现的插件是pdfjs-1.5.188-dist //引入插件中相关的文件以及jquery文件 @section css{ <link rel=" ...
随机推荐
- 实际生产用法CMS和G1
java -Xms100m -Xmx100m -Xmn50m -XX:MetaspaceSize=20m -XX:MaxMetaspaceSize=20m -XX:+UseConcMarkSweepG ...
- 带你了解zabbix整合ELK收集系统异常日志触发告警~
今天来了解一下关于ELK的“L”-Logstash,没错,就是这个神奇小组件,我们都知道,它是ELK不可缺少的组件,完成了输入(input),过滤(fileter),output(输出)工作量,也是我 ...
- Codeforces 596D Wilbur and Trees dp (看题解)
一直在考虑, 每一段的贡献, 没想到这个东西能直接dp..因为所有的h都是一样的. #include<bits/stdc++.h> #define LL long long #define ...
- java生成二维码以及读取案例
今天有时间把二维码这块看了一下,方法有几种,我只是简单的看了一下 google 的 zxing! 很简单的一个,比较适合刚刚学习java的小伙伴哦!也比较适合以前没有接触过和感兴趣的的小伙伴,o ...
- TensorFlow卷积层-函数
函数1:tf.nn.conv2d是TensorFlow里面实现卷积的函数,实际上这是搭建卷积神经网络比较核心的一个方法 函数原型: tf.nn.conv2d(input,filter,strides, ...
- hdu 2091空心三角形
把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效果.在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出来,以便看看效果. Input每行包含 ...
- Java大数相加(多个大数相加)-hdu1250
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1250 题目描述: 题目大意是:已知一个Hat's Fibonacci序列,该序列满足F(1) = 1, ...
- Masquerade strikes back Gym - 101911D (数学)
Quite often the jury of Saratov SU use the problem "Masquerade" in different practice sess ...
- Python并发复习1 - 多线程
一.基本概念 程序: 指令集,静态, 进程: 当程序运行时,会创建进程,是操作系统资源分配的基本单位 线程: 进程的基本执行单元,每个进程至少包含一个线程,是任务调度和执行的基本单位 > 进程和 ...
- MySQL数据库基本用法-查询
查询的基本语法 select * from 表名; from关键字后面写表名,表示数据来源于是这张表 select后面写表中的列名,如果是*表示在结果中显示表中所有列 在select后面的列名部分,可 ...