文檔預覽V1將輸入文檔轉換為VECTOR向量格式后,通過對接智能媒體管理提供的前端渲染引擎,實現更易用、功能更強大、定制化的文檔預覽效果。文檔預覽時支持復制文檔中的文字,縮放文檔內容不失真,自定義廣告等功能。
將輸入文檔轉換為JPG、PNG等格式時,您可以直接搭建一個在線文檔預覽系統進行文檔預覽。
預覽原理
將輸入文檔轉換為VECTOR向量格式后,通過對接智能媒體管理提供的前端渲染引擎實現文檔預覽。
準備工作
設置跨域訪問規則。
獲取預覽文件的臨時訪問權限。
為了數據安全性,預覽引擎只支持從私有的OSS Bucket中讀取文檔。當OSS Bucket設置為私有時,此時需要通過OSS STS獲取該文件臨時的訪問權限,獲取臨時訪問憑證后傳遞給預覽引擎,預覽引擎通過憑證獲取相關權限,實現文檔預覽。
臨時訪問憑證包括臨時訪問密鑰(AccessKey ID和AccessKey Secret)和安全令牌(SecurityToken),關于獲取臨時訪問權限的具體操作,請參見使用STS臨時訪問憑證訪問OSS。
說明由于預覽引擎需要從用戶的OSS Bucket讀取轉換后的文檔,受用戶OSS Bucket的讀取權限影響。OSS權限的更多信息,請參見了解OSS讀寫權限控制。
調用智能媒體管理的CreateOfficeConversionTask接口,將原始文檔轉換為VECTOR向量格式輸出到指定的OSS目錄。
預覽方式對比
智能媒體管理的預覽引擎支持URL參數預覽和JavaScript API預覽兩種方式,兩種預覽方式的對比如下,請根據應用場景選擇合適的預覽方式,推薦使用JavaScript API預覽方式。
預覽引擎支持的瀏覽器包括Internet Explorer 10+、Microsoft Edge、Google Chrome、Firefox、Safari和Opera。
預覽方式 | 描述 |
通過URL QueryString將必要的參數傳遞給預覽引擎,預覽引擎獲取相關參數后在頁面中展示文檔。 此方式操作快捷方便,但是相關臨時授權憑證會暴露在iframe的URL地址中。當用戶的OSS Bucket為私有讀并且簽名有效期內時,只要把對應的URL從iframe src屬性中復制出來即可分享給別人,對安全性要求較高的業務不建議使用此方式。 | |
通過postMessage將必要參數發送給預覽引擎頁并完成初始化工作。 JavaScript API預覽具有更高的安全性,并且支持全屏預覽、文字和演示頁碼跳轉控制、文字和演示預覽界面UI自定義等高級功能配置。更多信息,請參見JavaScript API預覽高級功能配置。 此方式采用隱式傳遞參數,安全性較高,但是需要部分額外的前端編程工作。由于iframe的URL地址中不包含簽名,因此即使復制了URL地址也無法預覽。 說明 postMessage瀏覽器兼容的更多信息,請參見postMessage瀏覽器兼容性。 |
URL參數預覽
您可以通過完整的URL在瀏覽器中直接預覽文檔,也可以將智能媒體管理提供的預覽引擎嵌入到頁面或者Web App中進行文檔預覽。
通過完整的URL預覽文檔
完整的預覽URL格式如下所示:
https://preview.imm.aliyuncs.com/index.html?url=[url]&accessKeyId=[accessKeyId]&accessKeySecret=[accessKeySecret]&stsToken=[stsToken]&bucket=[bucket]®ion=[region]
其中
https://preview.imm.aliyuncs.com/index.html
為智能媒體管理服務提供的預覽引擎地址,無法直接訪問,問號(?
)后的參數為預覽文檔的信息,如果未提供必填參數,則會預覽失敗。參數
參數
類型
是否必填
描述
url
String
是
文檔轉換后的向量文件所在OSS目錄。
如果提交文檔轉換任務的TgtUri為oss://your-bucket/paxos.pptx/output,則URL的格式為https://your-bucket.oss-{region}.aliyuncs.com/paxos.pptx/output。
重要填寫時無需在OSS目錄結尾加/。
accessKeyId
String
是
從STS獲取的訪問OSS的訪問密鑰標識(AccessKeyId)。
accessKeySecret
String
是
從STS獲取的訪問OSS的訪問密鑰(AccessKeySecret)。
stsToken
String
是
從STS獲取訪問OSS的安全令牌(SecurityToken)后,對SecurityToken進行編碼得到的結果。編碼的具體操作,請參見RPC 調用機制。
region
String
是
OSS Bucket所在地域,例如oss-cn-shanghai。
重要請注意添加OSS前綴。
bucket
String
是
文檔轉換后的向量文件所在OSS Bucket的名稱,例如your-bucket。
endpoint
String
否
使用與OSS Bucket綁定的用戶域名進行預覽,使用此參數時無需傳遞bucket和region參數。
pageIndex
Int
否
從指定的頁碼開始預覽。
serverTime
Int
否
服務器當前時間,用于校準本地OSS簽名時的時間,避免本地與服務器時差大于15分鐘導致簽名失敗。單位為秒。
expires
Int
否
文檔預覽的有效時間。默認值為1800,單位為秒。
示例
https://preview.imm.aliyuncs.com/index.html ?url=https://yourid-dev-imm.oss-cn-shanghai.aliyuncs.com/paxos.pptx/output //文檔轉換后的向量文件所在OSS目錄。請注意無需在output后加/。 &accessKeyId=STS.AAAA //從STS獲取的AccessKey ID。請注意參數的access小寫。 &accessKeySecret=BBBB //從STS獲取的AccessKey Secret。請注意參數的access小寫。 &stsToken=CCCC //CCCC是編碼從STS獲取的SecurityToken后得到的結果,從STS獲取的SecurityToken不能直接使用。 ®ion=oss-cn-shanghai //OSS Bucket所在地域,請注意添加OSS前綴。 &bucket=bucket-name //文檔轉換后的向量文件所在OSS Bucket的名稱。 &...
將預覽引擎嵌入到頁面或者Web App中預覽文檔
將智能媒體管理提供的預覽引擎
preview.imm.aliyuncs.com/index.html?url=[TgtUri]
通過HTML的<iframe>標簽嵌入到頁面或者Web App中進行文檔預覽。其中TgtUri
為預覽文件在OSS的http(s)路徑,需要通過QueryString參數傳入,如下圖所示。
JavaScript API預覽
為便于描述,以下稱阿里云的iframe頁面為子頁面,嵌入該iframe的接入方頁面稱為父頁面。
子頁面發送preview.ready事件。
父頁面接收preview.ready事件后,發送preview.init事件以及傳遞初始化參數。
父頁面向子頁面發送消息,通過sendMessage完成,調用格式為
sendMessage(action, data)
。參數
類型
是否必填
描述
action
String
是
事件名稱,包括preview.init和setConfig。
preview.init:父頁面傳遞初始化子頁面參數。
setConfig:父頁面設置子頁面相關的渲染參數。
data
Object
否
事件參數。
關于preview.init事件中的參數說明,請參見參數說明。
setConfig事件使用setData傳遞參數變量,函數中的變量以window.iframeData形式在子頁面中訪問,可多次調用。支持功能的更多信息,請參見JavaScript API預覽高級功能配置。
sendMessage("setData", { //需要在子頁面中用到的數據。 }); //注意sendMessage封裝了postMessage,詳細操作請參見示例代碼。
子頁面接收preview.init事件及其參數,并根據參數初始化渲染引擎。
參數
preview.init事件中父頁面傳遞初始化子頁面參數,詳細參數說明請參見下表。
參數
類型
是否必填
描述
url
String
是
文檔轉換后的向量文件所在OSS目錄。
如果提交文檔轉換任務的TgtUri為oss://your-bucket/paxos.pptx/output,則URL的格式為https://your-bucket.oss-{region}.aliyuncs.com/paxos.pptx/output。
重要填寫時無需在OSS目錄結尾加/。
region
String
是
OSS Bucket所在地域,例如oss-cn-shanghai。
重要請注意添加OSS前綴。
bucket
String
是
文檔轉換后的向量文件所在OSS Bucket的名稱,例如your-bucket。
accessKeyId
String
是
從STS獲取的訪問OSS的訪問密鑰標識(AccessKey ID)。
accessKeySecret
String
是
從STS獲取的訪問OSS的訪問密鑰(AccessKey Secret)。
stsToken
String
是
從STS獲取的訪問OSS的安全令牌(SecurityToken)。
endpoint
String
否
使用與OSS Bucket綁定的用戶域名進行預覽,使用此參數時無需傳遞bucket和region參數。
copy
Int
否
是否允許文字拷貝,可選值如下:
0(默認值):禁止文字拷貝。
1:允許文字拷貝。
wmType
Int
否
水印類型,可選值如下:
0(默認值):關閉水印。
1:文字水印。
2:圖片水印。
wmValue
String
否
水印值。
當wmType設置為1時,填寫水印內容。
當wmType設置為2時,填寫圖片水印地址。
wmColor
String
否
水印顏色的RGBA值。默認值為rgba(192, 192, 192, 0.6)。
wmRotate
Float
否
水印角度。默認值為-Math.PI/4。
wmFont
String
否
水印字體。默認值為bold 20px Serif。
wmHeight
Int
否
水印高度。默認值為170,單位為px。
wmWidth
Int
否
水印寬度。默認值為195,單位為px。
示例
<html> <head> <meta charset="UTF-8"> <!-- 建議禁用外框瀏覽器自帶的縮放 --> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0,user-scalable=no"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title></title> <style> * { box-sizing: border-box; } html, body { padding: 0; margin: 0; height: 100%; /* 防止雙擊縮放 */ touch-action: manipulation; } .main { display: flex; flex-direction: column; height: 100%; } #aliyunPreview { flex: 1; } </style> <script type="text/javascript" charset="utf-8"> function json2str(obj) { return JSON.stringify(obj, function(key, val) { if (typeof val === 'function') { val = val.toString(); } return val; }); }; window.sendMessage = function(action, data) { var iframe = document.getElementById('aliyunPreview'); iframe.contentWindow.postMessage(json2str({ action: action, data: data }), '*'); }; window.addEventListener('message', function(e) { try { var res = JSON.parse(e.data); } catch(err) { return; } switch (res.action) { case 'preview.ready': window.sendMessage('preview.init', { url: '', region: '', bucket: '', accessKeyId: '', accessKeySecret: '', stsToken: '' }); break; } }, false); //禁止雙指縮放手勢。 document.addEventListener('gesturestart', function (e) { e.preventDefault(); }); </script> </head> <body> <iframe allowfullscreen id="aliyunPreview" frameborder="0" src="https://preview.imm.aliyuncs.com/index.html" ></iframe> </body> </html>
錯誤碼參考
錯誤碼 | 描述 |
-1002 | 無效的AccessKey ID。 |
-1003 | 無權限訪問該文檔。 |
-1004 | 無效的STS Token。 |
-1005 | STS Token已過期。 |
-1006 | 簽名錯誤。 |
-1007 | OSS Bucket未配置跨域。 |
-1008 | Refers配置錯誤。 |
-1100 | 其他原因造成的錯誤。 |
常見問題處理
如下方案僅為建議的通用解決方案,不同的應用場景請根據實際分析和處理問題。
常見問題 | 解決方案 |
iframe內部預覽界面被遮擋問題 |
|
父級窗口縮放導致預覽界面變形問題 | 遇到此問題則需要父級窗口禁用瀏覽器自帶的縮放功能。
|
PPT預覽全屏按鈕在某些瀏覽器中消失 | 只需在iframe上添加allowfullscreen屬性即可修復,添加此屬性后PPT文件可支持全屏預覽。 |
IE下通過location.href | window.open打開預覽URL時,如果URL中包含復制功能參數©=1,則會被當做HTML字符實體解析為版權符號?=1,導致預覽不成功 | 由于IE的經典bug導致此問題,此時有如下兩種解決方案:
|