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)的更多相关文章

  1. ASP.NET MVC在线预览Excel、Word、TXT、PDF文件

    代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syste ...

  2. java实现在线预览--poi实现word、excel、ppt转html

    java实现在线预览 - -之poi实现word.excel.ppt转html 简介 java实现在线预览功能是一个大家在工作中也许会遇到的需求,如果公司有钱,直接使用付费的第三方软件或者云在线预览服 ...

  3. 前端实现预览ppt,word,xls,pdf文件

    1.前端实现pdf文件在线预览功能 ps:刚好工作上有这个需求,所以到处找了一下处理方案,大家有需要可以试一下这几种方案,找到合适自己的 方式一. pdf文件理论上可以在浏览器直接打开预览但是需要打开 ...

  4. 文档控件NTKO OFFICE 详细使用说明之预览Excel文件(查看、编辑、保存回服务器)

    1.在线预览Excel文件 (1) 运行环境 ① 浏览器:支持IE7-IE11(平台版本还支持Chrome和Firefox) ② IE工具栏-Internet 选项:将www.ntko.com加入到浏 ...

  5. Winforn中使用FastReport实现点击导出按钮PDF预览并弹出另存为对话框

    场景 FastReport安装包下载.安装.去除使用限制以及工具箱中添加控件: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  6. 在网页中预览excel表格文件

    项目需求在前端页面中实现预览excel表格的功能,上网了解之后大致总结为一下几种方法. 1.office文档转换为pdf,再转swf,然后通过网页加载flash进行预览 2.通过 xlsx.js,js ...

  7. 浏览器实现PDF预览

    1.使用jquery.media.js预览PDF <!DOCTYPE html> <html> <head> <meta charset="utf- ...

  8. PDF预览之PDFObject.js总结

    get from:PDF预览之PDFObject.js总结   PDFObject.js - 将PDF嵌入到一个div内,而不是占据整个页面(要求浏览器支持显示PDF,不支持,可配置PDF.js来实现 ...

  9. Pdf预览功能实现(asp.net)

    asp.net中使用 1.pdf预览功能实现的插件是pdfjs-1.5.188-dist //引入插件中相关的文件以及jquery文件 @section css{ <link rel=" ...

随机推荐

  1. outlook邮件中样式问题

    目前要做一个定时发送邮件的功能,邮件的大致内容布局如下: HTML中 在QQ邮件中,可以进行正常显示. 在outlook网页版,也可以正常显示, outlook客户端 但是到了客户端就会出现很多很神奇 ...

  2. 20165235 2018-3 《Java程序设计》第5周学习总结

    20165235 2018-3 <Java程序设计>第5周学习总结 教材学习内容总结 第六章 内部类与异常类 (一)内部类:1.java支持在一个类中定义另一个类,这个类叫内部类.2.内部 ...

  3. 【未解决】Linux下PHP安装扩展Mysql的问题

    [步骤分析] 1.在PHP源码包下定位到指定位置:源码包/ext/mysqli 注1:网上很多地方红字部分是mysql,其实PHP5以后已经不用mysql了. 2.运行:/usr/local/php/ ...

  4. Codeforces 1130D1 Toy Train (Simplified) (思维)【贪心】

    <题目链接> 题目大意: 有一个的环形火车站,其中有$[1,n] n$个站台,站台上能够放糖果,火车只能朝一个方向移动,如果火车在站台$i$,那么下一秒就会在$i+1$站(如果$i=n$, ...

  5. HDU 5592 ZYB's Game 【树状数组】+【二分】

    <题目链接> 题目大意: 给你一个由1~n,n个数组成的序列,给出他们每个的前缀逆序数,现在要求输出这个序列. 解题分析: 由前缀逆序数很容易能够得到每个数的逆序数.假设当前数是i,它前面 ...

  6. HDU-1247 Hat’s Words (暴力)【Trie树】

    <题目链接> 题目大意: 给你一些单词,要求输出将该单词完全分成前.后两个单词之后,若这两个单词都在单词库中出现,则输出该单词. 解题分析: 将每个单词的每一位能够拆分的位置全部暴力枚举一 ...

  7. Git rebase命令实战

    一.前言 一句话,git rebase 可以帮助项目中的提交历史干净整洁!!! 二.避免合并出现分叉现象 git merge操作 1.新建一个 develop 分支   2.在develop分支上新建 ...

  8. 【java并发核心八】Fork-Join分治编程

    jdk1.7中提供了Fork/Join并行执行任务框架,主要作用就是把大任务分割成若干个小任务,再对每个小任务得到的结果进行汇总. 正常情况下,一些小任务我们可以使用单线程递归来实现,但是如果要想充分 ...

  9. 大数据小白系列——HDFS(4)

    这里是大数据小白系列,这是本系列的第四篇,来看一个真实世界Hadoop集群的规模,以及我们为什么需要Hadoop Federation. 首先,我们先要来个直观的印象,这是你以为的Hadoop集群: ...

  10. linux 学习笔记 finding people

    #who 或者 #w 展示所有登录到当前系统的用户信息 #who am i 展示真是用户信息 #whoami  展示登陆系统的用户名 例如 : 登陆用户和真实用户一致 #whoami root #wh ...