明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

ASP.Net完成將Word轉(zhuǎn)換PDF格式

[摘要]前言:由于一個(gè)客戶的項(xiàng)目中需要將WORD文檔轉(zhuǎn)換成PDF格式,故寫了本篇實(shí)站教程 需求分析:客戶的項(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è)C...

前言:由于一個(gè)客戶的項(xiàng)目中需要將WORD文檔轉(zhuǎn)換成PDF格式,故寫了本篇實(shí)站教程

需求分析:客戶的項(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ù)自動(dòng)轉(zhuǎn)換WORD文檔到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文檔.


[1] [2] [3]  下一頁(yè)