SharePoint發行版本有SharePoint2003、SharePoint2007、Sharepoint 2010、SharePoint2013和SharePoint2016。SharePoint提供了功能強大的團隊協作環境,使得組織能夠在整個組織內部實現整合、組織、查找和提供 SharePoint站點。 在SharePoint使用過程中,經常會發現將文檔進行格式轉換的需求,之前,看到SharePoint 2013有將PPT轉換PDF文檔的服務,后來,才發現SharePoint 2010開始,就有將Word文檔轉換PDF的服務了,用起來還是不錯的。 下面,我們就來看看這個服務,如何將一個Word文檔庫批量轉換成PDF文件,或者,將單一Word文檔轉換為PDF文檔。 一、???????????? 效果展示 新建測試Word文檔,如下圖: 新建文檔庫inputList作為word存放庫,上傳測試文檔,如下圖:
???????? 新建文檔庫outputList,作為輸出PDF庫,里面沒有文件,如下圖:
執行文件轉換程序,執行后outputList文檔庫,如下圖: 發現outputList還是沒有文件,因為該服務是TimerJob的計時器任務,所以需要定時執行,去管理中心,找到該計劃任務,立即運行,如下圖: ???????? 再一次刷新outputList文檔庫,如下圖:
下載一個PDF文件到本地,PDF閱讀器打開,如下圖:
二、???????????? 操作步驟 1、? 新建項目,添加引用Microsoft.Office.Word.Server.dll,如下圖:
位置如下: C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.Office.Word.Server\v4.0_15.0.0.0__71e9bce111e9429c\Microsoft.Office.Word.Server.dll 2、? 引用類庫 using Microsoft.Office.Word.Server; using Microsoft.Office.Word.Server.Conversions; 主要用于轉換操作的是Microsoft.Office.Word.Server.Conversions,詳細請參考附后的msdn文檔。 3、? 編寫添加核心代碼之文檔庫批量轉換 ![]() 1 //創建一個轉換job 2 ConversionJob myJob = newConversionJob("Word Automation Services"); 3 4 //設置轉換job的UserToken、轉換格式 5 myJob.UserToken = site.UserToken; 6 myJob.Settings.OutputFormat = SaveFormat.PDF; 7 myJob.Settings.OutputSaveBehavior = SaveBehavior.AppendIfPossible; 8 9 //獲取轉出、轉入文檔庫10 SPList inputLibrary = web.Lists["inputlist"];11 SPList outputLibrary = web.Lists["outputlist"];12 13 //設置并執行轉換job14 myJob.AddLibrary(inputLibrary, outputLibrary);15 myJob.Start(); ![]() 4、? 編寫核心代碼之單一文件轉換 ![]() 1 //創建一個異步轉換 2 SyncConverter sc = newSyncConverter("Word Automation Services"); 3 4 //設置轉換UserToken、轉換類型等 5 sc.UserToken = site.UserToken; 6 sc.Settings.UpdateFields = true; 7 sc.Settings.OutputFormat = SaveFormat.PDF; 8 9 //讀取需要轉換的文件10 SPFolder docs = web.Folders[siteURL +11 "/Word_Transfer"];12 SPFile file = docs.Files[siteURL +13 "/Word_Transfer/SharePoint2013Word轉換PDF服務測試文檔.docx"];14 15 //生成保存轉換后文檔的文件流16 Stream fStream = file.OpenBinaryStream();17 SPFileStream stream = newSPFileStream(web, 0x1000);18 19 //啟動異步轉換20 ConversionItemInfo info = sc.Convert(fStream, stream);21 22 //轉換后文檔添加到文檔庫23 SPFile newFile = docs.Files.Add(24 "SharePoint2013Word轉換PDF服務測試文檔.pdf",25 stream,26 true); ![]() 5、? 單一文件轉換效果圖,如下圖:
三、???????????? Word Automation Services介紹 1、? 簡單介紹 Word Automation Services 是一項新的 SharePoint Server 2010 技術,它允許以無人參與的方式從服務器端轉換 Microsoft Word 支持的文檔。簡言之,Word Automation Services 采用 Word 客戶端應用程序的“另存為…”功能并為服務器復制該功能。 通過 Word Automation Services,以前需要您運行 Word 客戶端應用程序的任務現在可以無人參與模式自動運行,并且比以前的解決方案更可靠、伸縮性更強。 以上是msdn上,關于Word Automation Services的說明,msdn很清楚的說到,這個服務的本質是采用Word客戶端另存為的功能,所以,打開和另存的格式,和word2013客戶端基本一致。 ? 2、? Word Automation Services體系結構
如上圖,可以看到Word Automation Services服務的原理,通過對象模型將操作進入隊列管理器,排隊等候計時器作業(TimerJob)定時執行,然后調用Word文件轉換服務引擎,將轉換后的文件存入SharePoint內容數據庫。 特別的是,這個服務并不需要在服務器端,安裝Office Word各種版本,即可完成操作,并且支持SharePoint2010和SharePoint2013版本。 3、? Word Automation Services三個基本概念 Word Automation Services 包含三個基本概念,即轉換、轉換作業和文檔隊列。轉換是一個過程,在此過程中,Word Automation Services 會接收一個具有給定格式的文件,然后以不同的格式將該文件輸出。例如,服務可以將 Word 2010 文檔 (.docx) 轉換為 PDF 文檔。 所有轉換都通過以下步驟進行: ?? 創建一個轉換作業。 ?? 提供該作業的設置(例如,所需的輸出文件格式)。 ?? 向該作業添加一個或多個文件。 ?? 將該作業提交到文檔隊列。 所有轉換操作都基于轉換作業 的創建或使用。轉換作業將描述要轉換的文件和要對這些文件執行的操作。每個文件都將構成一個轉換項,并且每個轉換項都將映射到一個轉換作業。一個轉換作業可包含多個轉換項。 文檔隊列 是一個“先進先出”隊列,Word Automation Services 使用它根據為轉換作業設置的計劃來啟動轉換。 4、? 支持打開的文檔格式 ?? 打開 XML 文件格式文檔(.docx, .docm, .dotx, .dotm)。 ?? Word 97-2003 文檔(.doc, .dot)。 ?? RTF 格式文件 (.rtf)。 ?? 單個文件網頁(.mht, .mhtml)。 ?? Word 2003 XML 文檔 (.xml)。 ?? Word XML 文檔 (.xml)。 5、? 保存 Word 可以保存的文檔類型,除去支持以上支持打開的類型,還包括一下兩種: ?? 可移植文檔格式 (PDF) 文件。 ?? XML 紙張規范 (XPS) 文件。 四、???????????? 完整代碼 1、文檔庫批量轉換代碼 ![]() ![]() using (SPSite site = new SPSite(siteURL)){using (SPWeb web = site.OpenWeb()){ ConversionJob myJob = new ConversionJob("Word Automation Services"); myJob.UserToken = site.UserToken; myJob.Settings.OutputFormat = SaveFormat.PDF; myJob.Settings.OutputSaveBehavior = SaveBehavior.AppendIfPossible; SPList inputLibrary = web.Lists["inputlist"]; SPList outputLibrary = web.Lists["outputlist"]; myJob.AddLibrary(inputLibrary, outputLibrary); myJob.Start();}} ![]() 2、文檔單獨轉換代碼 ![]() ![]() using (SPSite site = new SPSite(siteURL)){using (SPWeb web = site.OpenWeb()){ SyncConverter sc = new SyncConverter("Word Automation Services"); sc.UserToken = site.UserToken; sc.Settings.UpdateFields = true; sc.Settings.OutputFormat = SaveFormat.PDF; SPFolder docs = web.Folders[siteURL + "/Word_Transfer"]; SPFile file = docs.Files[siteURL + "/Word_Transfer/SharePoint2013Word轉換PDF服務測試文檔.docx"]; Stream fStream = file.OpenBinaryStream(); SPFileStream stream = new SPFileStream(web, 0x1000); ConversionItemInfo info = sc.Convert(fStream, stream); SPFile newFile = docs.Files.Add( "SharePoint2013Word轉換PDF服務測試文檔.pdf", stream, true);}} ![]() Sharepoint 可以幫助企業用戶輕松完成日常工作。 |
溫馨提示:喜歡本站的話,請收藏一下本站!