WebOffice オンライン編集機能を使用すると、Word ドキュメント、PowerPoint プレゼンテーション、Excel スプレッドシートを直接編集できます。
シナリオ
共同オフィスプラットフォーム: 複数のユーザーが同じドキュメントをリアルタイムで編集できます。
コンテンツ管理システム: オンラインドキュメント編集機能を提供し、システム内で直接ドキュメントの作成、読み取り、更新、削除ができます。
教育プラットフォーム: 学生は課題を提出し、教師はコースウェアを作成できます。ドキュメントはクラウドに保存されるため、簡単にアクセスして共有できます。
サポートされているファイルタイプ
ファイルタイプ | ファイル拡張子 |
Word | doc、.dot、.wps、.wpt、.docx、.dotx、.docm、.dotm |
PPT | ppt、.pptx、.pptm、.ppsx、.ppsm、.pps、.potx、.potm、.dpt、.dps |
Excel | xls、.xlt、.et、.xlsx、.xltx、.xlsm、.xltm |
使用方法
前提条件
Object Storage Service (OSS) でバケットを作成し、編集したい Office ドキュメントをバケットにアップロードして、バケットにIntelligent Media Management (IMM) プロジェクトをアタッチします。IMM プロジェクトはバケットと同じリージョンにある必要があります。
バケットのデフォルトドメイン名にカスタムドメイン名をアタッチします。ファイルを開いて編集するには、カスタムドメイン名経由でファイルにアクセスする必要があります。
説明ドメイン名がミニアプリの WebView ホワイトリストに追加されていないことを示すメッセージが表示された場合は、DingTalk グループ (ID: 88490020073) を通じて Intelligent Media Management ヘルプデスクにお問い合わせください。ヘルプデスクは、お客様が提供する WeChat 信頼済みドメイン検証ファイルに基づいて、ドメイン名をホワイトリストに追加します。
編集用 URL の取得
Java
Java SDK 3.17.4 以降を使用します。Java SDK のインストール方法の詳細については、「インストール」をご参照ください。
package com.aliyun.oss.demo;
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import java.net.URL;
import java.util.Date;
public class Demo {
public static void main(String[] args) throws Throwable {
// カスタムドメイン名を指定します。例: http://static.example.com。
String endpoint = "http://static.example.com";
// 環境変数からアクセス資格情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケット名を指定します。例: examplebucket。
String bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。オブジェクトがバケットのルートディレクトリにない場合は、完全なパスを含める必要があります。
String objectName = "exampledir/exampleobject.docx";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
// 注: このパラメーターを true に設定して、CNAME オプションを有効にします。
clientBuilderConfiguration.setSupportCname(true);
// V4 署名アルゴリズムの使用を明示的に宣言します。
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// ドキュメント処理パラメーター。
String style = "doc/edit,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60";
// 署名付き URL の有効期限を 3,600 秒に設定します。
Date expiration = new Date(new Date().getTime() + 3600 * 1000L );
GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);
req.setExpiration(expiration);
req.setProcess(style);
URL signedUrl = ossClient.generatePresignedUrl(req);
System.out.println(signedUrl);
} catch (OSSException oe) {
System.out.println("OSSException がキャッチされました。これは、リクエストが OSS に到達したものの、"
+ "何らかの理由でエラー応答で拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException がキャッチされました。これは、クライアントが OSS との通信中に、"
+ "ネットワークにアクセスできないなど、深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}Python
Python SDK 2.18.4 以降を使用します。Python SDK のインストール方法の詳細については、「インストール (Python SDK V1)」をご参照ください。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス資格情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケット名を指定します。
bucket = 'examplebucket'
# カスタムドメイン名を指定します。例: https://static.example.com。
endpoint = 'https://static.example.com'
# Alibaba Cloud の汎用リージョン ID を指定します。
region = 'cn-hangzhou'
# カスタムドメイン名を使用してバケットを初期化します。
bucket = oss2.Bucket(auth, endpoint, bucket, is_cname=True, region=region)
# 処理するファイルを指定します。
key = 'example.docx'
# 有効期限を秒単位で指定します。
expire_time = 3600
# オンライン編集の処理命令を構築します。
image_process = 'doc/edit,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60'
# 処理パラメーターを含む署名付き URL を生成します。
url = bucket.sign_url('GET', key, expire_time, params={'x-oss-process': image_process}, slash_safe=True)
# 署名付き URL を出力します。
print(url)Go
Go SDK 3.0.2 以降を使用します。Go SDK のインストール方法の詳細については、「OSS Go SDK のインストール」をご参照ください。
package main
import (
"context"
"flag"
"log"
"time"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // ストレージリージョン。
bucketName string // バケット名。
objectName string // オブジェクト名。
)
// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
flag.StringVar(&objectName, "object", "", "The name of the object.")
}
func main() {
// コマンドラインパラメーターを解析します。
flag.Parse()
// バケット名が空かどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// オブジェクト名が空かどうかを確認します。
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, object name required")
}
// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region).
// カスタムドメイン名を指定します。例: http://static.example.com。
WithEndpoint("http://static.example.com").
WithUseCName(true)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// GetObject の署名付き URL を生成します。
result, err := client.Presign(context.TODO(), &oss.GetObjectRequest{
Bucket: oss.Ptr(bucketName),
Key: oss.Ptr(objectName),
// ドキュメント処理パラメーターを設定します。
Process: oss.Ptr("doc/edit,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60"),
}, oss.PresignExpires(10*time.Minute))
if err != nil {
log.Fatalf("failed to get object presign %v", err)
}
log.Printf("request method:%v\n", result.Method)
log.Printf("request expiration:%v\n", result.Expiration)
log.Printf("request url:%v\n", result.URL)
if len(result.SignedHeaders) > 0 {
// 結果に署名付きヘッダーが含まれている場合は、署名付き URL を使用して GET リクエストを送信するときに対応するリクエストヘッダーを含めます。これにより、リクエストの失敗や署名エラーにつながる可能性のある不整合を防ぐことができます。
log.Printf("signed headers:\n")
for k, v := range result.SignedHeaders {
log.Printf("%v: %v\n", k, v)
}
}
}Node.js
Node.js SDK 8.0 以降を使用します。Node.js SDK のインストール方法の詳細については、「インストール」をご参照ください。
const OSS = require("ali-oss");
// 署名付き URL を生成する関数を定義します。
async function generateSignatureUrl(fileName) {
// 署名付き URL を取得します。
const client = await new OSS({
// カスタムドメイン名を指定します。例: http://static.example.com。
endpoint: 'http://static.example.com',
// 環境変数からアクセス資格情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
bucket: 'examplebucket',
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを oss-cn-hangzhou に設定します。
region: 'oss-cn-hangzhou',
authorizationV4: true,
cname: true
});
// ドキュメント処理パラメーターを含む署名付き URL を生成します。
return await client.signatureUrlV4('GET', 3600, {
headers: {}, // ここで、送信する実際のリクエストヘッダーに基づいてリクエストヘッダーを設定します。
queries: {
"x-oss-process": "doc/edit,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60" // ドキュメント処理パラメーターを追加します。
}
}, fileName);
}
// 関数を呼び出し、ファイル名を渡します。
generateSignatureUrl('yourFileName').then(url => {
console.log('Generated Signature URL:', url);
}).catch(err => {
console.error('Error generating signature URL:', err);
});
PHP
PHP SDK 2.7.0 以降を使用します。PHP SDK のインストール方法の詳細については、「インストール」をご参照ください。
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\OssClient;
use OSS\Core\OssException;
use OSS\Http\RequestCore;
use OSS\Http\ResponseCore;
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
// 環境変数からアクセス資格情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// カスタムドメイン名を指定します。例: http://static.example.com。
$endpoint = "http://static.example.com";
// バケット名を指定します。例: examplebucket。
$bucket = "examplebucket";
// ドキュメントがバケットのルートディレクトリにある場合は、ドキュメント名を指定します。ドキュメントがルートディレクトリにない場合は、exampledir/example.docx のようにドキュメントの完全なパスを含める必要があります。
$object = 'example.docx';
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"cname" => true,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
// 処理パラメーターを含む署名付き URL を生成します。URL は 3,600 秒間有効で、ブラウザで直接アクセスできます。
$timeout = 3600;
$options = array(
// オンラインプレビューの処理命令を構築します。
OssClient::OSS_PROCESS => "doc/edit,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60");
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET", $options);
print("url: \n" . $signedUrl);以下は、生成された署名付き URL の例です。
http://static.example.com/example.docx?x-oss-process=doc%2Fedit%2Cexport_1%2Cprint_1%2Fwatermark%2Ctext_5YaF6YOo6LWE5paZ%2Csize_30%2Ct_60&x-oss-date=20250220T095032Z&x-oss-expires=3600&x-oss-signature-version=OSS4-HMAC-SHA256&x-oss-credential=LTAI********************%2F20250122%2Fcn-hangzhou%2Foss%2Faliyun_v4_request&x-oss-signature=514ed93accdb80921c4b2897c6147fdb1599308c6457f68ee0ac2f771c7d0312生成された URL をコピーし、ブラウザのアドレスバーに貼り付けて Enter キーを押し、WebOffice ドキュメントを編集します。
パラメーターの説明
アクション: doc/edit
次の表にパラメーターを示します。
パラメーター | タイプ | 必須 | 説明 |
int | いいえ | 印刷を許可するかどうかを指定します。有効な値:
| |
export | int | いいえ | ドキュメントを PDF ファイルとしてエクスポートすることを許可するかどうかを指定します。有効な値:
|
watermark | string | いいえ | ウォーターマークパラメーター。 |
text | string | いいえ | ウォーターマークテキスト。テキストは URL セーフな Base64 でエンコードする必要があります。詳細については、「ウォーターマークのエンコーディング」をご参照ください。エンコーディングには base64url エンコーダーを使用することをお勧めします。 親ノード: watermark |
size | int | いいえ | ウォーターマークテキストのフォントサイズ。値は 0 より大きい整数である必要があります。 親ノード: watermark |
t | int | いいえ | ウォーターマークテキストの透明度。有効な値: 0~100。デフォルト値: 100。値 100 は、ウォーターマークが不透明であることを示します。 親ノード: watermark |
color | string | いいえ | ウォーターマークテキストの色。色は RGB 形式で指定します。デフォルト値: #FFFFFF。 たとえば、#000000 は黒を示し、#FFFFFF は白を示します。 親ノード: watermark |
rotate | int | いいえ | テキストの時計回りの回転角度。有効な値: 0~360。 デフォルト値: 0。値 0 は、テキストが回転しないことを示します。 親ノード: watermark |
type | string | いいえ | ウォーターマークテキストのフォント。フォントは URL セーフな Base64 でエンコードする必要があります。詳細については、「ウォーターマークのエンコーディング」をご参照ください。エンコーディングには base64url エンコーダーを使用することをお勧めします。 次のフォントがサポートされています:
親ノード: watermark |
関連 API 操作
上記操作は API 操作に基づいています。高度なカスタマイズを行うには、REST API リクエストを直接送信できます。これには、署名を計算するためのコードを手動で記述する必要があります。一般的な Authorization リクエストヘッダーの署名の計算の詳細については、「署名 V4 (推奨)」をご参照ください。
編集情報
編集するドキュメント: example.docx
ウォーターマーク設定:
ウォーターマークタイプ: テキストウォーターマーク
ウォーターマークテキスト: Internal Material
ウォーターマークフォントサイズ: 30
ウォーターマークの透明度: 60
編集ページの権限: ユーザーにエクスポートと印刷を許可
処理例
GET /example.docx?x-oss-process=doc/edit,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60 HTTP/1.1
Host: doc-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: SignatureValue権限
デフォルトでは、Alibaba Cloud アカウントはすべての権限を持ちますが、Resource Access Management (RAM) ユーザーまたは RAM ロールには権限がありません。RAM ユーザーまたは RAM ロールに権限を付与するには、Alibaba Cloud アカウントのオーナーまたは管理者が RAM ポリシーまたは バケットポリシーを使用する必要があります。
API | アクション | 説明 |
GetObject |
| オブジェクトをダウンロードします。 |
| versionId を使用してオブジェクトのバージョンを指定してオブジェクトをダウンロードする場合、このアクションの権限が必要です。 | |
| オブジェクトをダウンロードするときにオブジェクトのメタデータに X-Oss-Server-Side-Encryption: KMS が含まれている場合、このアクションの権限が必要です。 |
API 操作 | アクション | 説明 |
なし |
| OSS を介して IMM を使用してデータ処理を行う権限。 |
API | アクション | 説明 |
GenerateWebofficeToken |
| Weboffice 資格情報を取得するために使用されます。 |
RefreshWebofficeToken |
| Weboffice 資格情報を更新するために使用されます。 |
課金
WebOffice オンライン編集では、次の課金項目が発生します。課金項目の料金の詳細については、「OSS 料金」および「課金項目」をご参照ください。
API | 課金項目 | 説明 |
GetObject | GET リクエスト | 成功したリクエストの数に基づいてリクエスト料金が課金されます。 |
インターネット経由のアウトバウンドトラフィック | oss-cn-hangzhou.aliyuncs.com などのパブリックエンドポイント、または oss-accelerate.aliyuncs.com などのアクセラレーションエンドポイントを使用して GetObject 操作を呼び出す場合、データサイズに基づいてインターネット経由のアウトバウンドトラフィックの料金が課金されます。 | |
IA オブジェクトの取得 | IA オブジェクトが取得された場合、取得された IA データのサイズに基づいて IA データ取得料金が課金されます。 | |
リアルタイムアクセスが有効になっているバケット内のアーカイブオブジェクトの取得 | リアルタイムアクセスが有効になっているバケット内のアーカイブオブジェクトを取得する場合、取得されたアーカイブオブジェクトのサイズに基づいてアーカイブデータ取得料金が課金されます。 | |
転送アクセラレーション料金 | 転送アクセラレーションを有効にし、アクセラレーションエンドポイントを使用してバケットにアクセスする場合、データサイズに基づいて転送アクセラレーション料金が課金されます。 |
API | 課金項目 | 説明 |
GenerateWebofficeToken | DocumentWebofficeEdit | API 呼び出しの数に基づいてドキュメント処理料金が課金されます。 重要 2023 年 12 月 1 日より前に作成されたプロジェクトの場合、ドキュメントのオンライン編集はドキュメントが開かれた回数に基づいて課金され、この日付以降に作成されたプロジェクトの場合は API 呼び出しの数に基づいて課金されます。 |
RefreshWebofficeToken |
注
WebOffice オンライン編集は、同期処理 (x-oss-process パラメーターを使用) のみをサポートします。