Fitur konversi dokumen memungkinkan Anda mengonversi berbagai jenis dokumen ke format target dan menyimpan hasilnya ke jalur Object Storage Service (OSS) yang ditentukan.
Kasus penggunaan
Mengoptimalkan pratinjau online: Setelah mengunggah dokumen seperti file PDF, Word, Excel, atau PPT ke OSS, Anda dapat memanggil API konversi dokumen untuk mengonversinya menjadi gambar. Hal ini memungkinkan pengguna melihat pratinjau dokumen secara langsung di browser web atau aplikasi seluler tanpa perlu mengunduhnya.
Memastikan kompatibilitas lintas platform: Konversi dokumen memungkinkan pengguna melihat dokumen dengan lancar di berbagai perangkat dan sistem operasi.
Jenis file input yang didukung
Jenis file | Ekstensi file |
Word | doc, docx, wps, wpss, docm, dotm, dot, dotx |
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 |
Cara menggunakan
Prasyarat
Anda telah membuat bucket di Object Storage Service (OSS), mengunggah dokumen sumber ke bucket tersebut, dan mengaitkan bucket dengan Proyek Intelligent Media Management (IMM). Proyek IMM harus berada di wilayah yang sama dengan bucket.
Anda memiliki izin yang diperlukan agar IMM dapat memproses dokumen tersebut.
Mengonversi dokumen
Anda dapat menggunakan SDK untuk memanggil API konversi dokumen dan menyimpan file hasil konversi ke bucket yang ditentukan. Pemrosesan asinkron untuk konversi dokumen hanya didukung oleh SDK untuk Java, Python, dan Go.
Java
Contoh ini memerlukan OSS SDK for Java versi 3.17.4 atau lebih baru.
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 {
// Tetapkan endpoint ke endpoint wilayah tempat bucket berada.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tetapkan region ke ID wilayah, misalnya cn-hangzhou.
String region = "cn-hangzhou";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket.
String bucketName = "examplebucket";
// Tentukan nama file tujuan.
String targetKey = "dest.png";
// Tentukan nama dokumen sumber.
String sourceKey = "src.docx";
// Buat instance OSSClient.
// Saat instance OSSClient tidak lagi diperlukan, panggil metode shutdown untuk melepaskan sumber dayanya.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Bangun string untuk gaya pemrosesan dokumen dan parameter konversi.
String style = String.format("doc/convert,target_png,source_docx");
// Bangun instruksi pemrosesan asinkron.
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);
// Buat objek AsyncProcessObjectRequest.
AsyncProcessObjectRequest request = new AsyncProcessObjectRequest(bucketName, sourceKey, process);
// Mulai tugas asinkron.
AsyncProcessObjectResult response = ossClient.asyncProcessObject(request);
System.out.println("EventId: " + response.getEventId());
System.out.println("RequestId: " + response.getRequestId());
System.out.println("TaskId: " + response.getTaskId());
} finally {
// Matikan instance OSSClient.
ossClient.shutdown();
}
}
}Python
Contoh ini memerlukan OSS SDK for Python versi 2.18.4 atau lebih baru.
# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tetapkan endpoint ke endpoint wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), tetapkan endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Tentukan ID wilayah umum Alibaba Cloud, misalnya cn-hangzhou.
region = 'cn-hangzhou'
# Tentukan nama bucket, misalnya examplebucket.
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# Tentukan nama dokumen sumber.
source_key = 'src.docx'
# Tentukan nama file tujuan.
target_key = 'dest.png'
# Bangun string untuk gaya pemrosesan dokumen dan parameter konversi.
animation_style = 'doc/convert,target_png,source_docx'
# Bangun instruksi pemrosesan, termasuk jalur penyimpanan serta nama bucket dan nama file tujuan yang diencode 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:
# Mulai tugas asinkron.
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
Contoh ini memerlukan OSS SDK for Go versi 3.0.2 atau lebih baru.
package main
import (
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"log"
)
func main() {
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Buat instance OSSClient.
// Tetapkan endpoint ke endpoint wilayah bucket Anda. Misalnya, untuk wilayah China (Hangzhou), gunakan https://oss-cn-hangzhou.aliyuncs.com. Sesuaikan endpoint berdasarkan wilayah aktual Anda.
// Tentukan ID wilayah umum Alibaba Cloud, misalnya 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)
}
// Tentukan nama bucket, misalnya examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Tentukan nama dokumen sumber.
sourceKey := "src.docx"
// Tentukan nama file tujuan.
targetKey := "dest.png"
// Bangun string untuk gaya pemrosesan dokumen dan parameter konversi.
animationStyle := "doc/convert,target_png,source_docx"
// Bangun instruksi pemrosesan, termasuk jalur penyimpanan serta nama bucket dan nama file tujuan yang diencode 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)
// Mulai tugas asinkron.
result, err := bucket.AsyncProcessObject(sourceKey, process)
if err != nil {
log.Fatalf("Gagal memproses objek secara asinkron: %s", err)
}
fmt.Printf("EventId: %s\n", result.EventId)
fmt.Printf("RequestId: %s\n", result.RequestId)
fmt.Printf("TaskId: %s\n", result.TaskId)
}Parameter
Aksi: doc/convert
Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter | Tipe | Wajib | Deskripsi |
target | string | Ya | Format file target. Nilai yang valid:
|
source | string | Tidak | Format file sumber. Secara default, format ditentukan berdasarkan ekstensi file objek. Nilai yang valid:
|
pages | string | Tidak | Nomor halaman yang akan dikonversi. Misalnya, |
Anda harus menggunakan parameter sys/saveas untuk menyimpan dokumen hasil konversi ke bucket yang ditentukan. Untuk informasi lebih lanjut, lihat sys/saveas. Jika Anda perlu menerima hasil pemrosesan tugas konversi, gunakan parameter notify. Untuk informasi lebih lanjut, lihat notifikasi pesan.
Skenario lanjutan
Tugas konversi dokumen diajukan sebagai permintaan asinkron. Artinya, respons langsung tidak berisi hasil akhir konversi, seperti apakah konversi berhasil atau gagal. Untuk mendapatkan hasilnya, konfigurasikan notifikasi event menggunakan Simple Message Queue (SMQ) (sebelumnya MNS). Ini memberikan notifikasi instan saat tugas selesai, sehingga menghilangkan kebutuhan untuk melakukan polling status.
Notifikasi event
Referensi API
Metode SDK dibangun di atas API RESTful. Untuk kustomisasi lanjutan, Anda dapat memanggil API RESTful secara langsung. Hal ini mengharuskan Anda menghitung signature pada header Authorization secara manual. Untuk petunjuknya, lihat Signature version 4 (direkomendasikan).
Mengonversi dokumen
Sebelum konversi
Format dokumen: DOCX
Nama dokumen: example.docx
Setelah konversi
Format file: PNG
Jalur penyimpanan: oss://test-bucket/doc_images/{index}.png
b_dGVzdC1idWNrZXQ=: Menyimpan output ke bucket bernama test-bucket setelah transkoding selesai (
dGVzdC1idWNrZXQ=adalah nilai Base64 daritest-bucket).o_ZG9jX2ltYWdlcy97aW5kZXh9LnBuZw==: Menyimpan objek ke direktori doc_images. Variabel {index} diganti dengan nomor halaman dari example.docx untuk membentuk nama file gambar (
ZG9jX2ltYWdlcy97aW5kZXh9LnBuZw==adalah nilai Base64 daridoc_images/{index}.png).
Notifikasi penyelesaian konversi: Pesan dikirim ke topik Simple Message Queue (SMQ) (sebelumnya MNS) bernama
test-topic.
Permintaan contoh
// Mengonversi file example.docx menjadi gambar 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_dGVzdC10b3BpYwCatatan penggunaan
Konversi dokumen hanya mendukung pemrosesan asinkron (x-oss-async-process).
Akses anonim tidak didukung.
Ukuran maksimum file sumber adalah 200 MB. Batas ini bersifat tetap.
FAQ
Mengonversi lembar kerja Excel tertentu
Tidak. Konversi dokumen OSS mengonversi semua lembar kerja dalam buku kerja Excel. Untuk mengonversi lembar kerja tertentu, panggil operasi IMM CreateOfficeConversionTask dan atur parameter SheetIndex.
Dokumen terkait
Untuk informasi lebih lanjut tentang konversi dokumen, lihat konversi dokumen.