C# asp.net word 转pdf
1
using oWord = Word;2
using System.Diagnostics;3

4
5

/**//// <summary>6
/// WORD转PDF7
/// </summary>8
/// <param name="TagerFilePath">需要转换的WORD文件(包括路径和文件名如:C:\TEST.DOC)</param>9
private void WordConvert(string TagerFilePath)10

{11
12
FilePath = TagerFilePath.Substring(0, TagerFilePath.Length - 4);13
oWord.ApplicationClass word = new Word.ApplicationClass();14
Type wordType = word.GetType();15

16
//打开WORD文档 17

/**//*对应脚本中的 18
var word = new ActiveXObject("Word.Application"); 19
var doc = word.Documents.Open(docfile); 20
*/21
oWord.Documents docs = word.Documents;22
Type docsType = docs.GetType();23
object objDocName = FilePath;24

oWord.Document doc = (oWord.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[]
{ objDocName, true, true });25

26
//打印输出到指定文件 27
//你可以使用 doc.PrintOut();方法,次方法调用中的参数设置较繁琐,建议使用 Type.InvokeMember 来调用时可以不用将PrintOut的参数设置全,只设置4个主要参数 28
Type docType = doc.GetType();29
object printFileName = FilePath + ".ps";30

docType.InvokeMember("PrintOut", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[]
{ false, false, oWord.WdPrintOutRange.wdPrintAllDocument, printFileName });31
//new object[]{false,false,oWord.WdPrintOutRange.wdPrintAllDocument,printFileName} 32
//对应脚本中的word.PrintOut(false, false, 0, psfile);的参数 33

34
//退出WORD 35
//对应脚本中的word.Quit(); 36
doc = null;37
wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);38

39

40
object o1 = FilePath + ".ps";41
object o2 = FilePath + ".pdf";42
object o3 = "";43

44
//引用将PS转换成PDF的对象 45
//try catch之间对应的是脚本中的 PDF.FileToPDF(psfile,pdffile,""); //你可以使用 pdfConvert.FileToPDF("c:\\test.ps","c:\\test.pdf","");这样的转换方法,本人只是为了保持与WORD相同的调用方式 46
try47

{48
ACRODISTXLib.PdfDistillerClass pdf = new ACRODISTXLib.PdfDistillerClass();49
pdf.bShowWindow = 0;50
pdf.bSpoolJobs = 0;51
//pdf.FileToPDF(FilePath + ".ps", FilePath + ".pdf", @"Standard");52
pdf.FileToPDF(FilePath + ".ps", FilePath + ".pdf", @"Standard");53
//Type pdfType = pdfConvert.GetType(); 54
//pdfType.InvokeMember("FileToPDF", System.Reflection.BindingFlags.InvokeMethod, null, pdf, new object[] { o1, o2, o3 }); 55

56

57
FileStream fs = new FileStream(FilePath + ".pdf", FileMode.Open, FileAccess.Read);58

59

60
BinaryReader br = new BinaryReader(fs);61
byte[] data = br.ReadBytes((int)fs.Length);62
br.Close();63
fs.Close();64

65
HttpContext.Current.Request.ContentType = "application/pdf";66
HttpContext.Current.Response.BinaryWrite(data);67
HttpContext.Current.Response.Flush();68
// HttpContext.Current.Response.Close();69
pdf = null;70
}71

catch
{ } //读者自己补写错误处理 72
finally73

{74
doc = null;75
word = null;76
77
}78

79
//为防止本方法调用多次时发生错误,必须停止acrodist.exe进程 80
foreach (Process proc in System.Diagnostics.Process.GetProcesses())81

{82
int begpos;83
int endpos;84

85
string sProcName = proc.ToString();86
begpos = sProcName.IndexOf("(") + 1;87
endpos = sProcName.IndexOf(")");88

89
sProcName = sProcName.Substring(begpos, endpos - begpos);90

91
if (sProcName.ToLower().CompareTo("acrodist") == 0)92

{93
try94

{95
proc.Kill(); //停止进程 96
}97

catch
{ } //读者自己补写错误处理 98
break;99
}100
}101

102

103

104

注意:要把PDF虚拟打印机的“不要发送字体到 Adobe PDF”去掉打钓!
今天发现一问题,那就是,我用的是vs2005的时候,不用IIS能转过来,但用了IIS后发现不能转。不真怎么样回事,有谁知道还要设置些什么东西的么?2009-6-26
我的淘宝店:http://hamby.taobao.com

浙公网安备 33010602011771号