ASP.NET實(shí)現(xiàn)WORD文件自動(dòng)轉(zhuǎn)換PDF
需求分析:客戶的項(xiàng)目以B/S結(jié)構(gòu)為主,提供一個(gè)WORD文件在后臺(tái)自動(dòng)轉(zhuǎn)換PDF,經(jīng)過實(shí)際測(cè)試,如果該篇WORD文檔有100多頁(yè)的話,轉(zhuǎn)換需要20分鐘左右的時(shí)間(環(huán)境:CPU是奔騰M 1.6G,512M內(nèi)存),整個(gè)CPU的占用率近乎95%~100%,此結(jié)果告訴客戶以后,客戶提議:到客戶下班后,自動(dòng)轉(zhuǎn)換PDF,同時(shí)如果使用人確認(rèn)要查看該P(yáng)DF文檔,如果沒有轉(zhuǎn)換,提供給客戶選擇,是現(xiàn)在轉(zhuǎn)換PDF,還是由服務(wù)器在客戶下班后,自動(dòng)轉(zhuǎn)換。
項(xiàng)目功能:按需求分析要寫兩個(gè)功能
***為:B/S結(jié)構(gòu)后臺(tái)轉(zhuǎn)換,要提交給客戶選擇
第二為:Windows服務(wù)WORD文件自動(dòng)轉(zhuǎn)換PDF
這兩個(gè)分類:核心的轉(zhuǎn)換程序都是采用線程的方式執(zhí)行,只不過***個(gè)功能是針對(duì)一個(gè)WORD文件,第二個(gè)功能針對(duì)所有未轉(zhuǎn)換的WORD文件
分析到現(xiàn)在:我們開始實(shí)戰(zhàn)轉(zhuǎn)換了!
一:必備工具
安裝必須的工具M(jìn)S VS.Net2003,MS Office2003,Adobe Acrobat 7.0 Professional,postscript.exe,gs811w32.exe
◆MS VS.Net2003的安裝不說明
◆MS Office2003的安裝不說明
◆Adobe Acrobat 7.0 Professional安裝說明
運(yùn)行setup.exe文件,出現(xiàn)輸入序列號(hào),就運(yùn)行注冊(cè)機(jī),用鼠標(biāo)在***行刷下就可以看見序列號(hào),復(fù)制粘貼到Adobe Acrobat 7.0 Professional安裝程序?qū)υ捒?,安裝到***出現(xiàn)注冊(cè)時(shí),點(diǎn)擊PHONE...將安裝程序中顯示的第二行序列號(hào)(***行是剛才注冊(cè)機(jī)生成的序列號(hào))復(fù)制粘貼到注冊(cè)機(jī)的第二行,點(diǎn)擊右邊的按鈕,再用鼠標(biāo)刷第三行授權(quán)號(hào)就出來(lái)了,將其復(fù)制粘貼到安裝程序的***一行,完成安裝注冊(cè)!
◆postscript.exe默認(rèn)安裝就可以了,它是一個(gè)PDF轉(zhuǎn)換時(shí)所需要的腳本
◆gs811w32.exe默認(rèn)安裝就可以,它其實(shí)是個(gè)PDF虛擬打印機(jī)的驅(qū)動(dòng)
二:配置虛擬打印機(jī)
進(jìn)入Windows的控制面板,進(jìn)入打印機(jī),點(diǎn)擊"添加打印機(jī)"圖標(biāo).在安裝對(duì)話框上"按一步",出現(xiàn)選擇打印機(jī)時(shí),在制造商一欄中選擇"Generic",在打印機(jī)一欄中,選擇"MS Publisher Color Printer",然后一路按下一步,知道安裝結(jié)束.
三:開始寫***個(gè)程序(腳本程序)
為什么要使用腳本程序進(jìn)行轉(zhuǎn)換呢,其實(shí)實(shí)際測(cè)試過程中,使用PDF Distiller的對(duì)象引用到C#后,轉(zhuǎn)換成功,但整個(gè)PDF Distiller對(duì)象不能釋放,第二次再轉(zhuǎn)換時(shí),就發(fā)生了錯(cuò)誤,故此處使用腳本程序?qū)崿F(xiàn)轉(zhuǎn)換.這樣我們只要在C#的程序中調(diào)用腳本程序就可以實(shí)現(xiàn) WORD到PDF的轉(zhuǎn)換。
宿主腳本文件名:ConvertDoc2PDF.js
腳本文件內(nèi)容:
- 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) 為,轉(zhuǎn)換后需要保存的路徑
- //調(diào)用fso.GetBaseName(files(0))后,為無(wú)路徑,無(wú)擴(kuò)展名,的文件名
- //files.length為文件參數(shù)的個(gè)數(shù),使用循環(huán)可以支持多個(gè)WORD文檔的轉(zhuǎn)換
- 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文件轉(zhuǎn)成PS文件;
- word.PrintOut(false, false, 0, psfile);
- doc.Close(0);
- //PS文件轉(zhuǎn)成PDF文件;
- PDF.FileToPDF(psfile,pdffile,"");
- fso.GetFile(psfile).Delete();//刪除PS腳本文件
- fso.GetFile(logfile).Delete();//刪除轉(zhuǎn)換的日志文件
- word.Quit();
- WScript.Echo("isuccess");//成功
- WScript.Quit(0);
- }
- catch(x)
- {
- word.Quit();
- WScript.Echo("isfail");//失敗
- WScript.Quit(0);
- }
然后測(cè)試該腳本程序
啟動(dòng)MS-DOS,輸入如下命令:c:\>cscript //nologo c:\ConvertDoc2PDF.js c:\test.doc c:\
說明:
運(yùn)行成功后將看到test.pdf文檔了
c:\test.doc參數(shù)對(duì)應(yīng)的是腳本程序中的files(0)
c:\參數(shù)對(duì)應(yīng)的是腳本程序中的files(1)
你可以安照該腳本改寫成,支持多個(gè)參數(shù),使用FOR循環(huán),一次轉(zhuǎn)換多個(gè)WORD文檔,此處沒有使用多個(gè)文件轉(zhuǎn)換功能,是考慮到,該段腳本放在C#的線程中執(zhí)行,這樣一來(lái)也可以轉(zhuǎn)換多個(gè)WORD文檔.
四:使用C#調(diào)用ConvertDoc2PDF.js腳本
新建一個(gè)C#的WINDOWS應(yīng)用程序,添加一個(gè)按鈕button1添加一個(gè)函數(shù),函數(shù)名StartConvertPDF
- publicvoidStartConvertPDF()
- {
- Processproc=newProcess();
- proc.StartInfo.FileName="cmd.exe";
- proc.StartInfo.WorkingDirectory=@"c:\";
- proc.StartInfo.CreateNoWindow=true;
- proc.StartInfo.UseShellExecute=false;
- proc.StartInfo.RedirectStandardInput=true;//輸入重定向
- proc.Start();
- proc.StandardInput.WriteLine(@"cscript//nologoc:\ConvertDoc2PDF.jsc:\test.docc:\");
- proc.StandardInput.WriteLine("exit");
- proc.WaitForExit();
- }
結(jié)束語(yǔ):
以上介紹ASP.NET實(shí)現(xiàn)WORD文件自動(dòng)轉(zhuǎn)換PDF,Adobe Acrobat 7.0 Professional,postscript.exe,gs811w32.exe這三個(gè)文件可以在itbaby.jss.cn下載,都包含在同一個(gè)RAR的壓縮文件中了。
itbaby.jss.cn是動(dòng)態(tài)域名,主機(jī)在作者家里,如果網(wǎng)站不能訪問,說明電腦沒有開,請(qǐng)稍后幾天再試。
【編輯推薦】