Topik ini menjelaskan fitur, implementasi, dan penggunaan kolaborasi dokumen online.
Fitur
Kolaborasi dokumen online memungkinkan beberapa pengguna untuk melihat atau mengedit dokumen yang sama secara real-time. Fitur ini meningkatkan efisiensi kerja. Berikut adalah fitur-fitur yang didukung:
Pembaruan dokumen disinkronkan dan disimpan otomatis untuk mencegah hilangnya konten.
Versi historis disimpan secara real-time. Anda dapat mengembalikan dokumen ke versi tertentu.
Aplikasi tersedia di semua platform, termasuk ponsel, komputer, dan halaman web.
Siapa pun yang terbiasa dengan perangkat lunak kantor dapat menggunakan kolaborasi dokumen online dengan mudah.
Berbagai jenis dokumen dapat dilihat atau diedit.
Format file yang didukung untuk pratinjau:
Dokumen (Word): .doc, .dot, .wps, .wpt, .docx, .dotx, .docm, .dotm, dan .rtf.
Presentasi (PowerPoint): .ppt, .pptx, .pptm, .ppsx, .ppsm, .pps, .potx, .potm, .dpt, dan .dps.
Tabel (Excel): .xls, .xlt, .et, .xlsx, .xltx, .csv, .xlsm, dan .xltm.
File PDF (PDF): .pdf.
Format file yang didukung untuk penyuntingan:
Dokumen (Word): .doc, .dot, .wps, .wpt, .docx, .dotx, .docm, dan .dotm.
Presentasi (PowerPoint): .ppt, .pptx, .pptm, .ppsx, .ppsm, .pps, .potx, .potm, .dpt, dan .dps.
Tabel (Excel): .xls, .xlt, .et, .xlsx, .xltx, .xlsm, dan .xltm.
Konfigurasi kustom didukung untuk kolaborasi dokumen, termasuk konfigurasi status komponen, event, fitur untuk dokumen teks, dan fitur untuk dokumen tabel.
Untuk informasi lebih lanjut tentang format dokumen yang didukung untuk pratinjau dan penyuntingan, lihat Batasan Dokumen.
Jika Anda ingin menonaktifkan penyuntingan kolaboratif selama pratinjau dokumen atau ingin mencegah pembaruan konten ditampilkan, Anda dapat menggunakan pratinjau yang di-cache. Dalam mode ini, penyuntingan tidak memengaruhi atau menyegarkan konten yang sedang dipratinjau. Untuk informasi lebih lanjut tentang cara mengonfigurasi pratinjau yang di-cache, lihat Dokumentasi API.
Implementasi
Untuk mengintegrasikan layanan WebOffice IMM, Anda perlu memodifikasi kode sisi server dan frontend aplikasi web Anda.
Pastikan dokumen asli disimpan di OSS. Frontend memanggil operasi yang dienkapsulasi di server untuk mendapatkan URL kolaborasi dan AccessToken dokumen. Kemudian, frontend memanggil JS-SDK untuk menginisialisasi (yang secara dinamis menghasilkan elemen iframe) dan mengatur AccessToken untuk pratinjau atau penyuntingan dokumen.

Prasyarat
Pasangan AccessKey telah dibuat dan diperoleh. Untuk informasi lebih lanjut, lihat Memperoleh Pasangan AccessKey.
Layanan Penyimpanan Objek (OSS) diaktifkan, bucket dibuat, dan dokumen diunggah ke bucket. Untuk informasi lebih lanjut, lihat Mengunggah Objek.
Manajemen Media Cerdas (IMM) diaktifkan. Untuk informasi lebih lanjut, lihat Mengaktifkan IMM.
Proyek dibuat di konsol IMM. Untuk informasi lebih lanjut, lihat Membuat Proyek.
CatatanAnda dapat memanggil operasi CreateProject untuk membuat proyek. Untuk informasi lebih lanjut, lihat CreateProject - Membuat Proyek.
Anda dapat memanggil operasi ListProjects - Menampilkan Semua Informasi Proyek untuk mencantumkan semua proyek di wilayah tertentu.
Jika nama domain bucket OSS berbeda dari nama domain layanan pratinjau, pastikan CORS dikonfigurasi untuk bucket yang menyimpan dokumen agar dapat diakses dari nama domain layanan pratinjau. Untuk informasi lebih lanjut, lihat Konfigurasi CORS.
Batasan lainnya
Penyuntingan dan pratinjau dokumen memanggil operasi API yang sama yang disediakan oleh JS-SDK. Saat memanggil operasi GenerateWebofficeToken - Memperoleh Token Weboffice, atur parameter Readonly dalam parameter Permission ke
trueuntuk mode pratinjau.URL yang dikembalikan oleh operasi GenerateWebofficeToken - Memperoleh Token Weboffice tidak dapat dibuka langsung. Anda harus menggunakan JS-SDK untuk mengakses URL tersebut.
AccessToken yang dikembalikan oleh operasi GenerateWebofficeToken - Memperoleh Token Weboffice valid selama 30 menit. Pratinjau harus dibuka sebelum AccessToken kedaluwarsa; jika tidak, pratinjau tidak dapat dibuka.
RefreshToken yang dikembalikan oleh operasi GenerateWebofficeToken - Memperoleh Token Weboffice hanya dapat digunakan sekali dan tidak dapat digunakan kembali untuk penyegaran.
File PDF hanya mendukung pratinjau online dan tidak mendukung penyuntingan. Atur parameter Readonly dalam parameter Permission ke
true.Halaman HTML hanya mendukung satu instance WebOffice untuk pratinjau atau penyuntingan dokumen.
Penggunaan
Langkah 1: Enkapsulasi operasi di server
Enkapsulasi operasi GenerateWebofficeToken - Memperoleh Token Weboffice dan RefreshWebofficeToken - Menyegarkan Token Weboffice di server untuk mendapatkan URL penyuntingan dan AccessToken agar frontend dapat memanggilnya secara langsung. Contoh berikut menjelaskan cara mengenkapsulasi operasi untuk proyek bernama test-project dan file OSS di oss://test-bucket/test-object.docx.
Panggil operasi GenerateWebofficeToken - Memperoleh Token Weboffice untuk mendapatkan URL kolaborasi.
Contoh kueri
{ "ProjectName": "test-project", // Nama proyek IMM. "SourceURI": "oss://test-bucket/test-object.docx", // URI dokumen di OSS. "Filename": "test-object.docx", // Nama dokumen. "UserData": "{\"fid\": \"123\"}", // Data pengguna, yang dikembalikan dalam notifikasi MNS. "PreviewPages": 3, // Jumlah halaman pratinjau. "Permission": "{\"Rename\": \"true\", \"Readonly\": \"false\"}", // Izin. "User": "{\"Id\": \"test\", \"Name\": \"testuser\", \"Avatar\": \"http://xx.com/avatar.jpg\"}", // Informasi pengguna yang ditampilkan untuk kolaborasi online. "Watermark": "{\"Type\": \"1\", \"Value\": \"imm\"}" // Atur watermark. }Contoh respons
{ "RefreshToken": "f1fd1afd79ee445f95d3dd99f34f35ffv3", "RequestId": "BC63D209-5E53-00E9-8D24-7043943DBC89", "AccessToken": "3de242da81e1433abefbbea000aaae39v3", "RefreshTokenExpiredTime": "2022-07-06T23:18:52.856132358Z", "WebofficeURL": "https://office-cn-shanghai.imm.aliyuncs.com/office/w/7c1a7b53d6a4002751ac4bbaea69405a01475f4a?_w_tokentype=1", "AccessTokenExpiredTime": "2022-07-05T23:48:52.856132358Z" }Contoh kode lengkap (untuk IMM SDK for Python V1.27.3)
# -*- coding: utf-8 -*- import os from alibabacloud_imm20200930.client import Client as imm20200930Client from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_imm20200930 import models as imm_20200930_models from alibabacloud_tea_util import models as util_models from alibabacloud_tea_util.client import Client as UtilClient class Sample: def __init__(self): pass @staticmethod def create_client( access_key_id: str, access_key_secret: str, ) -> imm20200930Client: """ Gunakan ID AccessKey dan Rahasia AccessKey untuk menginisialisasi klien. @param access_key_id: @param access_key_secret: @return: Klien @throws Exception """ config = open_api_models.Config( access_key_id=access_key_id, access_key_secret=access_key_secret ) # Tentukan nama domain yang ingin Anda akses. config.endpoint = f'imm.cn-shenzhen.aliyuncs.com' return imm20200930Client(config) @staticmethod def main() -> None: # Pasangan AccessKey akun Alibaba Cloud memiliki izin pada semua operasi API. Menggunakan kredensial ini untuk melakukan operasi adalah operasi berisiko tinggi. Kami merekomendasikan Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. # Kami merekomendasikan Anda untuk tidak menyertakan pasangan AccessKey Anda (ID AccessKey dan Rahasia AccessKey) dalam kode proyek Anda demi keamanan data. # Dalam contoh ini, pasangan AccessKey dibaca dari variabel lingkungan untuk mengimplementasikan verifikasi identitas untuk akses API. Untuk informasi tentang cara mengonfigurasi variabel lingkungan, kunjungi https://www.alibabacloud.com/help/en/imm/developer-reference/configure-environment-variables?spm=a3c0i.29367734.6737026690.8.6d266e9bORGXvg. imm_access_key_id = os.getenv("AccessKeyId") imm_access_key_secret = os.getenv("AccessKeySecret") client = Sample.create_client(imm_access_key_id, imm_access_key_secret) # Atur watermark. weboffice_watermark = imm_20200930_models.WebofficeWatermark( type=1, value='imm' ) # Atur informasi kolaborator. weboffice_user = imm_20200930_models.WebofficeUser( id='test', name='testuser', avatar='http://xx.com/avatar.jpg' ) # Atur izin. weboffice_permission = imm_20200930_models.WebofficePermission( rename=True ) get_weboffice_urlrequest = imm_20200930_models.GenerateWebofficeTokenRequest( # Setel nama proyek IMM. project_name='test-project', # Setel URI dokumen untuk kolaborasi. source_uri='oss://test-bucket/test-object.docx', # Setel nama dokumen. filename='test-object.docx', # Setel data pengguna. user_data='{"fid": "123"}', preview_pages=3, external_uploaded=False, permission=weboffice_permission, user=weboffice_user, watermark=weboffice_watermark ) runtime = util_models.RuntimeOptions() try: # Cetak nilai balik operasi API. response = client.get_weboffice_urlwith_options(get_weboffice_urlrequest, runtime) print(response.body.to_map()) except Exception as error: # Cetak pesan kesalahan jika diperlukan. UtilClient.assert_as_string(error.message) print(error) if __name__ == '__main__': Sample.main()
Panggil operasi RefreshWebofficeToken - Menyegarkan Token Weboffice untuk menyegarkan AccessToken.
Saat AccessToken kedaluwarsa, frontend harus memanggil operasi RefreshWebofficeToken di server untuk menyegarkan AccessToken. Format responsnya sama dengan format respons untuk memanggil operasi GenerateWebofficeToken.
Langkah 2: Gunakan JS-SDK di frontend
Gunakan JS-SDK untuk memasang URL kolaborasi yang dikembalikan ke elemen blok di halaman HTML dan atur AccessToken.
Impor JS-SDK.
Dalam contoh,
${x.y.z}menunjukkan nomor versi terbaru JS-SDK. Ganti dengan nomor versi aktual. Untuk informasi tentang versi terbaru, lihat Versi JS-SDK.<!DOCTYPE html> <html lang="id"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Demo</title> </head> <body> <script src="https://g.alicdn.com/IMM/office-js/${x.y.z}/aliyun-web-office-sdk.min.js"></script> <script> console.log('Setelah mengimpor, JS-SDK tersedia untuk digunakan!'); console.log(aliyun); //Nama variabel global. </script> </body> </html>Inisialisasi.
Frontend memperoleh objek tokenInfo menggunakan operasi GenerateWebofficeToken yang dienkapsulasi di server.
Contoh ini mengasumsikan bahwa objek tokenInfo memiliki struktur yang sama dengan respons terhadap operasi GenerateWebofficeToken. Kode berikut menggunakan operasi GenerateWebofficeToken yang dienkapsulasi
/getTokenInfodi server sebagai contoh.// Peroleh URL kolaborasi dan AccessToken. var tokenInfo = await $.get('http://example.com/getTokenInfo') // Inisialisasi let instance = aliyun.config({ url: tokenInfo.WebofficeURL // Setel URL kolaborasi dokumen. })Atur titik pemasangan untuk iframe.
CatatanSetelah acara DOMContentLoaded dipicu, pastikan node pemasangan ada sebelum melakukan inisialisasi.
Secara default, iframe dipasang ke elemen body. Anda dapat mengatur titik pemasangan sesuai kebutuhan.
let instance = aliyun.config({ mount: document.querySelector('#container'), url: 'URL kolaborasi dokumen' // URL kolaborasi dokumen tokenInfo.WebofficeURL di Langkah 2. })Jika Anda perlu menyesuaikan objek iframe, Anda dapat menggunakan JS-SDK yang diinstansiasi untuk mendapatkan objek Document Object Model (DOM) dari iframe.
var instance = aliyun.config({ mount: document.querySelector('#container') //... }) console.log(instance.iframe)Atur token.
PentingKolaborasi dokumen online WebOffice untuk proyek yang dibuat sebelum 1 Mei 2023 dikenakan biaya berdasarkan jumlah kali URL kolaborasi dibuka.
Kolaborasi dokumen online WebOffice untuk proyek yang dibuat setelah 1 Mei 2023 dikenakan biaya berdasarkan jumlah panggilan API. Anda dikenakan biaya saat memanggil operasi GenerateWebofficeToken dan RefreshWebofficeToken.
JS-SDK memanggil operasi RefreshWebofficeToken untuk menyegarkan token 5 menit sebelum kedaluwarsa. Oleh karena itu, nilai timeout harus lebih besar dari 20 menit (20 × 60 × 1000 milidetik). Masa berlaku token default adalah 30 menit. Ini mencegah penyegaran token yang sering dan biaya tambahan.
Anda perlu mengatur token untuk mengakses URL kolaborasi yang diperoleh.
Anda perlu mengatur token menggunakan metode ini setelah setiap token diperbarui.
//https://www.alibabacloud.com/help/en/imm/developer-reference/api-imm-2020-09-30-createsimilarimageclusteringtask?spm=a2c63.p38356.0.i3 // Peroleh token menggunakan permintaan asinkron atau output template berdasarkan kebutuhan bisnis Anda. var token = 'yourToken'; // Tentukan token. instance.setToken({ token: token, timeout: 25 * 60 * 1000, // Masa berlaku token. Parameter ini wajib. Unit: milidetik. Dalam contoh ini, masa berlaku token diatur menjadi 25 menit. Anda dapat menggunakan fungsi refreshToken untuk menyegarkan token 5 menit sebelum kedaluwarsa. })Segarkan token setelah waktu habis.
Frontend memperoleh objek tokenInfo menggunakan operasi RefreshWebofficeToken yang dienkapsulasi di server. Contoh ini mengasumsikan bahwa objek tokenInfo memiliki struktur yang sama dengan respons terhadap operasi RefreshWebofficeToken.
Anda dapat memasukkan fungsi yang memperoleh token. Setelah masa berlaku token habis, JS-SDK secara otomatis memanggil fungsi tersebut dan mengembalikan objek promise atau objek biasa yang berisi token baru.
Contoh berikut menggunakan operasi GetWebofficeToken yang dienkapsulasi
/refreshTokenInfodi server.// Simpan tokenInfo terakhir untuk penyegaran token. let lastTokenInfo = tokenInfo // Fungsi memperoleh token. // Catatan: refreshToken tidak mendukung fungsi async. Hanya objek promise atau {token,timeout} yang dapat dikembalikan. const refreshToken = function() { return new Promise(function(resolve){ // Logika pemrosesan bisnis. Panggil operasi refreshToken yang dienkapsulasi di server. $.get('http://example.com/refreshTokenInfo',{ RefreshToken: lastTokenInfo.RefreshToken, AccessToken: lastTokenInfo.AccessToken, //.... }).then(function(tokenInfo){ lastTokenInfo = tokenInfo resolve({ token: tokenInfo.AccessToken, // Parameter ini wajib. timeout: 25 * 60 * 1000, // Masa berlaku token. Parameter ini wajib. Unit: milidetik. Dalam contoh ini, masa berlaku token diatur menjadi 25 menit. Anda dapat menggunakan fungsi refreshToken untuk menyegarkan token 5 menit sebelum kedaluwarsa. }) }) }) } // Konfigurasikan fungsi yang memperoleh token. aliyun.config({ //... refreshToken })
Contoh kode
Lihat contoh kode JS-SDK lengkap berikut untuk pratinjau dokumen: