电子文档解析

能力介绍:

电子文档解析接口可用于电子文档的解析,从文档本身的半结构化内容中解析出所包含的信息,提供包括pdf、word、excel、html、epub、mobi、markdown、txt的电子解析能力,生成文档智能中支持的结构化对象。电子文档解析接口为同步接口,调用SubmitDigitalDocStructureJob或者SubmitDigitalDocStructureJobAdvance 均可进行同步接口提交,等待超时时间可设置为5分钟。

调用提交服务

同步提交服务支持本地文件和URL文件两种方式:

URL上传的同步提交服务接口为:SubmitDigitalDocStructureJob接口。

本地文件上传的同步提交服务接口为:SubmitDigitalDocStructureJobAdvance接口。

请求参数

名称

类型

必填

描述

示例值

FileUrl

string

  • 使用接口SubmitDigitalDocStructureJob进行URL方式上传时使用。

  • 支持的格式:html、pdf、ppt、pptx、xlsx、xls、doc、docx、mobi、epub、md、txt

  • 大小限制:

    • 以URL方式返回(即UseUrlResponseBody=true):单个文档限制大小为150MB以内,页数1.5万页以内。

    • 非URL方式返回(即UseUrlResponseBody=false):单个文档限制大小为100MB以内,页数为1000页以内。

https://example.com/example.xlsx

FileUrlObject

stream

  • 使用接口SubmitDigitalDocStructureJobAdvance 进行URL方式上传时使用。

  • 支持的格式:html、pdf、ppt、pptx、xlsx、xls、doc、docx、mobi、epub、md、txt

  • 大小限制:

    • 以URL方式返回(即UseUrlResponseBody=true):单个文档限制大小为150MB以内,页数1.5万页以内。

    • 非URL方式返回(即UseUrlResponseBody=false):单个文档限制大小为100MB以内,页数为1000页以内。

本地文件生成的FileInputStream

FileName

string

文件名需带文件类型后缀,与fileNameExtension二选一。

example.xlsx

FileNameExtension

string

文件类型,与fileName二选一。

xlsx

RevealMarkdown

boolean

是否输出markdown类型文本

true

ImageStrategy

String

markdownContent中图片存储方式

url:提供oss url(含有效期)

base64: 提供base64字段

UseUrlResponseBody

bool

是否以url方式返回结果,默认为false

true

重要

开启markdown输出后,ImageStrategy参数用于控制markdown内图片存储方式,base64适合较小文件,推荐使用url,但注意url会有时效期。

如果上传的文件较大 或者文件内容较多 ,建议开启UseUrlResponseBody,可以有效避免接口超时等问题,但注意url会有时效期。

返回参数

名称

类型

描述

示例值

RequestId

string

请求唯一ID。

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

Id

String

订单Id

docmind-20220712-b15f****

Status

String

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

Success

Data

map

返回数据,电子解析的解析结果,输出包括文档内容及样式、文档逻辑信息(层级树)的JSON数据结构返回。

Code

string

状态码。

200

Message

string

详细信息。

message

示例

本接口支持本地文档上传和传入文档URL这两种调用方式。

以Java SDK为例,本地文档上传调用方式的请求示例代码如下,调用submitDigitalDocStructureJobAdvance接口,通过fileUrlObject参数实现本地文档上传。

说明

获取并使用AccessKey信息的方式,可参考SDK概述中不同语言的SDK使用指南。

import com.aliyun.docmind_api20220711.models.*;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.docmind_api20220711.Client;
import com.aliyun.teautil.models.RuntimeOptions;
import java.io.File;
import java.io.FileInputStream;

public static void submit() throws Exception {
    // 使用默认凭证初始化Credentials Client。
    com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
    Config config = new Config()
        // 通过credentials获取配置中的AccessKey ID
        .setAccessKeyId(credentialClient.getAccessKeyId())
        // 通过credentials获取配置中的AccessKey Secret
        .setAccessKeySecret(credentialClient.getAccessKeySecret());
    // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
    config.endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
    Client client = new Client(config);
    // 创建RuntimeObject实例并设置运行参数
    RuntimeOptions runtime = new RuntimeOptions();
    SubmitDigitalDocStructureJobAdvanceRequest request = new SubmitDigitalDocStructureJobAdvanceRequest();
    File file = new File("D:\\example.xlsx");
    advanceRequest.fileUrlObject = new FileInputStream(file);
    advanceRequest.fileName = "example.xlsx";
    // 发起请求并处理应答或异常。                                    
    SubmitDigitalDocStructureJobResponse response = client.submitDigitalDocStructureJobAdvance(request, runtimeOptions);
}
const Client = require('@alicloud/docmind-api20220711');
const Credential = require('@alicloud/credentials');
const Util = require('@alicloud/tea-util');
const fs = require('fs');

const getResult = async () => {
	// 使用默认凭证初始化Credentials Client
  const cred = new Credential.default();
  const client = new Client.default({
    // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
    endpoint: 'docmind-api.cn-hangzhou.aliyuncs.com',
    // 通过credentials获取配置中的AccessKey ID
    accessKeyId: cred.credential.accessKeyId,
    // 通过credentials获取配置中的AccessKey Secret
    accessKeySecret: cred.credential.accessKeySecret,
    type: 'access_key',
    regionId: 'cn-hangzhou'
  });
  
  const advanceRequest = new Client.SubmitDigitalDocStructureJobAdvanceRequest();
  const file = fs.createReadStream('./example.pdf');
  advanceRequest.fileUrlObject = file;
  advanceRequest.fileName = 'example.pdf';
  const runtimeObject = new Util.RuntimeOptions({});
  const response = await client.submitDigitalDocStructureJobAdvance(advanceRequest, runtimeObject);
	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_tea_util import models as util_models
from alibabacloud_credentials.client import Client as CredClient

def submit_file():
  	# 使用默认凭证初始化Credentials Client。
    cred=CredClient()
    config = open_api_models.Config(
        # 通过credentials获取配置中的AccessKey ID
        access_key_id=cred.get_access_key_id(),
        # 通过credentials获取配置中的AccessKey Secret
        access_key_secret=cred.get_access_key_secret()
    )
    # 访问的域名
    config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com'
    client = docmind_api20220711Client(config)
    request = docmind_api20220711_models.SubmitDigitalDocStructureJobAdvanceRequest(
        # file_url_object : 本地文件流
        file_url_object=open("./example.xlsx", "rb"),
        # file_name :文件名称。名称必须包含文件类型
        file_name='123.xlsx',
        # file_name_extension : 文件后缀格式。与文件名二选一
        file_name_extension='xlsx'
    )
    runtime = util_models.RuntimeOptions()
    try:
        # 复制代码运行请自行打印 API 的返回值
        response = client.submit_digital_doc_structure_job_advance(request, runtime)
        # API返回值格式层级为 body -> data -> 具体属性。
        print(response.body.data)
    except Exception as error:
        # 如有需要,请打印 error
        UtilClient.assert_as_string(error.message)  
import (
	"fmt"
	"os"
  
	openClient "github.com/alibabacloud-go/darabonba-openapi/v2/client"
	"github.com/alibabacloud-go/docmind-api-20220711/client"
	"github.com/alibabacloud-go/tea-utils/v2/service"
  "github.com/aliyun/credentials-go/credentials"
)

func submit(){
 // 使用默认凭证初始化Credentials Client。
	credential, err := credentials.NewCredential(nil)
	// 通过credentials获取配置中的AccessKey ID
	accessKeyId, err := credential.GetAccessKeyId()
	// 通过credentials获取配置中的AccessKey Secret
	accessKeySecret, err := credential.GetAccessKeySecret()
  // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用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}
	// 初始化client
  cli, err := client.NewClient(&config)
	if err != nil {
		panic(err)
	}
  // 上传本地文档调用接口
  filename := "D:\\example.pdf"    
  f, err := os.Open(filename)
	if err != nil {
    panic(err)
	}
  // 初始化接口request
  request := client.SubmitDigitalDocStructureJobAdvanceRequest{
		FileName:      &filename,
		FileUrlObject: f,
	}
  // 创建RuntimeObject实例并设置运行参数
  options := service.RuntimeOptions{}
  response, err := cli.SubmitDigitalDocStructureJobAdvance(&request, &options)
  if err != nil {
		panic(err)
	}
  // 打印结果
	fmt.Println(response.Body.String())
}
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 SubmitFile()
        {
            // 使用默认凭证初始化Credentials Client。
          	var akCredential = new Aliyun.Credentials.Client(null);
            AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                // 通过credentials获取配置中的AccessKey Secret
                AccessKeyId = akCredential.GetAccessKeyId(),
                // 通过credentials获取配置中的AccessKey Secret
                AccessKeySecret = akCredential.GetAccessKeySecret(),
            };
            // 访问的域名
            config.Endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
            AlibabaCloud.SDK.Docmind_api20220711.Client client = new AlibabaCloud.SDK.Docmind_api20220711.Client(config);
               //需要安装额外的依赖库--> AlibabaCloud.DarabonbaStream        
    				Stream bodySyream = AlibabaCloud.DarabonbaStream.StreamUtil.ReadFromFilePath("<YOUR-FILE-PATH>");
            AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitDigitalDocStructureJobAdvanceRequest request = new AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitDigitalDocStructureJobAdvanceRequest
            {
                FileUrlObject = bodySyream,
                FileNameExtension = "pdf"
            };
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            try
            {
                // 复制代码运行请自行打印 API 的返回值
                client.SubmitDigitalDocStructureJobAdvance(request, runtime);
            }
            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);
            }
        }

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

说明

获取并使用AccessKey信息的方式,可参考SDK概述中不同语言的SDK使用指南。

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

public static void submit() throws Exception {
    // 使用默认凭证初始化Credentials Client。
    com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
    Config config = new Config()
        // 通过credentials获取配置中的AccessKey ID
        .setAccessKeyId(credentialClient.getAccessKeyId())
        // 通过credentials获取配置中的AccessKey Secret
        .setAccessKeySecret(credentialClient.getAccessKeySecret());
    // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
    config.endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
    Client client = new Client(config);
		SubmitDigitalDocStructureJobRequest request = new SubmitDigitalDocStructureJobRequest();
    request.fileName = "example.xlsx";
    request.fileUrl = "https://example.com/example.xlsx";
    SubmitDigitalDocStructureJobResponse response = client.submitDigitalDocStructureJob(request);
}
const Client = require('@alicloud/docmind-api20220711');
const Credential = require('@alicloud/credentials');

const getResult = async () => {
	// 使用默认凭证初始化Credentials Client
  const cred = new Credential.default();
  const client = new Client.default({
    // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
    endpoint: 'docmind-api.cn-hangzhou.aliyuncs.com',
    // 通过credentials获取配置中的AccessKey ID
    accessKeyId: cred.credential.accessKeyId,
    // 通过credentials获取配置中的AccessKey Secret
    accessKeySecret: cred.credential.accessKeySecret,
    type: 'access_key',
    regionId: 'cn-hangzhou'
  });
  
  const request = new Client.SubmitDigitalDocStructureJobRequest();
  request.fileName = 'example.pdf';
  request.fileUrl = 'https://example.com/example.pdf';
  const response = await client.submitDocStructureJob(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():
  	# 使用默认凭证初始化Credentials Client。
    cred=CredClient()
    config = open_api_models.Config(
        # 通过credentials获取配置中的AccessKey ID
        access_key_id=cred.get_access_key_id(),
        # 通过credentials获取配置中的AccessKey Secret
        access_key_secret=cred.get_access_key_secret()
    )
    # 访问的域名
    config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com'
    client = docmind_api20220711Client(config)
    request = docmind_api20220711_models.SubmitDigitalDocStructureJobRequest(
        # file_url : 文件url地址
        file_url='https://example.com/example.xlsx',
        # file_name :文件名称。名称必须包含文件类型
        file_name='123.xlsx',
        # file_name_extension : 文件后缀格式。与文件名二选一
        file_name_extension='xlsx'
    )
    try:
        # 复制代码运行请自行打印 API 的返回值
        response = client.submit_digital_doc_structure_job(request)
        # API返回值格式层级为 body -> data -> 具体属性。
        print(response.body.data)        
    except Exception as error:
        # 如有需要,请打印 error
        UtilClient.assert_as_string(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(){
  // 使用默认凭证初始化Credentials Client。
	credential, err := credentials.NewCredential(nil)
	// 通过credentials获取配置中的AccessKey ID
	accessKeyId, err := credential.GetAccessKeyId()
	// 通过credentials获取配置中的AccessKey Secret
	accessKeySecret, err := credential.GetAccessKeySecret()
  // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用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}
	// 初始化client
  cli, err := client.NewClient(&config)
	if err != nil {
		panic(err)
	}
  // 文件URL
  fileURL := "https://example.com/example.pdf"
  // 文件名
  fileName := "example.pdf"
  // 初始化接口request
  request := client.SubmitDigitalDocStructureJobRequest{
		FileUrl:  &fileURL,
		FileName: &fileName,
	}
  response, err := cli.submitDigitalDocStructureJob(&request)
  if err != nil {
		panic(err)
	}
  // 打印结果
	fmt.Println(response.Body.String())
}
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()
        {
            // 使用默认凭证初始化Credentials Client。
          	var akCredential = new Aliyun.Credentials.Client(null);
            AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                // 通过credentials获取配置中的AccessKey Secret
                AccessKeyId = akCredential.GetAccessKeyId(),
                // 通过credentials获取配置中的AccessKey Secret
                AccessKeySecret = akCredential.GetAccessKeySecret(),
            };
            // 访问的域名
            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.SubmitDigitalDocStructureJobRequest request = new AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitDigitalDocStructureJobRequest
            {
                FileUrl = "https://example.pdf",
                FileNameExtension = "pdf"
            };
            try
            {
                // 复制代码运行请自行打印 API 的返回值
                client.SubmitDigitalDocStructureJob(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);
            }
        }
use AlibabaCloud\SDK\Docmindapi\V20220711\Docmindapi;
use AlibabaCloud\SDK\Docmindapi\V20220711\Models\SubmitDocStructureJobRequest;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
use AlibabaCloud\Credentials\Credential;

// 使用默认凭证初始化Credentials Client。
$bearerToken = new Credential();    
$config = new Config();
// 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
$config->endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
// 通过credentials获取配置中的AccessKey ID
$config->accessKeyId = $bearerToken->getCredential()->getAccessKeyId();
// 通过credentials获取配置中的AccessKey Secret
$config->accessKeySecret = $bearerToken->getCredential()->getAccessKeySecret();
$config->type = "access_key";
$config->regionId = "cn-hangzhou";
$client = new Docmindapi($config);
$request = new SubmitDigitalDocStructureJobRequest();

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

$request->fileName = "example.pdf";
$request->fileUrl = "https://example.com/example.pdf";

try {
  $response = $client->submitDigitalDocStructureJob($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格式

{
  "data":{
    "docInfo":{
      "pageCountEstimate":3,
      "docType":"pdf"
    },
    "styles":[ ],
    "layouts":[
      {
        "pos":[
          {
            "x":0,
            "y":0
          },
          {
            "x":1113,
            "y":0
          },
          {
            "x":1113,
            "y":1440
          },
          {
            "x":0,
            "y":1440
          }
        ],
        "index":0,
        "subType":"none",
        "text":"",
        "type":"image",
        "pageNum":[
          0
        ],
        "uniqueId":"31128703ac73c52f05717b3b654de020"
      },
      {
        "pos":[
          {
            "x":0,
            "y":0
          },
          {
            "x":1113,
            "y":0
          },
          {
            "x":1113,
            "y":1440
          },
          {
            "x":0,
            "y":1440
          }
        ],
        "index":0,
        "subType":"none",
        "text":"",
        "type":"image",
        "pageNum":[
          1
        ],
        "uniqueId":"25b2a6f63bdf57f0d7a4f3da67c8616a"
      },
      {
        "pos":[
          {
            "x":0,
            "y":0
          },
          {
            "x":1113,
            "y":0
          },
          {
            "x":1113,
            "y":1440
          },
          {
            "x":0,
            "y":1440
          }
        ],
        "index":0,
        "subType":"none",
        "text":"",
        "type":"image",
        "pageNum":[
          2
        ],
        "uniqueId":"8c651c04c72a029b4be4ed80aa57fbbd"
      }
    ],
    "version":"1.2.0",
    "requestId":"docmind-20240820-6bf3e1bc1f164f0c99b8a12cfbcbeXXX"
  },
  "requestId":"1556A10B-E31C-5B21-8A5E-2179069D2XXX",
  "id":"docmind-20240820-6bf3e1bc1f164f0c99b8a12cfbcbeXXX",
  "status":"Success"
}

处理成功后Status字段会返回Success,表示处理成功。具体的处理结果在Data节点中,接下来介绍下Data节点的具体格式:

Data

object

解析结果

+ styles

array

样式列表(全文档中block的去重样式列表)

++ styleId

int

样式ID

++ underline

bool

是否有下划线

++ deleteLine

bool

是否有删除线

++ bold

bool

是否加粗

++ fontSize

int

字号大小

++ fontName

string

字体名称

++ color

string

文字颜色

++ charScale

float

对齐宽高比例尺字体高度不变的情况下,宽度会有变化,计算逻辑为宽/高

+ layouts

array

版面信息列表

++ uniqueId

string

版面信息唯一ID

++ index

int

版面阅读顺序

++ type

string

版面类型(text/table/image)

++ text

string

文本内容

++markdownContent

string

markdown 文本内容(开启参数后支持)

++ alignment

string

间距枚举

++ pos

array

坐标

++ pageNum

array

版面所在页数(可能多页)

++ numCol

int

表格总列数(表格版面类型特有)

++ numRow

int

表格总行数(表格版面类型特有)

++ cells

string

单元格信息(类型是表格才有)

+++ cellId

string

单元格ID(单个版面信息中唯一)

+++ cellUniqueId

string

单元格ID(全局唯一)

+++ type

string

单元格类型

+++ alignment

string

单元格对齐方式

+++ pageNum

array

单元格所在页数(可能多页)

+++ xsc

int

起始单元格横向是第几列

+++ ysc

int

起始单元格纵向是第几行

+++ xec

int

结束单元格横向是第几列

+++ yec

int

结束单元格纵向是第几行

+++ pos

array

单元格坐标

+++ text

string

单元格文本内容

+++ layouts

array

内嵌版面信息

+ logics

array

逻辑信息列表

++ docTree

array

层级树信息列表

+++ uniqueId

string

层级树节点的唯一ID

+++ level

int

节点层级

+++ link

object

子节点

+++ backlink

object

父节点

+ docInfo

object

文档信息

++ docType

string

文档类型

++ imageCount

int

图片数量

++ tableCount

int

表格数量

++ pageCountEstimate

int

文档页数

++ paragraphCount

int

段落数量

++ tokens

long

英文单词数,或中文字数

++ docUrl

string

文档URL地址

++ orignalDocName

string

用户提供的原始文档名称

++ originalDocUrl

string

用户提供的原始文档URL地址

++ pages

array

文档页面列表

场景示例

本内容阐述获取json后,场景处理使用上建议和方案:

获取markdown信息

GetDocStructureResult设置RevealMarkdown为true,ImageStrategy为url

import json
response = json.load(open("demo.json", "r"))
doc_json = response["Data"]

markdown_str = ""
for layout in doc_json["layouts"]:
  markdown_str += layout["markdownContent"] + "\n"

print(markdown_str)

获取指定层级内容

SubmitDocStructureJob/SubmitDocStructureJobAdvance 接口中,设置doctree或default,用于获取文档的结构信息

yuque_diagram.jpg

import json
response = json.load(open("demo.json", "r"))
doc_json = response["Data"]
doc_tree = doc_json["logics"]["docTree"]
layout_cache: {} = {}
for layout in doc_json["layouts"]:
    layout_cache[layout["uniqueId"]] = layout
    layout["children"] = list()

for node in doc_tree:
    father = node["backlink"]["上级"][0]
    child = node["uniqueId"]
    if father in layout_cache:
        # 设置 子layout
        layout_cache[father]["children"].append(layout_cache[child])
for layout in doc_json["layouts"]:
    # 当前layout下的子layout
    print(layout["children"])

附录

doc-json数据结构

VERSION(STRING: DOC-JSON版本信息)

Doc-json

styles(array:无重复的样式集合)

layouts(array:版面信息列表,不包含坐标信息)

logics(object:逻辑信息,只含层级树)

doclnfo(object:文档信息)

version(string:doc-json版本信息)

版面类型

文档智能解析返回结果中,版面的类型type及子类型subType列表如下:

type(类型)

类型描述

subType(子类型)

子类型描述

title

标题

table

表格

text

普通文字

para

段落

figure

图表

图片

head

页眉

page_header

页眉

foot_pagenum

页脚页码

page

页码