全部产品
Search
文档中心

Object Storage Service:Konversi Format Dokumen

更新时间:Nov 10, 2025

Dengan fitur konversi format dokumen, Anda dapat mengonversi berbagai jenis dokumen ke format target dan menyimpan hasilnya di jalur OSS yang ditentukan.

Skenario

  • Optimasi pratinjau online: Setelah mengunggah dokumen PDF, Word, Excel, PPT, dan lainnya ke OSS, Anda dapat memanggil antarmuka konversi dokumen untuk mengonversi dokumen menjadi gambar guna mendukung pratinjau langsung di web atau perangkat seluler tanpa perlu mengunduh.

  • Kompatibilitas lintas platform: Melalui layanan konversi dokumen, pengguna dengan perangkat dan sistem operasi berbeda dapat melihat dokumen secara mulus.

Jenis file input yang didukung

Tipe file

Ekstensi file

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

PDF

pdf

Cara menggunakan

Prasyarat

Konversi format dokumen

Anda dapat menggunakan SDK untuk memanggil antarmuka konversi dokumen dan menyimpan file hasil pemrosesan ke bucket yang ditentukan. Anda hanya dapat menggunakan SDK OSS untuk Java, Python, atau Go dalam melakukan konversi dokumen.

Java

OSS SDK for Java V3.17.4 atau lebih baru diperlukan.

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 {
        // Tentukan endpoint wilayah tempat bucket berada.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Tentukan ID wilayah Alibaba Cloud tempat bucket berada. Contoh: cn-hangzhou.
        String region = "cn-hangzhou";
        // Dapatkan kredensial dari variabel lingkungan. Sebelum menjalankan kode contoh, 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 objek keluaran.
        String targetKey = "dest.png";
        // Tentukan nama dokumen sumber.
        String sourceKey = "src.docx";

        // Buat instance OSSClient.
        // Saat instance OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepaskan sumber daya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Buat variabel gaya bertipe string untuk menyimpan parameter konversi dokumen.
            String style = String.format("doc/convert,target_png,source_docx");
            // Buat 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);
            // Jalankan tugas pemrosesan 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 {
            // Tutup OSSClient Anda.
            ossClient.shutdown();
        }
    }
}

Python

OSS SDK for Python 2.18.4 atau lebih baru diperlukan.

# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

def main():
    # Dapatkan kredensial akses sementara dari variabel lingkungan. Sebelum mengeksekusi kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    # Tentukan endpoint untuk wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
    endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
    # Tentukan ID wilayah Alibaba Cloud tempat bucket berada. Contoh: cn-hangzhou.
    region = 'cn-hangzhou'

    # Tentukan nama bucket. Contoh: examplebucket.
    bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)

    # Tentukan nama dokumen sumber.
    source_key = 'src.docx'

    # Tentukan nama objek keluaran.
    target_key = 'dest.png'

    # Buat variabel gaya bertipe string untuk menyimpan parameter konversi dokumen.
    animation_style = 'doc/convert,target_png,source_docx'

    # Buat instruksi pemrosesan, di mana nama bucket dan nama objek keluaran dienkripsi dalam 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:
        # Jalankan tugas pemrosesan 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

OSS SDK for Go 3.0.2 atau lebih baru diperlukan.

package main

import (
    "encoding/base64"
    "fmt"
    "os"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
    "log"
)

func main() {
    // Dapatkan kredensial akses sementara dari variabel lingkungan. Sebelum mengeksekusi kode contoh, 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.
    // Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Tentukan endpoint aktual Anda.
    // Tentukan ID wilayah Alibaba Cloud tempat bucket berada. Contoh: 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. Contoh: 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 objek keluaran.
    targetKey := "dest.png"

    // Buat variabel gaya bertipe string untuk menyimpan parameter konversi dokumen.
    animationStyle := "doc/convert,target_png,source_docx"

    // Buat instruksi pemrosesan, di mana nama bucket dan nama objek keluaran dienkripsi dalam 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)

    // Jalankan tugas pemrosesan 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)
}

Deskripsi parameter

Aksi: doc/convert

Tabel berikut menjelaskan parameter untuk konversi dokumen.

Nama parameter

Tipe

Diperlukan

Deskripsi

target

string

Ya

Format objek keluaran. Nilai valid:

  • pdf

  • png

  • jpg

  • txt

source

string

Tidak

Format file sumber. Secara default, ekstensi nama objek digunakan. Nilai valid:

  • docx (Saat mengonversi dokumen HTML, Anda perlu menentukan docx untuk menyelesaikan konversi format)

  • doc

  • pptx

  • ppt

  • pdf

  • xlsx

  • xls

pages

string

Tidak

Nomor halaman yang akan dikonversi.

Contohnya: 1,2,4-10 menunjukkan mengonversi halaman 1, halaman 2, dan halaman 4 hingga 10.

Anda perlu menggunakan parameter sys/saveas untuk menyimpan dokumen yang dikonversi di bucket yang ditentukan. Untuk informasi lebih lanjut, lihat Simpan Sebagai. Jika Anda perlu mendapatkan hasil pemrosesan tugas konversi, Anda perlu menggunakan parameter notify. Untuk informasi lebih lanjut, lihat Notifikasi.

Lebih banyak skenario

Konversi format dokumen diajukan sebagai permintaan asinkron, yang berarti Anda tidak dapat langsung mendapatkan hasil konversi dokumen (seperti informasi keberhasilan atau kegagalan pemrosesan) saat hasil pemrosesan dikembalikan. Jika Anda perlu mendapatkan hasil pemrosesan, kami sarankan Anda mengonfigurasi notifikasi acara dengan Simple Message Queue (SMQ, sebelumnya MNS) untuk menerima notifikasi instan setelah pemrosesan selesai, tanpa perlu memeriksa status tugas berulang kali.

Konfigurasikan notifikasi acara

Untuk mengimplementasikan notifikasi acara, Anda perlu terlebih dahulu membuat topik pesan di wilayah yang sama dengan bucket Anda dengan merujuk pada Pengenalan Cepat untuk Model Berbasis Topik. Anda dapat mengonfigurasi notifikasi acara saat melakukan konversi dokumen menggunakan kode berikut, di mana nama topik perlu dienkripsi dalam Base64 yang aman untuk URL. Misalnya, jika nama topik pesan adalah test-topic, nama yang dienkripsi adalah dGVzdC10b3BpYw.

Kode Contoh

Anda hanya dapat menggunakan SDK OSS untuk Java, Python, atau Go untuk mengonversi dokumen.

Java

OSS SDK for Java V3.17.4 atau lebih baru diperlukan.

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 {
        // Tentukan endpoint wilayah tempat bucket berada.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Tentukan ID wilayah Alibaba Cloud tempat bucket berada. Contoh: cn-hangzhou.
        String region = "cn-hangzhou";
        // Dapatkan kredensial dari variabel lingkungan. Sebelum menjalankan kode contoh, 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 objek keluaran.
        String targetKey = "dest.png";
        // Tentukan nama dokumen sumber.
        String sourceKey = "src.docx";

        // Buat instance OSSClient.
        // Saat instance OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepaskan sumber daya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Buat variabel gaya bertipe string untuk menyimpan parameter konversi dokumen.
            String style = String.format("doc/convert,target_png,source_docx");
            // Buat 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);
            // Jalankan tugas pemrosesan 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 {
            // Tutup OSSClient Anda.
            ossClient.shutdown();
        }
    }
}

Python

OSS SDK for Python 2.18.4 atau lebih baru diperlukan.

# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

def main():
    # Dapatkan kredensial akses sementara dari variabel lingkungan. Sebelum mengeksekusi kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    # Tentukan endpoint untuk wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
    endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
    # Tentukan ID wilayah Alibaba Cloud tempat bucket berada. Contoh: cn-hangzhou.
    region = 'cn-hangzhou'

    # Tentukan nama bucket. Contoh: examplebucket.
    bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)

    # Tentukan nama dokumen sumber.
    source_key = 'src.docx'

    # Tentukan nama objek keluaran.
    target_key = 'dest.png'

    # Buat variabel gaya bertipe string untuk menyimpan parameter konversi dokumen.
    animation_style = 'doc/convert,target_png,source_docx'

    # Buat instruksi pemrosesan, di mana nama bucket dan nama objek keluaran dienkripsi dalam 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:
        # Jalankan tugas pemrosesan 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

OSS SDK for Go 3.0.2 atau lebih baru diperlukan.

package main

import (
    "encoding/base64"
    "fmt"
    "os"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
    "log"
)

func main() {
    // Dapatkan kredensial akses sementara dari variabel lingkungan. Sebelum mengeksekusi kode contoh, 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.
    // Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Tentukan endpoint aktual Anda.
    // Tentukan ID wilayah Alibaba Cloud tempat bucket berada. Contoh: 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. Contoh: 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 objek keluaran.
    targetKey := "dest.png"

    // Buat variabel gaya bertipe string untuk menyimpan parameter konversi dokumen.
    animationStyle := "doc/convert,target_png,source_docx"

    // Buat instruksi pemrosesan, di mana nama bucket dan nama objek keluaran dienkripsi dalam 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)

    // Jalankan tugas pemrosesan 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)
}

API terkait

Jika bisnis Anda memerlukan tingkat penyesuaian yang tinggi, Anda dapat langsung memanggil API RESTful. Untuk memanggil API RESTful secara langsung, Anda harus menyertakan perhitungan tanda tangan dalam kode Anda. Untuk informasi tentang cara menghitung Header Authorization, lihat Versi Tanda Tangan 4 (Direkomendasikan).

Konversi format dokumen

  • Objek Sumber

    • Format Dokumen: DOCX

    • Nama Dokumen: example.docx

  • Objek Tujuan

    • Format Objek: PNG

    • Jalur Penyimpanan: oss://test-bucket/doc_images/{index}.png

      • b_dGVzdC1idWNrZXQ=: Setelah konversi selesai, simpan ke bucket bernama test-bucket (dGVzdC1idWNrZXQ= adalah nilai terenkripsi Base64 dari test-bucket).

      • o_ZG9jX2ltYWdlcy97aW5kZXh9LnBuZw==: Objek menggunakan variabel {index} untuk menyimpan gambar dengan nomor halaman example.docx sebagai nama file ke direktori doc_images (ZG9jX2ltYWdlcy97aW5kZXh9LnBuZw== adalah nilai terenkripsi Base64 dari doc_images/{index}.png).

    • Notifikasi Penyelesaian Konversi: Kirim ke topik Simple Message Queue (SMQ, sebelumnya MNS) bernama test-topic

Contoh pemrosesan

// Konversi file example.docx menjadi file gambar format 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

  • Konversi dokumen hanya mendukung pemrosesan asinkron (x-oss-async-process).

  • Akses anonim tidak didukung.

  • Ukuran file maksimum yang didukung untuk konversi format dokumen adalah 200 MB, yang tidak dapat diubah.

FAQ

Apakah konversi dokumen OSS mendukung penentuan konten dari lembar kerja Excel?

Tidak, tidak mendukung. Konversi dokumen OSS hanya mendukung mengonversi semua lembar kerja dalam file Excel. Jika Anda perlu mengonversi lembar kerja tertentu, kami sarankan memanggil antarmuka CreateOfficeConversionTask - Buat Tugas Konversi Dokumen IMM dan menyetel parameter SheetIndex.

Referensi

Untuk informasi lebih lanjut, lihat Konversi Format Dokumen.