在上一篇文章(Office Web Apps Server 2013與PDF(一))中,曾經介紹了Office Web Apps Server 2013在更新后,可以直接對PDF文檔進行在線的查看。不過文章中還遺留了兩個小問題:
1、搜索結果頁面的PDF文檔預覽
2、文檔庫視圖頁面的PDF文檔預覽
本文主要就關注在這兩個問題上。
首先來看搜索結果頁面。2013在搜索結果頁面中,如果集成了Office Web Apps,默認對Office文檔提供了預覽功能,當鼠標移動到搜索結果的一個文檔上的時候,會出現如下圖所示的文檔預覽:
但如果是一個PDF文檔的話:
當我們的Office Web Apps Server 2013支持了PDF文檔預覽功能之后,並不會改變搜索結果預覽的默認行為,需要我們手動進行配置。在SharePoint 2013中,搜索結果的樣式是通過結果類型對應的模板(一個由html自動生成的js文件)來渲染的,我們只需要修改PDF文件對應的模板即可。
最簡單的方法,就是直接利用Word的顯示模板來顯示PDF文件(Office Web Apps是通過Word Web App來渲染PDF的,還記得么?)。
進入網站設置,在搜索區域中,進入“結果類型”:
這里面會列出所有自定義和SharePoint內置的結果類型,其中已經默認包含了PDF的結果類型,不過這個默認類型我們是無法修改或刪除的,但是可以復制它,強制使用我們復制的那個結果類型。在結果類型界面中,找到PDF,並復制:
在“操作”部分,把顯示模板從“PDF 項”直接修改為“Word 項”,並把結果類型的名字改成一個有意義的名字,比如“PDF with Preview”,然后保存。
(請無視那個糟爛的翻譯……英文版里面對應的是:What should these results look like)
然后……啊nia……木有效果……重啟IIS……木有效果……重新把PDF爬網了一下,好了(后來看了一下模板里面的代碼,里面有個EmbeddedUrl、PreviewUrl之類的屬性,應該是需要重新爬網來生成的)。效果如下:
在參考鏈接中,還有一種更“標准”的方法,就是直接修改PDF文件的預覽模板。其實也不算太復雜,直接照着Word的那個改就行了,有興趣的可以嘗試一下。
OK。第二件事,就是在列表視圖中的預覽,對於一個Word文檔是這樣的:
但是PDF文檔默認則是這樣的:
這個修改需要寫一些js腳本放到頁面中,如下:
1: function WictorsPdfPreviews() {
2: SP.SOD.executeOrDelayUntilScriptLoaded(function () {
3: filePreviewManager.previewers.extensionToPreviewerMap.pdf =
4: [embeddedWACPreview, WACImagePreview];
5: embeddedWACPreview.dimensions.pdf= { width: 379, height: 252}
6: }, "filepreview.js");
7: }
8: _spBodyOnLoadFunctionNames.push("WictorsPdfPreviews");
這段腳本的主要功能,就是在預覽支持中加上pdf擴展名。腳本可以通過下面幾種方式加到網站中:
1、寫一個SharePoint Solution(Sandboxed或者Full Trust都可以),然后注冊一個名字是AdditionalPageHead的DelegateControl(會出現在head標簽中),然后在控件中輸出這段腳本。注意如果是Sandboxed Solution,是不能寫ascx控件的。
2、直接把腳本寫到母板頁里(或者通過引用js的方式,一樣的)。這個時候需要注意的是,如果我們用的是2013特有的那種母板頁,也就是一個html帶着一個master的那種(比如默認母板頁seattle.master就是這種),我們不能直接修改.master文件(保存的時候會提示無法保存),而需要修改那個html文件。這也是2013中的一個新特性,有機會再詳細談。
效果:
寫完之后發現其實有人先寫出來了,http://www.cnblogs.com/janet/p/3179709.html
呵呵,果然還是不能偷懶啊……
參考文章:
1、SharePoint 2013: Enabling PDF Previews in Document Libraries with Office Web Apps 2013
2、SharePoint 2013: Enabling PDF Previews with Office Web Apps 2013 March 2013 update