The image-to-PDF API converts multiple images into a PDF file in a specified order. You can process up to 30 images in a single request. This topic describes how to call the image-to-PDF API. Before you call this OpenAPI, read the API usage guide.
How to call the API
The image-to-PDF API is asynchronous. First, you call the SubmitConvertImageToPdfJob operation to submit an asynchronous task. Then, you call the GetDocumentConvertResult operation to poll for the result.
You can poll for the result every 10 seconds for up to 120 minutes. If the task is not complete after 120 minutes, the task times out.
After you submit an asynchronous task, you can query the result within 24 hours of its completion. After 24 hours, the result is no longer available.
Supported formats and sizes: You can process up to 30 images in JPG, JPEG, PNG, BMP, or GIF format. For GIF files, only the first frame is processed. Images with a longest side greater than 8192 px or a size larger than 20 MB are not supported.
Step 1: Call the SubmitConvertImageToPdfJob operation
Request parameters
Name | Type | Required | Description | Example |
ImageUrls | List<String> | Yes | A collection of image URLs. You can specify 1 to 30 URLs. Images with a longest side greater than 8192 px or a size larger than 20 MB are not supported. If the request fails because the request URL is too long, reduce the number of image URLs. | "https://example.com/example1.jpg","https://example.com/example2.jpg" |
ImageNames | List<String> | No | The name of the file, which must include a file extension. This parameter is mutually exclusive with imageNameExtension. | "example1.jpg","example2.jpg" |
ImageNameExtension | string | No | The file name extension. You must specify either ImageNameExtension or ImageNames. Supported formats: JPG, JPEG, PNG, BMP, and GIF. | jpg |
OssBucket | string | No | The name of your OSS bucket. For more information, see OSS hosting support. | docmind-trust |
OssEndpoint | string | No | The endpoint of your OSS bucket. For more information, see OSS hosting support. | oss-cn-hangzhou.aliyuncs.com |
EnableEventCallback | bool | No | Specifies whether to enable event callbacks. The default value is False. For more information, see EventBridge support. | false |
Response parameters
Name | Type | Description | Example |
RequestId | string | The unique ID of the request. | 43A29C77-405E-4CC0-BC55-EE694AD0**** |
Data | object | The returned data. | "Id": "docmind-20220712-b15f****" |
Id | string | The business order ID. This is the unique identifier used to query the result in subsequent calls. | docmind-20220712-b15fe**** |
Code | string | The status code. | 200 |
Message | string | The detailed information. | Message |
Examples
This operation supports calls that use document URLs. You cannot upload local documents.
The following code provides an example of how to call the SubmitConvertImageToPdfJob operation using the Java SDK and passing multiple document URLs in the imageUrls parameter. The document URLs that you provide must be publicly accessible for download, have no cross-domain restrictions, and contain no special escape characters.
For information about how to obtain and use AccessKey pairs, see the usage guide for the SDK of your preferred language in SDK Overview.
import com.aliyun.docmind_api20220711.models.*;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.docmind_api20220711.Client;
public static void submit() throws Exception {
// Use the default credential to initialize the Credentials client.
com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
Config config = new Config()
// Obtain the AccessKey ID from the configuration using credentials.
.setAccessKeyId(credentialClient.getAccessKeyId())
// Obtain the AccessKey secret from the configuration using credentials.
.setAccessKeySecret(credentialClient.getAccessKeySecret());
// The endpoint. Both IPv4 and IPv6 are supported. For IPv6, use docmind-api-dualstack.cn-hangzhou.aliyuncs.com.
config.endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
Client client = new Client(config);
SubmitConvertImageToPdfJobRequest imageToPdfJobRequest = new SubmitConvertImageToPdfJobRequest();
String fileUrl1 = "https://example.com/example1.jpg";
String fileUrl2 = "https://example.com/example2.jpg";
imageToPdfJobRequest.imageUrls = Arrays.asList(fileUrl1, fileUrl2);
// Specify the file name extension of the first image.
imageToPdfJobRequest.imageNameExtension = "jpg";
SubmitConvertImageToPdfJobResponse response = client.submitConvertImageToPdfJob(imageToPdfJobRequest);
}const Client = require('@alicloud/docmind-api20220711');
const Credential = require('@alicloud/credentials');
const getResult = async () => {
// Use the default credential to initialize the Credentials client.
const cred = new Credential.default();
const client = new Client.default({
// The endpoint. Both IPv4 and IPv6 are supported. For IPv6, use docmind-api-dualstack.cn-hangzhou.aliyuncs.com.
endpoint: 'docmind-api.cn-hangzhou.aliyuncs.com',
// Obtain the AccessKey ID from the configuration using credentials.
accessKeyId: cred.credential.accessKeyId,
// Obtain the AccessKey secret from the configuration using credentials.
accessKeySecret: cred.credential.accessKeySecret,
type: 'access_key',
regionId: 'cn-hangzhou'
});
const request = new Client.SubmitConvertImageToPdfJobRequest();
request.imageUrls = [
'https://example.com/example1.jpg',
'https://example.com/example2.jpg'
];
request.imageNameExtension = 'jpg';
const response = await client.submitConvertImageToPdfJob(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
from alibabacloud_credentials.client import Client as CredClient
def submit_url():
cred=CredClient()
config = open_api_models.Config(
# Obtain the AccessKey ID from the configuration using credentials.
access_key_id=cred.get_access_key_id(),
# Obtain the AccessKey secret from the configuration using credentials.
access_key_secret=cred.get_access_key_secret()
)
# The endpoint.
config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com'
client = docmind_api20220711Client(config)
request = docmind_api20220711_models.SubmitConvertImageToPdfJobRequest(
# image_urls: The URLs of the images.
image_urls=['https://example.com/example.jpg'],
# image_name_extension: The image format. You must specify either this parameter or image_names.
image_name_extension='jpg',
# image_names: The image names. The names must include the image type.
image_names=['123.jpg'],
)
try:
# If you copy the code to run, print the API return value.
response = client.submit_convert_image_to_pdf_job(request)
# The API returns data in the following format: body -> data -> specific property. You can print the results as needed. The following example shows how to print the returned business ID.
# Property values start with a lowercase letter.
print(response.body.data.id)
except Exception as error:
# If necessary, print the 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()
{
// Use the default credential to initialize the Credentials client.
var akCredential = new Aliyun.Credentials.Client(null);
AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
{
// Obtain the AccessKey ID from the configuration using credentials.
AccessKeyId = akCredential.GetAccessKeyId(),
// Obtain the AccessKey secret from the configuration using credentials.
AccessKeySecret = akCredential.GetAccessKeySecret(),
};
// The endpoint.
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.SubmitConvertImageToPdfJobRequest request = new AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitConvertImageToPdfJobRequest
{
ImageUrls = list,
ImageNameExtension = "jpg"
};
try
{
// If you copy the code to run, print the API return value.
client.SubmitConvertImageToPdfJob(request);
}
catch (TeaException error)
{
// If necessary, print the error.
AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
}
catch (Exception _error)
{
TeaException error = new TeaException(new Dictionary<string, object>
{
{ "message", _error.Message }
});
// If necessary, print the error.
AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
}
}import (
"fmt"
openClient "github.com/alibabacloud-go/darabonba-openapi/v2/client"
"github.com/alibabacloud-go/docmind-api-20220711/client"
"github.com/aliyun/credentials-go/credentials"
)
func submit() {
// Use the default credential to initialize the Credentials client.
credential, err := credentials.NewCredential(nil)
// Obtain the AccessKey ID from the configuration using credentials.
accessKeyId, err := credential.GetAccessKeyId()
// Obtain the AccessKey secret from the configuration using credentials.
accessKeySecret, err := credential.GetAccessKeySecret()
// The endpoint. Both IPv4 and IPv6 are supported. For IPv6, use docmind-api-dualstack.cn-hangzhou.aliyuncs.com.
var endpoint string = "docmind-api.cn-hangzhou.aliyuncs.com"
config := openClient.Config{AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, Endpoint: &endpoint}
// Initialize the client.
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.SubmitConvertImageToPdfJobRequest{
ImageUrls: []*string{&fileUrl1, &fileUrl2},
ImageNameExtension: &imageExtension,
}
response, err := cli.SubmitConvertImageToPdfJob(&request)
if err != nil {
panic(err)
}
fmt.Println(response.Body)
}use AlibabaCloud\SDK\Docmindapi\V20220711\Docmindapi;
use AlibabaCloud\SDK\Docmindapi\V20220711\Models\SubmitConvertImageToPdfJobRequest;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
use AlibabaCloud\Credentials\Credential;
// Use the default credential to initialize the Credentials client.
$bearerToken = new Credential();
$config = new Config();
// The endpoint. Both IPv4 and IPv6 are supported. For IPv6, use docmind-api-dualstack.cn-hangzhou.aliyuncs.com.
$config->endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
// Obtain the AccessKey ID from the configuration using credentials.
$config->accessKeyId = $bearerToken->getCredential()->getAccessKeyId();
// Obtain the AccessKey secret from the configuration using credentials.
$config->accessKeySecret = $bearerToken->getCredential()->getAccessKeySecret();
$config->type = "access_key";
$config->regionId = "cn-hangzhou";
$client = new Docmindapi($config);
$request = new SubmitConvertImageToPdfJobRequest();
$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->submitConvertImageToPdfJob($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());
}Response
{
"RequestId": "43A29C77-405E-4CC0-BC55-EE694AD0****",
"Data": {
"Id": "docmind-20220712-b15f****"
}
}Step 2: Poll the GetDocumentConvertResult operation to query the result
The `Id` request parameter for the query operation is the `Id` that is returned by the asynchronous task submission operation. The query result indicates the task status, which can be processing, successful, or failed.
Request parameters
Name | Type | Required | Description | Example |
Id | string | Yes | The business order ID that you want to query. Obtain this ID from the response of the submission operation. | docmind-20220712-b15f**** |
Response parameters
Name | Type | Description | Example |
RequestId | string | The unique ID of the request. | 43A29C77-405E-4CC0-BC55-EE694AD0**** |
Completed | boolean | Indicates whether the asynchronous task is complete. `false` indicates that the task is still processing. `true` indicates that the task is complete, with a result of either successful or failed. | true |
Status | string | The final status of the asynchronous task. `Success` indicates that the task was successful. `Fail` indicates that the task failed. | Success |
Data | object | The result of the document conversion. For more information about the parameters, see the following table. | A list of objects. |
Description of the Data parameter
Name | Type | Description | Example |
Code | string | The status code. | 200 |
Message | string | The detailed information. | message |
Url | String | The URL of the converted file. | https://example.com/example.pdf |
Size | Integer | The size of the converted file in bytes. | 1345488 |
Type | String | The file name extension of the converted file. For example, if you convert a PDF file to a Word document, the extension is `docx`. | |
Md5 | String | The MD5 hash of the converted file. You can use this value for verification. | 2d49eb7705f9f93ed857874db247**** |
Examples
The following code provides an example of how to call the GetDocumentConvertResult operation using the Java SDK and passing the query ID in the `Id` parameter.
For information about how to obtain and use AccessKey pairs, see the usage guide for the SDK of your preferred language in SDK Overview.
import com.aliyun.docmind_api20220711.models.*;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.docmind_api20220711.Client;
public static void submit() throws Exception {
// Use the default credential to initialize the Credentials client.
com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
Config config = new Config()
// Obtain the AccessKey ID from the configuration using credentials.
.setAccessKeyId(credentialClient.getAccessKeyId())
// Obtain the AccessKey secret from the configuration using credentials.
.setAccessKeySecret(credentialClient.getAccessKeySecret());
// The endpoint. Both IPv4 and IPv6 are supported. For IPv6, use 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 Credential = require('@alicloud/credentials');
const getResult = async () => {
// Use the default credential to initialize the Credentials client.
const cred = new Credential.default();
const client = new Client.default({
// The endpoint. Both IPv4 and IPv6 are supported. For IPv6, use docmind-api-dualstack.cn-hangzhou.aliyuncs.com.
endpoint: 'docmind-api.cn-hangzhou.aliyuncs.com',
// Obtain the AccessKey ID from the configuration using credentials.
accessKeyId: cred.credential.accessKeyId,
// Obtain the AccessKey secret from the configuration using credentials.
accessKeySecret: cred.credential.accessKeySecret,
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
from alibabacloud_tea_util.client import Client as UtilClient
from alibabacloud_credentials.client import Client as CredClient
def query():
cred=CredClient()
config = open_api_models.Config(
# Obtain the AccessKey ID from the configuration using credentials.
access_key_id=cred.get_access_key_id(),
# Obtain the AccessKey secret from the configuration using credentials.
access_key_secret=cred.get_access_key_secret()
)
# The endpoint.
config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com'
client = docmind_api20220711Client(config)
request = docmind_api20220711_models.GetDocumentConvertResultRequest(
# id: The ID returned by the task submission operation.
id='docmind-20220902-824b****'
)
try:
# If you copy the code to run, print the API return value.
response = client.get_document_convert_result(request)
# The API returns data in the following format: body -> data -> specific property. You can print the results as needed. Property values start with a lowercase letter.
# Obtain the status of the asynchronous task. You can check response.body.completed to determine whether to continue polling for the result.
print(response.body.completed)
# Obtain the returned result. We recommend that you first convert response.body.data to JSON and then extract the required values from the JSON object.
print(response.body.data)
except Exception as error:
# If necessary, print the 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()
{
// Use the default credential to initialize the Credentials client.
var akCredential = new Aliyun.Credentials.Client(null);
AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
{
// Obtain the AccessKey ID from the configuration using credentials.
AccessKeyId = akCredential.GetAccessKeyId(),
// Obtain the AccessKey secret from the configuration using credentials.
AccessKeySecret = akCredential.GetAccessKeySecret(),
};
// The endpoint.
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
{
// If you copy the code to run, print the API return value.
client.GetDocumentConvertResult(request);
}
catch (TeaException error)
{
// If necessary, print the error.
AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
}
catch (Exception _error)
{
TeaException error = new TeaException(new Dictionary<string, object>
{
{ "message", _error.Message }
});
// If necessary, print the error.
AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
}
}import (
"fmt"
"os"
openClient "github.com/alibabacloud-go/darabonba-openapi/v2/client"
"github.com/alibabacloud-go/docmind-api-20220711/client"
"github.com/aliyun/credentials-go/credentials"
)
func submit(){
// Use the default credential to initialize the Credentials client.
credential, err := credentials.NewCredential(nil)
// Obtain the AccessKey ID from the configuration using credentials.
accessKeyId, err := credential.GetAccessKeyId()
// Obtain the AccessKey secret from the configuration using credentials.
accessKeySecret, err := credential.GetAccessKeySecret()
// The endpoint. Both IPv4 and IPv6 are supported. For IPv6, use docmind-api-dualstack.cn-hangzhou.aliyuncs.com.
var endpoint string = "docmind-api.cn-hangzhou.aliyuncs.com"
config := openClient.Config{AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, Endpoint: &endpoint}
// Initialize the client.
cli, err := client.NewClient(&config)
if err != nil {
panic(err)
}
id := "docmind-20220925-76b1****"
// Call the query operation.
request := client.GetDocumentConvertResultRequest{Id: &id}
response, err := cli.GetDocumentConvertResult(&request)
if err != nil {
panic(err)
}
// Print the query result.
fmt.Println(response.Body)
// Note: The Go SDK URL-encodes the ampersand (&) in the returned URL to \u0026. You must decode \u0026 back to & to download the file from the URL.
// The Go SDK returns a URL similar to the following: 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\Utils\Utils\RuntimeOptions;
use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
use AlibabaCloud\Credentials\Credential;
// Use the default credential to initialize the Credentials client.
$bearerToken = new Credential();
$config = new Config();
// The endpoint. Both IPv4 and IPv6 are supported. For IPv6, use docmind-api-dualstack.cn-hangzhou.aliyuncs.com.
$config->endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
// Obtain the AccessKey ID from the configuration using credentials.
$config->accessKeyId = $bearerToken->getCredential()->getAccessKeyId();
// Obtain the AccessKey secret from the configuration using credentials.
$config->accessKeySecret = $bearerToken->getCredential()->getAccessKeySecret();
$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());
}Response
The response indicates whether the task is processing, successful, or failed. The following sections provide examples for each case.
The following response is returned during processing:
{ "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" }A `Completed` value of `false` indicates that the task is still processing. In this case, continue to poll for the result until `Completed` returns `true` or the maximum polling time is reached.
The following response indicates that the task failed:
{ "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" }A task has failed if the `Completed` value is `true` and the `Status` is `Fail`. The response also includes an error `Code` and a detailed `Message`. For more information about error codes, see Error codes.
The following response indicates that the task was successful:
{ "Status": "Success", "RequestId": "73134E1A-E281-1B2C-A105-D0ECFE2D****", "Completed": true, "Data": [ { "Type": "pdf", "Size": 7940, "Url": "http://docmind-api-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/convert/docmind-20220902-57de****/example.pdf?Expires=1662190830&OSSAccessKeyId=XX&Signature=YY", "Md5": "36256a4c2db8e31e056aeeb8b871****" } ] }A `Completed` value of `true` and a `Status` value of `Success` indicate that the task was successful. The result is in the `Data` node. The `Data` node is a list that contains only one element. The following list describes the format of the element in the `Data` node:
`Type` indicates the type of the converted document. For example, because the image-to-PDF API returns a PDF document, the value of this parameter is `pdf`.
`Url` indicates the download link for the converted document. The URL returned by each query request is valid for 60 minutes. After it expires, you must call the query operation again to obtain a new URL.
`Size` indicates the size of the converted document in bytes. You can use this value to verify the integrity of the downloaded document by comparing its size with the `Size` value that is returned by the API.
`Md5` indicates the MD5 hash of the converted document. You can use this value to verify the integrity of the downloaded document by comparing its MD5 hash with the `Md5` value that is returned by the API.