All Products
Search
Document Center

Object Storage Service:Konversi dokumen

Last Updated:Mar 26, 2026

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

PDF

pdf

Cara menggunakan

Prasyarat

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:

  • pdf

  • png

  • jpg

  • txt

source

string

Tidak

Format file sumber. Secara default, format ditentukan berdasarkan ekstensi file objek. Nilai yang valid:

  • docx

  • doc

  • pptx

  • ppt

  • pdf

  • xlsx

  • xls

pages

string

Tidak

Nomor halaman yang akan dikonversi.

Misalnya, 1,2,4-10 menentukan bahwa halaman 1, halaman 2, dan halaman 4 hingga 10 akan dikonversi.

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

Untuk menerima notifikasi event, Anda harus terlebih dahulu membuat topik di wilayah yang sama dengan bucket Anda. Untuk petunjuknya, lihat Panduan cepat untuk model topik. Anda dapat mengonfigurasi notifikasi event untuk tugas konversi dokumen menggunakan kode berikut. Nama topik harus diencode Base64 yang aman untuk URL dalam permintaan. Misalnya, jika nama topik adalah test-topic, nama yang diencode adalah dGVzdC10b3BpYw.

Kode contoh

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/notify,topic_dGVzdC10b3BpYw", 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}/notify,topic_dGVzdC10b3BpYw"

    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/notify,topic_dGVzdC10b3BpYw", 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)
}

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 dari test-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 dari doc_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_dGVzdC10b3BpYw

Catatan 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.