SharePoint 2013 Word 轉換PDF服務介紹及示例


  前言:在SharePoint使用過程中,經常會發現將文檔進行格式轉換的需求,之前,看到SharePoint 2013有將PPT轉換PDF文檔的服務,后來,才發現SharePoint 2010開始,就有將Word文檔轉換PDF的服務了,用起來還是不錯的。

  下面,我們就來看看這個服務,如何將一個Word文檔庫批量轉換成PDF文件,或者,將單一Word文檔轉換為PDF文檔。

一、             效果展示

新建測試Word文檔,如下圖:
image

新建文檔庫inputList作為word存放庫,上傳測試文檔,如下圖:

image 

         新建文檔庫outputList,作為輸出PDF庫,里面沒有文件,如下圖:

image 

執行文件轉換程序,執行后outputList文檔庫,如下圖:

image

發現outputList還是沒有文件,因為該服務是TimerJob的計時器任務,所以需要定時執行,去管理中心,找到該計划任務,立即運行,如下圖:image

         再一次刷新outputList文檔庫,如下圖:

image 

下載一個PDF文件到本地,PDF閱讀器打開,如下圖:

image

二、             操作步驟

1、  新建項目,添加引用Microsoft.Office.Word.Server.dll,如下圖:

image 

位置如下:

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 //設置並執行轉換job
14 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、  單一文件轉換效果圖,如下圖:

image 

三、             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體系結構

image 

  如上圖,可以看到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(); } }
View Code

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); } }
View Code

參考文獻

Word Automation Services

http://msdn.microsoft.com/zh-cn/library/ee558278(v=office.14).aspx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM