ドキュメント形式変換機能を使用すると、さまざまな種類のドキュメントをターゲット形式に変換し、変換結果を指定された OSS パスに保存できます。
シナリオ
オンラインプレビューの最適化: PDF、Word、Excel、PPT、およびその他のドキュメントを OSS にアップロードした後、ドキュメント変換インターフェイスを呼び出してドキュメントをイメージに変換し、ダウンロードせずに Web またはモバイルデバイスで直接プレビューできます。
クロスプラットフォームの互換性: ドキュメント変換サービスを通じて、さまざまなデバイスやオペレーティングシステムを使用するユーザーがシームレスにドキュメントを表示できます。
サポートされている入力ファイルタイプ
ファイルタイプ | ファイル拡張子 |
Word | doc, docx, wps, wpss, docm, dotm, dot, dotx, html |
PPT | pptx, ppt, pot, potx, pps, ppsx, dps, dpt, pptm, potm, ppsm, dpss |
Excel | xls, xlt, et, ett, xlsx, xltx, csv, xlsb, xlsm, xltm, ets |
使用方法
前提条件
OSS でバケットを作成し、変換するドキュメントをバケットにアップロードし、Intelligent Media Management (IMM) プロジェクトをバケットにバインドします。 IMM プロジェクトは、バケットと同じリージョンにある必要があります。
IMM 処理に必要な関連権限を持っている必要があります。
ドキュメント形式の変換
SDK を使用してドキュメント変換インターフェイスを呼び出して処理を行い、処理されたファイルを指定されたバケットに保存できます。 ドキュメントを変換するには、Java、Python、または Go 用の OSS SDK のみを使用できます。
Java
OSS SDK for Java V3.17.4 以降が必要です。
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.AsyncProcessObjectRequest;
import com.aliyun.oss.model.AsyncProcessObjectResult;
import com.aliyuncs.exceptions.ClientException;
import java.util.Base64;
public class Demo1 {
public static void main(String[] args) throws ClientException {
// バケットが配置されているリージョンのエンドポイントを指定します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// バケットが配置されている Alibaba Cloud リージョンの ID を指定します。 例: cn-hangzhou。
String region = "cn-hangzhou";
// 環境変数から資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケットの名前を指定します。
String bucketName = "examplebucket";
// 出力オブジェクトの名前を指定します。
String targetKey = "dest.png";
// ソースドキュメントの名前を指定します。
String sourceKey = "src.docx";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// 文字列型のスタイル変数を作成して、ドキュメント変換パラメーターを格納します。
String style = String.format("doc/convert,target_png,source_docx");
// 非同期処理命令を作成します。
String bucketEncoded = Base64.getUrlEncoder().withoutPadding().encodeToString(bucketName.getBytes());
String targetEncoded = Base64.getUrlEncoder().withoutPadding().encodeToString(targetKey.getBytes());
String process = String.format("%s|sys/saveas,b_%s,o_%s", style, bucketEncoded, targetEncoded);
// AsyncProcessObjectRequest オブジェクトを作成します。
AsyncProcessObjectRequest request = new AsyncProcessObjectRequest(bucketName, sourceKey, process);
// 非同期処理タスクを実行します。
AsyncProcessObjectResult response = ossClient.asyncProcessObject(request);
System.out.println("EventId: " + response.getEventId());
System.out.println("RequestId: " + response.getRequestId());
System.out.println("TaskId: " + response.getTaskId());
} finally {
// OSSClient を閉じます。
ossClient.shutdown();
}
}
}Python
OSS SDK for Python 2.18.4 以降が必要です。
# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# 環境変数から一時的なアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# バケットが配置されている Alibaba Cloud リージョンの ID を指定します。 例: cn-hangzhou。
region = 'cn-hangzhou'
# バケットの名前を指定します。 例: examplebucket。
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# ソースドキュメントの名前を指定します。
source_key = 'src.docx'
# 出力オブジェクトの名前を指定します。
target_key = 'dest.png'
# 文字列型のスタイル変数を作成して、ドキュメント変換パラメーターを格納します。
animation_style = 'doc/convert,target_png,source_docx'
# バケットの名前と出力オブジェクトの名前が Base64 エンコードされている処理命令を作成します。
bucket_name_encoded = base64.urlsafe_b64encode('examplebucket'.encode()).decode().rstrip('=')
target_key_encoded = base64.urlsafe_b64encode(target_key.encode()).decode().rstrip('=')
process = f"{animation_style}|sys/saveas,b_{bucket_name_encoded},o_{target_key_encoded}"
try:
# 非同期処理タスクを実行します。
result = bucket.async_process_object(source_key, process)
print(f"EventId: {result.event_id}")
print(f"RequestId: {result.request_id}")
print(f"TaskId: {result.task_id}")
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
main()Go
OSS SDK for Go 3.0.2 以降が必要です。
package main
import (
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"log"
)
func main() {
// 環境変数から一時的なアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// OSSClient インスタンスを作成します。
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 実際の エンドポイントを指定してください。
// バケットが配置されている Alibaba Cloud リージョンの ID を指定します。 例: cn-hangzhou。
client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region("cn-hangzhou"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// バケットの名前を指定します。 例: examplebucket。
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// ソースドキュメントの名前を指定します。
sourceKey := "src.docx"
// 出力オブジェクトの名前を指定します。
targetKey := "dest.png"
// 文字列型のスタイル変数を作成して、ドキュメント変換パラメーターを格納します。
animationStyle := "doc/convert,target_png,source_docx"
// バケットの名前と出力オブジェクトの名前が Base64 エンコードされている処理命令を作成します。
bucketNameEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
targetKeyEncoded := base64.URLEncoding.EncodeToString([]byte(targetKey))
process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v", animationStyle, bucketNameEncoded, targetKeyEncoded)
// 非同期処理タスクを実行します。
result, err := bucket.AsyncProcessObject(sourceKey, process)
if err != nil {
log.Fatalf("Failed to async process object: %s", err)
}
fmt.Printf("EventId: %s\n", result.EventId)
fmt.Printf("RequestId: %s\n", result.RequestId)
fmt.Printf("TaskId: %s\n", result.TaskId)
}パラメーターの説明
アクション: doc/convert
次の表に、ドキュメント変換のパラメーターを示します。
パラメーター名 | タイプ | 必須 | 説明 |
target | string | はい | 出力オブジェクトのフォーマット。 有効な値:
|
source | string | いいえ | ソースファイル形式。 デフォルトでは、オブジェクト名の拡張子が使用されます。 有効な値:
|
pages | string | いいえ | 変換するページ番号。 例: |
sys/saveas パラメーターを使用して、変換されたドキュメントを指定されたバケットに保存する必要があります。 詳細については、「名前を付けて保存」をご参照ください。 変換タスクの処理結果を取得する必要がある場合は、notify パラメーターを使用する必要があります。 詳細については、「通知」をご参照ください。
その他のシナリオ
ドキュメント形式変換は非同期リクエストとして送信されます。つまり、処理結果が返されたときにドキュメント変換結果 (処理の成功または失敗情報など) を直接取得することはできません。 処理結果を取得する必要がある場合は、Simple Message Queue (SMQ、旧 MNS) でイベント通知を設定して、タスクステータスを繰り返しクエリすることなく、処理完了後に即時通知を受信することをお勧めします。
イベント通知の設定
関連 API
ビジネスで高度なカスタマイズが必要な場合は、RESTful API を直接呼び出すことができます。 RESTful API を直接呼び出すには、コードに署名計算を含める必要があります。 Authorization ヘッダーの計算方法の詳細については、「署名バージョン 4 (推奨)」をご参照ください。
ドキュメント形式の変換
ソースオブジェクト
ドキュメント形式: DOCX
ドキュメント名: example.docx
宛先オブジェクト
オブジェクト形式: PNG
ストレージパス: oss://test-bucket/doc_images/{index}.png
b_dGVzdC1idWNrZXQ=: 変換が完了したら、test-bucket という名前のバケットに保存します (
dGVzdC1idWNrZXQ=はtest-bucketの Base64 エンコード値です)。o_ZG9jX2ltYWdlcy97aW5kZXh9LnBuZw==: オブジェクトは {index} 変数を使用して、example.docx のページ番号をファイル名として doc_images ディレクトリにイメージを保存します (
ZG9jX2ltYWdlcy97aW5kZXh9LnBuZw==はdoc_images/{index}.pngの Base64 エンコード値です)。
変換完了通知:
test-topicという名前の Simple Message Queue (SMQ、旧 MNS) Topic に送信します
処理例
// example.docx ファイルを PNG 形式のイメージファイルに変換します。
POST /example.docx?x-oss-async-process HTTP/1.1
Host: doc-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: SignatureValue
x-oss-async-process=doc/convert,target_png,source_docx|sys/saveas,b_dGVzdC1idWNrZXQ=,o_ZG9jX2ltYWdlcy97aW5kZXh9LnBuZw==/notify,topic_dGVzdC10b3BpYw注
ドキュメント変換は非同期処理 (x-oss-async-process) のみをサポートします。
匿名アクセスはサポートされていません。
ドキュメント形式変換でサポートされる最大ファイルサイズは 200 MB で、調整はできません。
FAQ
OSS ドキュメント変換は Excel シートのコンテンツの指定をサポートしていますか?
いいえ、サポートしていません。 OSS ドキュメント変換は、Excel ファイル内のすべてのシートの変換のみをサポートします。 特定のシートを変換する必要がある場合は、IMM CreateOfficeConversionTask - ドキュメント変換タスクの作成インターフェイスを呼び出し、SheetIndex パラメーターを設定することをお勧めします。
リファレンス
詳細については、「ドキュメント形式変換」をご参照ください。