图片转Word

文档介绍了图片转Word接口的调用方式,调用前,请先阅读API使用指南

图片转Word接口可以将图片转换为可编辑的Word文档,最多同时支持30张图片转换,精准识别文本内容,并保留原始文档的版面样式信息。

图片转Word接口为异步接口,需要先调用图片转Word异步提交服务SubmitConvertImageToWordJob进行异步任务提交,然后调用文档转换结果查询服务GetDocumentConvertResult接口进行结果轮询,建议每10秒轮询一次,最多轮询10分钟,如果10分钟还未查询到处理完成结果,则视为处理超时。

当异步任务处理提交后,用户可以在处理结束后的24小时之内查询处理结果,超过24小时后将无法查询到处理结果。

步骤一:调用图片转Word异步提交服务SubmitConvertImageToWordJob接口

请求参数

名称

类型

必填

描述

示例值

ImageUrls

List<String>

图片URL集合,1~30个URL(不支持8192px以上的图片,不支持20MB以上的图片)

如果请求URL较长导致请求失败,建议减少图片URL个数。

["https://example.com/example1.jpg","https://example.com/example2.jpg"]

ImageNames

List<String>

文件名。文件名需带后缀名。与imageNameExtension二选一

["example1.jpg","example2.jpg"]

ImageNameExtension

string

文件后缀名。与ImageNames二选一。支持类型:jpg、jpeg、png、bmp、gif

jpg

说明

支持的文档格式:30张以内的图片,支持jpg、jpeg、png、bmp、gif格式,其中gif格式只支持第一帧。不支持最长边在8192px以上的图片,不支持20MB以上的图片。

返回参数

名称

类型

描述

示例值

RequestId

string

请求唯一ID

43A29C77-405E-4CC0-BC55-EE694AD0****

Data

object

返回数据

{"Id": "docmind-20220712-b15f****"}

+Id

string

业务订单号,用于后续查询接口进行查询的唯一标识

docmind-20220712-b15f****

Code

string

状态码

200

Message

string

详细信息

message

示例

本接口支持传入文档URL的调用方式,不支持本地文档上传。

以Java SDK为例,传入文档URL调用方式的请求示例代码如下,调用submitConvertImageToPdfJob接口,通过imageUrls参数实现多个文档URL传入。请注意,您传入的文档URL必须为公网可访问下载的公网URL地址,无跨域限制,URL不带特殊转义字符。

import com.aliyun.docmind_api20220711.models.*;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.docmind_api20220711.Client;

public static void submit() throws Exception {
    Config config = new Config()
        // 前面准备好的您的AccessKey ID
        .setAccessKeyId(accessKeyId)
        // 前面准备好的您的AccessKey Secret
        .setAccessKeySecret(accessKeySecret);
    // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
    config.endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
    Client client = new Client(config);
    SubmitConvertImageToWordJobRequest imageToWordJobRequest = new SubmitConvertImageToWordJobRequest();
    String fileUrl1 = "https://example.com/example1.jpg";
    String fileUrl2 = "https://example.com/example2.jpg";
    imageToWordJobRequest.imageUrls = Arrays.asList(fileUrl1, fileUrl2);
    // 填写第一张图片的文件扩展名
    imageToWordJobRequest.imageNameExtension = "jpg";
    SubmitConvertImageToWordJobResponse response = client.submitConvertImageToWordJob(imageToWordJobRequest);
}}
const Client = require('@alicloud/docmind-api20220711');

const getResult = async () => {
  const client = new Client.default({
    // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
    endpoint: 'docmind-api.cn-hangzhou.aliyuncs.com',
    // 前面准备好的您的AccessKey ID
    accessKeyId: 'your access key id',
    // 前面准备好的您的AccessKey Secret
    accessKeySecret: 'your access key secret',
    type: 'access_key',
    regionId: 'cn-hangzhou'
  });
  
  const request = new Client.SubmitConvertImageToWordJobRequest();
  request.imageUrls = [
    'https://example.com/example1.jpg',
    'https://example.com/example2.jpg'
  ];
  request.imageNameExtension = 'jpg';
  const response = await client.submitConvertImageToWordJob(request);
  
  return response.body;
}
from alibabacloud_docmind_api20220711.client import Client as docmind_api20220711Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_docmind_api20220711 import models as docmind_api20220711_models
from alibabacloud_tea_util.client import Client as UtilClient

def submit_url():
    config = open_api_models.Config(
        # 您的 AccessKey ID,
        access_key_id='accessKeyId',
        # 您的 AccessKey Secret,
        access_key_secret='accessKeySecret'
    )
    # 访问的域名
    config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com'
    client = docmind_api20220711Client(config)
    request = docmind_api20220711_models.SubmitConvertImageToWordJobRequest(
        # image_urls : 图片url地址
        image_urls=['https://example.com/example.jpg'],
        # image_name_extension :图片格式。与图片名二选一
        image_name_extension='jpg',
        # image_names :图片名称。名称必须图片类型
        image_names=['123.jpg'],

    )
    try:
        # 复制代码运行请自行打印 API 的返回值
        response = client.submit_convert_image_to_word_job(request)
        # API返回值格式层级为 body -> data -> 具体属性。可根据业务需要打印相应的结果。如下示例为打印返回的业务id格式
        # 获取属性值均以小写开头,
        print(response.body.data.id)       
    except Exception as error:
        # 如有需要,请打印 error
        UtilClient.assert_as_string(error.message)
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

using Tea;
using Tea.Utils;

public static void SubmitUrl()
        {
            AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                // 您的 AccessKey ID
                AccessKeyId = "AccessKeyId",
                // 您的 AccessKey Secret
                AccessKeySecret = "AccessKeySecret",
            };
            // 访问的域名
            config.Endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
            AlibabaCloud.SDK.Docmind_api20220711.Client client = new AlibabaCloud.SDK.Docmind_api20220711.Client(config);
            List<string> list = new List<string>();
            list.Add("https://example.com/example1.jpg");
            list.Add("https://example.com/example2.jpg");
            AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitConvertImageToWordJobRequest request = new AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitConvertImageToWordJobRequest
            {
                ImageUrls = list,
                ImageNameExtension = "jpg"
            };
            try
            {
                // 复制代码运行请自行打印 API 的返回值
                client.SubmitConvertImageToWordJob(request);
            }
            catch (TeaException error)
            {
                // 如有需要,请打印 error
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
            catch (Exception _error)
            {
                TeaException error = new TeaException(new Dictionary<string, object>
                {
                    { "message", _error.Message }
                });
                // 如有需要,请打印 error
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
        }
import (
	"fmt"

	openClient "github.com/alibabacloud-go/darabonba-openapi/client"
)

func submit() {
  config := openClient.Config{AccessKeyId: &ak, AccessKeySecret: &sk, Endpoint: &endpoint}
  cli, err := client.NewClient(&config)
  if err != nil {
    panic(err)
  }
  fileUrl1 := "https://example.com/example1.jpg"
  fileUrl2 := "https://example.com/example2.jpg"
  imageExtension := "jpg"
  request := client.SubmitConvertImageToWordJobRequest{
    ImageUrls:          []*string{&fileUrl1, &fileUrl2},
    ImageNameExtension: &imageExtension,
  }
  response, err := cli.SubmitConvertImageToWordJob(&request)
  if err != nil {
    panic(err)
  }
  fmt.Println(response.Body)
}
 use AlibabaCloud\SDK\Docmindapi\V20220711\Docmindapi;
use AlibabaCloud\SDK\Docmindapi\V20220711\Models\SubmitConvertImageToWordJobRequest;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use AlibabaCloud\Tea\Exception\TeaUnableRetryError;

$config = new Config();
// 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
$config->endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
// 前面准备好的您的AccessKey ID
$config->accessKeyId = "your access key id";
// 前面准备好的您的AccessKey Secret
$config->accessKeySecret = "your access key secret";
$config->type = "access_key";
$config->regionId = "cn-hangzhou";
$client = new Docmindapi($config);
$request = new SubmitConvertImageToWordJobRequest();

$runtime = new RuntimeOptions();
$runtime->maxIdleConns = 3;
$runtime->connectTimeout = 10000;
$runtime->readTimeout = 10000;

$request->imageUrls = array(
  "https://example.com/example1.jpg",
  "https://example.com/example2.jpg"
);
$request->imageNameExtension = "jpg";

try {
  $response = $client->submitConvertImageToWordJob($request, $runtime);
  var_dump($response->toMap());
} catch (TeaUnableRetryError $e) {
  var_dump($e->getMessage());
  var_dump($e->getErrorInfo());
  var_dump($e->getLastException());
  var_dump($e->getLastRequest());
}

正常返回示例

JSON格式

{
  "RequestId": "43A29C77-405E-4CC0-BC55-EE694AD0****",
  "Data": {
    "Id": "docmind-20220712-b15f****"
  }  
}

步骤二:轮询文档转换结果查询服务GetDocumentConvertResult接口

调用查询接口的入参Id就是前面异步任务提交接口返回的出参ID,查询结果有处理中、处理成功、处理失败三种情况。建议每10秒轮询一次,最多轮询10分钟。若明确返回Completed为true或者超过轮询最大时间,则终止轮询。

请求参数

名称

类型

必填

描述

示例值

Id

string

需要查询的业务订单号,订单号从提交接口的返回结果中获取

docmind-20220712-b15f****

返回参数

名称

类型

描述

示例值

RequestId

string

请求唯一ID

43A29C77-405E-4CC0-BC55-EE694AD0****

Completed

boolean

异步任务是否处理完成,false表示任务仍在处理中,true代表任务处理完成,有处理成功或处理失败的明确结果

true

Status

string

异步任务处理完成的状态,最终处理结束后的状态。Success为处理成功,Fail为处理失败

Success

Data

object

文档转换的结果,具体参数详情见下表

是个列表

Code

string

状态码

200

Message

string

详细信息

message

+Url

String

转换后的文件url地址

https://example.com/example.docx

+Size

Integer

转换后的文件大小,单位为字节。

1345488

+Type

String

转换后的文件后缀名

docx

+Md5

String

转换后的文件md5值,调用者可以用于校验

2d49eb7705f9f93ed857874db247****

以Java SDK为例,调用文档智能解析接口的结果查询类API示例代码如下,调用getDocumentConvertResult接口,通过id参数传入查询流水号。

import com.aliyun.docmind_api20220711.models.*;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.docmind_api20220711.Client;

public static void submit() throws Exception {
    Config config = new Config()
        // 前面准备好的您的AccessKey ID
        .setAccessKeyId(accessKeyId)
        // 前面准备好的您的AccessKey Secret
        .setAccessKeySecret(accessKeySecret);
    // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
    config.endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
    Client client = new Client(config);
    GetDocumentConvertResultRequest resultRequest = new GetDocumentConvertResultRequest();
    resultRequest.id = "docmind-20220902-824b****";
    GetDocumentConvertResultResponse response = client.getDocumentConvertResult(resultRequest);
}
const Client = require('@alicloud/docmind-api20220711');

const getResult = async () => {
  const client = new Client.default({
    // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
    endpoint: 'docmind-api.cn-hangzhou.aliyuncs.com',
    // 前面准备好的您的AccessKey ID
    accessKeyId: 'your access key id',
    // 前面准备好的您的AccessKey Secret
    accessKeySecret: 'your access key secret',
    type: 'access_key',
    regionId: 'cn-hangzhou'
  });
  
  const resultRequest = new Client.GetDocumentConvertResultRequest();
  resultRequest.id = "docmind-20220902-824b****";
  const response = await client.getDocumentConvertResult(resultRequest);
  
  return response.body;
}
from alibabacloud_docmind_api20220711.client import Client as docmind_api20220711Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_docmind_api20220711 import models as docmind_api20220711_models

def query():
    config = open_api_models.Config(
        # 您的 AccessKey ID,
        access_key_id='accessKeyId',
        # 您的 AccessKey Secret,
        access_key_secret='accessKeySecret'
    )
    # 访问的域名
    config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com'
    client = docmind_api20220711Client(config)
    request = docmind_api20220711_models.GetDocumentConvertResultRequest(
        # id :  任务提交接口返回的id
        id='docmind-20220902-824b****'
    )
    try:
        # 复制代码运行请自行打印 API 的返回值
        response = client.get_document_convert_result(request)
        # API返回值格式层级为 body -> data -> 具体属性。可根据业务需要打印相应的结果。获取属性值均以小写开头
        # 获取异步任务处理情况,可根据response.body.completed判断是否需要继续轮询结果
        print(response.body.completed)
        # 获取返回结果。建议先把response.body.data转成json,然后再从json里面取具体需要的值。
        print(response.body.data)        
    except Exception as error:
        # 如有需要,请打印 error
        UtilClient.assert_as_string(error.message)
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

using Tea;
using Tea.Utils;

public static void GetResult() 
        {
            AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                // 您的 AccessKey ID
                AccessKeyId = "AccessKeyId",
                // 您的 AccessKey Secret
                AccessKeySecret = "AccessKeySecret",
            };
            // 访问的域名
            config.Endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
            AlibabaCloud.SDK.Docmind_api20220711.Client client = new AlibabaCloud.SDK.Docmind_api20220711.Client(config);
            AlibabaCloud.SDK.Docmind_api20220711.Models.GetDocumentConvertResultRequest request = new AlibabaCloud.SDK.Docmind_api20220711.Models.GetDocumentConvertResultRequest
            {
                Id = "docmind-20220902-824b****"
            };
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            try
            {
                // 复制代码运行请自行打印 API 的返回值
                client.GetDocumentConvertResult(request);
            }
            catch (TeaException error)
            {
                // 如有需要,请打印 error
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
            catch (Exception _error)
            {
                TeaException error = new TeaException(new Dictionary<string, object>
                {
                    { "message", _error.Message }
                });
                // 如有需要,请打印 error
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
        }
import (
	"fmt"
	"os"

	openClient "github.com/alibabacloud-go/darabonba-openapi/client"
	"github.com/alibabacloud-go/docmind-api-20220711/client"
)

func submit(){
    var ak string = "您的AccessKeyId"
    var sk string = "您的AccessKeySecret"
    // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
    var endpoint string = "docmind-api.cn-hangzhou.aliyuncs.com"
    config := openClient.Config{AccessKeyId: &ak, AccessKeySecret: &sk, Endpoint: &endpoint}
    // 初始化client
    cli, err := client.NewClient(&config)
    if err != nil {
      panic(err)
    }
    id := "docmind-20220925-76b1****"
    // 调用查询接口
    request := client.GetDocumentConvertResultRequest{Id: &id}
    response, err := cli.GetDocumentConvertResult(&request)
    if err != nil {
      panic(err)
    }
    // 打印查询结果
    fmt.Println(response.Body)
  //注意,使用go语言sdk会将返回结果中Url中的特殊字符&做Unicode转码,转码成\u0026,需要调用者手动将\u0026进行Unicode转码回&,才可以正常下载URL
  //go语言sdk的Url返回示例如下http://docmind-api-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/convert/docmind-20220927-87ad**/example.pdf?Expires=XX\u0026OSSAccessKeyId=YY\u0026Signature=ZZ
}
use AlibabaCloud\SDK\Docmindapi\V20220711\Docmindapi;
use AlibabaCloud\SDK\Docmindapi\V20220711\Models\GetDocumentConvertResultRequest;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
    
$config = new Config();
// 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
$config->endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
// 前面准备好的您的AccessKey ID
$config->accessKeyId = "your access key id";
// 前面准备好的您的AccessKey Secret
$config->accessKeySecret = "your access key secret";
$config->type = "access_key";
$config->regionId = "cn-hangzhou";
$client = new Docmindapi($config);
$request = new GetDocumentConvertResultRequest();   
$request->id = "docmind-20220902-824b****";

$runtime = new RuntimeOptions();
$runtime->maxIdleConns = 3;
$runtime->connectTimeout = 10000;
$runtime->readTimeout = 10000;

try {
  $response = $client->getDocumentConvertResult($request, $runtime);
  var_dump($response->toMap());
} catch (TeaUnableRetryError $e) {
  var_dump($e->getMessage());
  var_dump($e->getErrorInfo());
  var_dump($e->getLastException());
  var_dump($e->getLastRequest());
}

查询结果有处理中、处理成功、处理失败三种情况,分别说明每种情况的返回结果示例。

处理中的返回结果如下所示:

{
  "RequestId": "2AABD2C2-D24F-12F7-875D-683A27C3****",
  "Completed": false,
  "Code": "DocProcessing",
  "Message": "Document processing",
  "HostId": "ocr-api.cn-hangzhou.aliyuncs.com",
  "Recommend": "https://next.api.aliyun.com/troubleshoot?q=DocProcessing&product=docmind-api"
}

处理中Completed会返回false,表示任务没有处理结束,仍在处理中。这种情况需要继续轮询,直到明确返回Completed为true或者超过轮询最大时间。

处理失败的返回结果如下所示:

{
  "RequestId": "A8EF3A36-1380-1116-A39E-B377BE27****",
  "Completed": true,
  "Status": "Fail",
  "Code": "UrlNotLegal",
  "Message": "Failed to process the document.  The document url you provided is not legal.",
  "HostId": "docmind-api.cn-hangzhou.aliyuncs.com",
  "Recommend": "https://next.api.aliyun.com/troubleshoot?q=IDP.UrlNotLegal&product=docmind-api"
}

处理失败Completed会返回true,表示任务处理结束,同时会返回Status为字符串的Fail,表示处理成功失败,同时会返回失败Code和详细原因Message。访问错误码可以查看错误码详细介绍。

处理成功的返回结果如下所示:

{
  "Status": "Success",
  "RequestId": "73134E1A-E281-1B2C-A105-D0ECFE2D****",
  "Completed": true,
  "Data": [
    {
      "Type": "docx",
      "Size": 7940,
      "Url": "http://docmind-api-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/convert/docmind-20220902-57de****/example.docx?Expires=1662190830&OSSAccessKeyId=XX&Signature=YY",
      "Md5": "36256a4c2db8e31e056aeeb8b871****"
    }
  ]
}

处理成功Completed会返回true,表示任务处理结束,同时会返回Status为字符串的Success,表示处理成功。具体的处理结果在Data节点中,接下来介绍下Data节点的具体格式:

  • Type表示转换后文档的文档类型,例如该图片转word接口返回的是docx格式的word文档。

  • Url表示转换后文档的下载链接,每次查询请求返回的Url下载链接的有效期为60分钟,超期后该Url会失效,需要重新调用查询接口拿到新的Url下载链接。

  • Size表示转换后文档的文件大小,单位是字节,可以用于对用户下载的转换后文档做合法性校验,比较下载的转换后文档的文件大小和接口返回的Size是否相等。

  • Md5表示转换后文档的文件Md5摘要值,可以用于对用户下载的转换后文档做合法性校验,比较下载的转换后文档的Md5摘要值和接口返回的Md5是否相等。

阿里云首页 文档智能 相关技术圈