ASP.NET實現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,"");
- fso.GetFile(psfile).Delete();//刪除PS腳本文件
- fso.GetFile(logfile).Delete();//刪除轉換的日志文件
- word.Quit();
- WScript.Echo("isuccess");//成功
- WScript.Quit(0);
- }
- catch(x)
- {
- word.Quit();
- WScript.Echo("isfail");//失敗
- WScript.Quit(0);
- }
然后測試該腳本程序
啟動MS-DOS,輸入如下命令:c:\>cscript //nologo c:\ConvertDoc2PDF.js c:\test.doc c:\
說明:
運行成功后將看到test.pdf文檔了
c:\test.doc參數對應的是腳本程序中的files(0)
c:\參數對應的是腳本程序中的files(1)
你可以安照該腳本改寫成,支持多個參數,使用FOR循環,一次轉換多個WORD文檔,此處沒有使用多個文件轉換功能,是考慮到,該段腳本放在C#的線程中執行,這樣一來也可以轉換多個WORD文檔.
四:使用C#調用ConvertDoc2PDF.js腳本
新建一個C#的WINDOWS應用程序,添加一個按鈕button1添加一個函數,函數名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();
- }
結束語:
以上介紹ASP.NET實現WORD文件自動轉換PDF,Adobe Acrobat 7.0 Professional,postscript.exe,gs811w32.exe這三個文件可以在itbaby.jss.cn下載,都包含在同一個RAR的壓縮文件中了。
itbaby.jss.cn是動態域名,主機在作者家里,如果網站不能訪問,說明電腦沒有開,請稍后幾天再試。
【編輯推薦】