当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > ASP.Net实现将Word转换PDF格式

ASP.NET
赫赫大名的A*寻路算法(vb.net版本)
asp.net(c#)下Jmai去说明 使用与下载
[原创]完美解决Could not load file or assembly ''AjaxPro.2'' or one of its dependencies. 拒绝访问。
asp.net下gridview 批量删除的实现方法
用CSS实现图片倾斜 只支持IE
.net get set用法小结
vs 不显示行号的操作方法
ASP.NET页面进行GZIP压缩优化的几款压缩模块的使用简介及应用测试!(附源码)
ASP.Net不执行问题一解
asp.net 无限分类
让VS2008对JQuery语法的智能感知更完美一点
扩展方法ToJSON() and ParseJSON()
asp.net下PageMethods使用技巧
Linq to SQL Delete时遇到问题的解决方法
实现ASP.NET多文件上传程序代码
ASP.NET AJAX 1.0 RC开发10分钟图解
asp.net get set用法
ASP.NET下使用WScript.Shell执行命令
asp.net2.0实现邮件发送(测试成功)
Asp.net 无限级分类实例代码

ASP.NET 中的 ASP.Net实现将Word转换PDF格式


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 96 ::
收藏到网摘: n/a

前言:由于一个客户的项目中需要将WORD文档转换成PDF格式,故写了本篇实站教程

需求分析:客户的项目以B/S结构为主,提供一个WORD文件在后台自动转换成PDF,经过实际测试,如果该篇WORD文档有100多页的话,转换需要20分钟左右的时间(环境:CPU是奔腾M 1.6G,512M内存),整个CPU的占用率近乎95%~100%,此结果告诉客户以后,客户提议:到客户下班后,自动转换PDF,同时如果使用人确认要查看该PDF文档,如果没有转换,提供给客户选择,是现在转换成PDF,还是由服务器在客户下班后,自动转换。

项目功能:按需求分析要写两个功能

第一为:B/S结构后台转换,要提交给客户选择

第二为:Windows服务自动转换WORD文档到PDF

这两个分类:核心的转换程序都是采用线程的方式执行,只不过第一个功能是针对一个WORD文件,第二个功能针对所有未转换的WORD文档.

分析到现在:我们开始实战转换了!

一:必备工具

安装必须的工具MS VS.Net2003,MS Office2003,Adobe Acrobat 7.0 Professional,postscript.exe,gs811w32.exe

MS VS.Net2003的安装不说明

MS Office2003的安装不说明

Adobe Acrobat 7.0 Professional安装说明

运行setup.exe文件,出现输入序列号,就运行注册机,用鼠标在第一行刷下就可以看见序列号,复制粘贴到Adobe Acrobat 7.0 Professional安装程序对话框,安装到最后出现注册时,点击PHONE...将安装程序中显示的第二行序列号(第一行是刚才注册机生成的序列号)复制粘贴到注册机的第二行,点击右边的按钮,再用鼠标刷第三行授权号就出来了,将其复制粘贴到安装程序的最后一行,完成安装注册!

postscript.exe默认安装就可以了,它是一个PDF转换时所需要的脚本

gs811w32.exe默认安装就可以,它其实是个PDF虚拟打印机的驱动

二:配置虚拟打印机

进入Windows的控制面板,进入打印机,点击"添加打印机"图标.在安装对话框上"按一步",出现选择打印机时,在制造商一栏中选择"Generic",在打印机一栏中,选择"MS Publisher Color Printer",然后一路按下一步,知道安装结束.

三:开始写第一个程序(脚本程序)

为什么要使用脚本程序进行转换呢,其实实际测试过程中,使用PDF Distiller的对象引用到C#后,转换成功,但整个PDF Distiller对象不能释放,第二次再转换时,就发生了错误,故此处使用脚本程序实现转换.这样我们只要在C#的程序中调用脚本程序就可以实现WORD到PDF的转换。

宿主脚本文件名:ConvertDoc2PDF.js

脚本文件内容:

var files = WScript.Arguments;

var fso = new ActiveXObject("Scripting.FileSystemObject");

var word = new ActiveXObject("Word.Application");

var PDF = new ActiveXObject("PDFDistiller.PDFDistiller.1");

word.ActivePrinter = "MS Publisher Color Printer";

//files(0) 为WORD文档文件名

//files(1) 为,转换后需要保存的路径

//调用fso.GetBaseName(files(0))后,为无路径,无扩展名,的文件名

//files.length为文件参数的个数,使用循环可以支持多个WORD文档的转换

var docfile = files(0);

var psfile = files(1) + fso.GetBaseName(files(0)) + ".ps";

var pdffile = files(1) + fso.GetBaseName(files(0)) + ".pdf";

var logfile = files(1) + fso.GetBaseName(files(0)) + ".log";

try{

var doc = word.Documents.Open(docfile);

//WORD文件转成PS文件;

word.PrintOut(false, false, 0, psfile);

doc.Close(0);

//PS文件转成PDF文件;

PDF.FileToPDF(psfile,pdffile,"")